您好,登錄后才能下訂單哦!
開發人員在執行語句執行是報ORA-00600:內部錯誤代碼
語句如下
create
tablesytab01
as
select a.*
from tab1 c,
(
select b.*
from tab2 s,
(
select a.*,row_number()over(
partition
by cl
order
by cl_name ) rn
from tab3 a
wherea.area_no=
'aa'
) a
where
trim(s.home_cl)=
trim(a.cl)
and rn=
'1'
and
month=
'201703'
and s.area =
'aa'
)b
where c.user_no = b.user_no
數據庫版本如下:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bitProduction
With the Partitioning, Real Application Clusters, Automatic StorageManagement, OLAP,
Data Mining and Real Application Testing options
數據庫日志報如下錯誤:
*** 2017-03-23 17:59:14.729
*** SESSION ID:(2191.15425) 2018-04-23 17:59:14.729
*** CLIENT ID:() 2018-04-23 17:59:14.729
*** SERVICE NAME:(hbdw) 2018-04-23 17:59:14.729
*** MODULE NAME:(PL/SQL Developer) 2018-04-23 17:59:14.729
*** ACTION NAME:(SQL 窗口 - 新建) 2018-04-23 17:59:14.729
Incident 258636 created, dump file:/u01/app/oracle/diag/rdbms/hbdw/hbdw1/incident/incdir_258636/orcl1_ora_11899_i258636.trc
ORA-00600: 內部錯誤代碼, 參數: [rwoirw: check ret val], [], [], [], [], [], [], [], [], [], [],[]
此incdir_258636/orcl1_ora_11899_i258636.trc日志報錯如下:
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubiousvalue)
-------------------- -------- ------------------------------------------------
skdstdst()+41 call kgdsdst() 000000000 ? 000000000 ?
7FFFFFFEBC30 ? 7FFFFFFEBD08 ?
7FFFFFFF07B0 ? 000000002 ?
ksedst1()+103 call skdstdst() 000000000 ? 000000000 ?
7FFFFFFEBC30 ? 7FFFFFFEBD08 ?
7FFFFFFF07B0 ? 000000002 ?
ksedst()+39 call ksedst1() 000000000 ? 000000001 ?
7FFFFFFEBC30 ? 7FFFFFFEBD08 ?
7FFFFFFF07B0 ?000000002 ?
dbkedDefDump()+2746 call ksedst() 000000000 ? 000000001 ?
7FFFFFFEBC30 ? 7FFFFFFEBD08 ?
7FFFFFFF07B0 ? 000000002 ?
ksedmp()+41 call dbkedDefDump() 000000003 ? 000000002 ?
7FFFFFFEBC30 ? 7FFFFFFEBD08 ?
7FFFFFFF07B0 ? 000000002 ?
因為由于是語句引起的,分析思路如下:
1. 看看只做查詢有沒有此問題。
select a.* from tab1 c,
(select b.* from tab2 s,
( select a.*,row_number()over(partition by cl order by cl_name ) rn
from tab3 a where a.area_no='aa'
) a
where trim(s.home_cl)=trim(a.cl) and rn='1' and
month='201703'
and s.area ='aa'
)b
where c.user_no = b.user_no
有結果輸出,查詢正常
2. 從上邊的結果可知,應該不是查詢引起的問題。
突然想到難道是臨時表的數量太多了導致的?然后嘗試后面添加rownum< 1000; 手動執行create sql語句結果成功了。
3. 用rownum 解決此問題
想了一下,可能11.2.0.4里面對create tablexxx as select …. From …的限制比較嚴格(沒有經過論證,也可能是個bug),意味著在不知道后面的select … from …的總體數量的情況下或者數量已經超過了oracle的默認值比如1000這樣,會提示ORA-00600的錯誤。按照這個思路我查詢出來select … from ..的總數量,在后面加上and rownum<6000;再次執行居然成功了。
想了想按照測試的邊界值理論,一個最大值能有結果,那就嘗試下最小值,在條件上加and rownum>-1;(因為有可能select 出來空記錄)呢?執行了一下居然成功,語句修改如下:
create
table sytab01 as
select a.* fromtab1 c,
(select b.* from tab2 s,
( select a.*,row_number()over(partition by cl order by cl_name ) rn
from tab3 a wherea.area_no=
'aa'
) a
where trim(s.home_cl)=trim(a.cl)and rn=
'1'
and
month=
'201703'
and s.area =
'aa'
)b
where c.user_no = b.user_no
and rownum>-1 ;
4. 關于官方文檔對ora-600的描述如下:
Bug 14275161 - ORA-600[rwoirw: check ret val] on CTAS with predicate move around ( 文檔 ID 14275161.8)
修改隱性參數:
在語句遇到600錯誤是,一般個人建議對語句進行改造,避免問題,
除非有比較多的語句影響到數據庫。一般不建議對數據庫做手術。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。