Oracle 9.2.0.1版本函數編譯的一個BUG
OS:Windows 2003 Server
ORACLE9.2.0.1
現象:在進行PL/SQL 函數編譯時加上DEBUG會出現死機,詳細描述如下:
下面是一個函數:
SQL> create or replace function A2(arg_bh User_Tables.table_name%type) 2 return number is 3 Result VARCHAR2(50); 4 begin 5 select arg_bh || rpad(arg_bh, 46) || '(測試)' into Result from dual; 6 end A2; 7 / Function created SQL> alter function a2 compile; Function altered SQL> alter function a2 compile debug;
然后就出現了數據庫死機現象,CPU100%
會話處理等待狀態,等待事件為null event
鎖住了以下系統表
SYS ERROR$SYS PROCEDUREINFO$SYS ARGUMENT$SYS PROCEDUREC$SYS PROCEDUREJAVA$SYS VTABLE$SYS PROCEDURE$SYS IDL_UB1$SYS IDL_CHAR$SYS IDL_UB2$SYS IDL_SB4$
使用KILL不能殺掉進程,進程一直處于killed狀態,通過orakill命令才可以KILL進程
做過一些測試,發現主要問題是以下代碼片段引起的:
arg_bh User_Tables.table_name%typearg_bh || rpad(arg_bh, 46) || '(測試)'
在數據庫 9.2.0.7中同樣的代碼編譯正常,說明這是9.2.0.1的BUG,具體不知道在什么版本中修復了,所以建議大家在開發時最好升級到高一些的版本。