Oracle 12c中查詢dba_soruce ORA-00604處理
在使用PLSQL Developer工具檢視業務使用者下所有儲存過程報ORA-00604,ORA-00942,確認使用者許可權和表是存在,無失效物件。
透過10046進行追蹤
SQL>alter session set events '10046 trace name context forever, level 12';
SQL>select * from dba_source;
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-00942:table or view does not exit
SQL>alter session set events '10046 trace name context off'
Bind#1
oacdty=01 mxl=32(10) mxlc=00 mal=00 scl=00 pre=00
oacflg=10 fl2=0001 frm=01 csi=852 siz=0 off=24
kxsbbbfp=7fb04e2d2fc8 bln=32 avl=10 flg=01
value="DBA_SOURCE"
CLOSE #140395202554824:c=19,e=18,dep=1,type=1,tim=60072744458961
=====================
PARSE ERROR #140395202553720:len=475 dep=1 uid=0 oct=3 lid=0 tim=60072744459232 err=942
SELECT /* DS_SVC */ /*+ dynamic_sampling(0) no_sql_tune no_monitoring optimizer_features_enable(default) no_parallel result_cache(snapshot=3600) */ SUM(C1) FROM (SELECT /*+ qb_name("innerQuery") NO_INDEX_FFS( "MODSEP") */ 1 AS C1 FROM " MODSEP " SAMPLE BLOCK(0.0134053, 8) SEED(1) " MODSEP " WHERE ("MODSEP "."ENDTIME" IS NULL) AND ("MODSEP "."EPID"=257975690) AND ("MODSEP "."STEPSTATE"='1' OR " MODSEP P"."STEPSTATE" IS NULL)) innerQuery
=====================
PARSE ERROR #140395204915568:len=25 dep=0 uid=145 oct=3 lid=145 tim=60072744459291 err=604
select * from dba_source
CLOSE #140395202553720:c=1,e=1,dep=1,type=0,tim=60072744459334
WAIT #140395204915568: nam='SQL*Net break/reset to client' ela= 6 driver id=1413697536 break?=1 p3=0 obj#=-1 tim=60072744459416
WAIT #140395204915568: nam='SQL*Net break/reset to client' ela= 79 driver id=1413697536 break?=0 p3=0 obj#=-1 tim=60072744459502
WAIT #140395204915568: nam='SQL*Net message to client' ela= 0 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=60072744459509
*** 2022-02-09 19:07:51.535
WAIT #140395204915568: nam='SQL*Net message from client' ela= 6474857 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=60072750934385
CLOSE #140395204915568:c=6,e=5,dep=0,type=0,tim=60072750934457
=====================
PARSING IN CURSOR #140395204915568 len=56 dep=0 uid=145 oct=42 lid=145 tim=60072750934603 hv=1729844458 ad='0' sqlid='5dt9w7dmjqp7a'
A
從trace檔案可以看到MODSEP表,我們檢查了該表,表的狀態和資料都是正常的。
檢查一下這張表是不是在儲存過程中
SQL>select * from dba_source where upper(text) like '%MODSEP%' order by owner,name,type,line;
No rows selected
儲存過程不涉及該表。
確認dba_views中是否儲存dba_source
SQL>select text_vc c100 from dba_views where view_name='INT$DBA_SOURCE';
INT$DBA_SOURCE檢視的定義:
SELECT u.name
, o.name
, DECODE(o.type#
, 7, 'PROCEDURE'
, 8, 'FUNCTION'
, 9, 'PACKAGE'
,11, 'PACKAGE BODY'
,12, 'TRIGGER'
,13, 'TYPE'
,14, 'TYPE BODY'
,22, 'LIBRARY'
,87, 'ASSEMBLY'
,'UNDEFINED'
)
, o.type#
, s.line
, s.source
, DECODE(bitand(o.flags, 196608)
,65536 , 1
,131072, 1
,0
)
, TO_NUMBER(sys_context('USERENV', 'CON_ID'))
FROM sys."_CURRENT_EDITION_OBJ" o
, sys.source$ s
, sys.user$ u
WHERE o.obj# = s.obj#
AND o.owner# = u.user#
AND ( o.type# IN (7, 8, 9, 11, 12, 14, 22)
OR ( o.type# = 13
AND o.subname IS NULL
)
)
UNION ALL
SELECT u.name
, o.name
, 'JAVA SOURCE'
, o.type#
, s.joxftlno
, s.joxftsrc
, DECODE(bitand(o.flags, 196608)
,65536 , 1
,131072, 1
,0
)
, TO_NUMBER(sys_context('USERENV', 'CON_ID'))
FROM sys."_CURRENT_EDITION_OBJ" o
, x$joxscd s
, sys.user$ u
WHERE o.obj# = s.joxftobn
AND o.owner# = u.user#
AND o.type# = 28
;
pdb中執行
SQL>select * from int$dba_source
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-00942:table or view does not exit
PDB直接執行INT$DBA_SOURCE'檢視中定義的SQL可以返回結果,初步判斷是share pool中與記憶體指向不正確,建議的方案是1、重啟CDB和PDB;2、flush 共享池。
避開業務高峰在PDB中執行
SQL> alter system flush shared_pool;
還是不能查詢dba_source
在CDB中執行
SQL> alter system flush shared_pool;
可以正常查詢dba_source了,PL SQL developer功能也可以正常檢視業務使用者下的儲存過程。
-the end-
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28373936/viewspace-2865512/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 死鎖查詢處理Oracle
- Oracle死鎖查詢及處理Oracle
- ORACLE 查詢語句處理過程(Oracle
- Oracle 高水位查詢和處理方法彙總Oracle
- MySQL邏輯查詢處理MySql
- MySQL 查詢處理 SQL查詢執行順序MySql
- Oracle 單個表查詢速度極慢處理過程Oracle
- MyBatis Like查詢處理%_符號MyBatis符號
- ORA-00604 ORA-21700錯誤處理
- oracle學習(3) -變數為null時的查詢處理Oracle變數Null
- Oracle 12c ORA-29548 報錯處理Oracle
- 查詢等待事件及處理指令碼事件指令碼
- 查詢處理的邏輯順序
- 表死鎖查詢及處理辦法
- 大批次引數輸入查詢處理
- ora-00604 ora-00942 問題處理<轉>
- 在oracle中處理日期Oracle
- PostgreSQL在何處處理 sql查詢之六十六SQL
- 【大資料】SparkSql連線查詢中的謂詞下推處理(一)大資料SparkSQL
- 【大資料】SparkSql 連線查詢中的謂詞下推處理 (二)大資料SparkSQL
- ORA-00604 01654 06512錯誤處理
- 如何處理 MySQL 萬用字元的模糊查詢MySql字元
- (十三)資料庫查詢處理之QueryExecution(2)資料庫
- nodejs 連線 mysql 查詢事務處理NodeJSMySql
- Stax處理XML(一)——基於游標的查詢XML
- library cache lock\pin的查詢與處理
- 【層次查詢】Hierarchical Queries之處理順序
- Mybatis中Oracle的拼接模糊查詢MyBatisOracle
- 處理Oracle Session中的鎖OracleSession
- MySQL查詢中Sending data佔用大量時間的問題處理MySql
- Oracle 查詢Oracle
- 使用並查集處理集合的合併和查詢問題並查集
- 如何使用find和xargs查詢和處理檔案
- 關於 groupBy 分組查詢的分頁處理
- (十) 資料庫查詢處理之排序(sorting)資料庫排序
- (十二)資料庫查詢處理之Query Execution(1)資料庫
- Citus 分散式 PostgreSQL 叢集 - SQL Reference(查詢處理)分散式SQL
- 利用SQL Profiler處理開銷較大的查詢SQL