Oracle打19.28 RU補丁遇到ORA-29532錯誤案例總結
2025-08-27 14:28 瀟湘隱者 閱讀(59) 評論(0) 收藏 舉報上一篇文章"Windows平臺安裝Oracle RU 19.28補丁遇到的小問題"中介紹了Windows平臺安裝Oracle 19.28 RU補丁遇到的幾個小問題,今天終于在Linux平臺安裝Oracle 19.28 RU補丁時也遇到了一個小問題,當然這個問題跟平臺沒有關系,下面簡單總結一下.
在做datapatch時,遇到了下面錯誤
Validating logfiles...done
Patch 37960098 apply (pdb *****): WITH ERRORS
logfile: /opt/oracle19c/cfgtoollogs/sqlpatch/37960098/27635722/37960098_apply_*****_*****_2025Aug27_09_52_37.log (errors)
-> Error at line 13455: script rdbms/admin/backport_files/bug_37243920_apply.sql
- ORA-29532: Java call terminated by uncaught Java exception:
- oracle.aurora.server.tools.loadjava.ToolsError:
- Error during dropjava: opening file javax/servlet/GenericServlet.
- Check trace file for details
- ORA-06512: at line 24
Patch 37847857 apply (pdb *****): WITH ERRORS (PREV PATCH)
logfile: /opt/oracle19c/cfgtoollogs/sqlpatch/37847857/27534561/37847857_apply_*****_*****_2025Aug27_09_52_08.log (no errors)
Patch 37960098 apply (pdb *****): WITH ERRORS
logfile: /opt/oracle19c/cfgtoollogs/sqlpatch/37960098/27635722/37960098_apply_*****_*****_2025Aug27_09_52_37.log (errors)
-> Error at line 13455: script rdbms/admin/backport_files/bug_37243920_apply.sql
- ORA-29532: Java call terminated by uncaught Java exception:
- oracle.aurora.server.tools.loadjava.ToolsError:
- Error during dropjava: opening file javax/servlet/GenericServlet.
- Check trace file for details
- ORA-06512: at line 24
Patch 37847857 apply (pdb *****): WITH ERRORS (PREV PATCH)
logfile: /opt/oracle19c/cfgtoollogs/sqlpatch/37847857/27534561/37847857_apply_*****_*****_2025Aug27_09_52_08.log (no errors)
Patch 37960098 apply (pdb *****): WITH ERRORS
logfile: /opt/oracle19c/cfgtoollogs/sqlpatch/37960098/27635722/37960098_apply_*****_*****_2025Aug27_09_52_37.log (errors)
-> Error at line 13455: script rdbms/admin/backport_files/bug_37243920_apply.sql
- ORA-29532: Java call terminated by uncaught Java exception:
- oracle.aurora.server.tools.loadjava.ToolsError:
- Error during dropjava: opening file javax/servlet/GenericServlet.
- Check trace file for details
- ORA-06512: at line 24
Patch 37847857 apply (pdb *****): WITH ERRORS (PREV PATCH)
logfile: /opt/oracle19c/cfgtoollogs/sqlpatch/37847857/27534561/37847857_apply_*****_*****_2025Aug27_09_52_08.log (no errors)
Please refer to MOS Note 1609718.1 and/or the invocation log
/opt/oracle19c/cfgtoollogs/sqlpatch/sqlpatch_1124749_2025_08_27_09_46_22/sqlpatch_invocation.log
for information on how to resolve the above errors.
SQL Patching tool complete on Wed Aug 27 09:55:50 2025
其中主要的報錯信息如下所示:
Error at line 13455: script rdbms/admin/backport_files/bug_37243920_apply.sql
- ORA-29532: Java call terminated by uncaught Java exception:
- oracle.aurora.server.tools.loadjava.ToolsError:
- Error during dropjava: opening file javax/servlet/GenericServlet.
- Check trace file for details
- ORA-06512: at line 24
檢查具體錯誤日志,詳細錯誤信息如下截圖所示:

在Oracle Support官網找到了出錯的原因,官方文檔"19.28 OJVMRU Datapatch Execution Failing With ORA-29532 Error During Dropjava Command While Opening File javax/servlet (Doc ID 3097851.1)"
中解釋之所以出現這個錯誤,是因為當時創建PDB時,指定了PATH_PREFIX.官方的詳細解釋如下所示:
CHANGES
This error is triggered both when upgrading from 19.26/19.27 to 19.28 and when attempting a rollback using datapatch from the previous Oracle Home. The error occurs regardless of whether the database is actively using Java features or not.
CAUSE
This issue can not occur in non-CDBs. It is specific to PDBs that have PATH_PREFIX set. It can not occur even in PDBs without PATH_PREFIX set
Below query can be used to identify if PDB have the PATH_PREFIX set.
On CDB as sysdba
SQL> alter session set container=<PDB_NAME>; ====>>> Provide the PDB name where datapatch failed with above error
SQL> select property_value from cdb_properties where property_name='PATH_PREFIX';
PROPERTY_VALUE
--------------------------------------------------------------------------------
/xxxx/xxxxx/xxxxxxxxx
There is an open BUG 38241374 for this issue and at the time of writing this doc, bug is still being worked by Oracle development team
解決方案
檢查對應PDB的PATH_PREFIX設置,如下所示
SQL> alter session set container=*****;
Session altered.
SQL> select property_value from cdb_properties where property_name='PATH_PREFIX';
PROPERTY_VALUE
--------------------------------------------------------------------------------
/****uatdb/data/pdbseed
SQL>
然后在對應的PDB執行下面SQL語句
alter session set container=<PDB NAME>;
@@?/rdbms/admin/sqlsessstart.sql
show con_name
set serveroutput on
declare
cur sys_refcursor;
jvm_stat number;
class_name varchar2(512);
prop_val varchar2(1000);
begin
select status into jvm_stat from sys.registry$ where cid = 'JAVAVM';
if jvm_stat <> 99 and SYS_CONTEXT('USERENV','CON_ID') > 1 then
select property_value into prop_val from cdb_properties where property_name='PATH_PREFIX';
-- Drop javax/servlet
open cur for
q'[select dbms_java.longname(object_name) from all_objects
where object_type = 'JAVA CLASS'
and dbms_java.longname(object_name) like 'javax/servlet/%']';
loop
fetch cur into class_name;
exit when cur%NOTFOUND;
execute immediate 'drop java class "' || class_name || '"';
execute immediate 'drop public synonym "' || class_name || '"';
dbms_output.put_line('Java class [' || class_name || '] dropped');
end loop;
close cur;
end if;
exception when no_data_found then null;
end;
/
COMMIT;
@?/rdbms/admin/sqlsessend.sql
具體執行的詳細信息如下所示:
SQL> alter session set container=****;
Session altered.
SQL>
SQL> @@?/rdbms/admin/sqlsessstart.sql
Session altered.
SQL> show con_name
CON_NAME
------------------------------
*****
SQL>
SQL> set serveroutput on
SQL> declare
2 cur sys_refcursor;
3 jvm_stat number;
4 class_name varchar2(512);
5 prop_val varchar2(1000);
6 begin
7 select status into jvm_stat from sys.registry$ where cid = 'JAVAVM';
8 if jvm_stat <> 99 and SYS_CONTEXT('USERENV','CON_ID') > 1 then
9 select property_value into prop_val from cdb_properties where property_name='PATH_PREFIX';
10 -- Drop javax/servlet
11 open cur for
12 q'[select dbms_java.longname(object_name) from all_objects
13 where object_type = 'JAVA CLASS'
14 and dbms_java.longname(object_name) like 'javax/servlet/%']';
15 loop
16 fetch cur into class_name;
17 exit when cur%NOTFOUND;
18 execute immediate 'drop java class "' || class_name || '"';
19 execute immediate 'drop public synonym "' || class_name || '"';
20 dbms_output.put_line('Java class [' || class_name || '] dropped');
21 end loop;
22 close cur;
23
24 end if;
25 exception when no_data_found then null;
26 end;
27 /
Java class [javax/servlet/GenericServlet] dropped
Java class [javax/servlet/RequestDispatcher] dropped
Java class [javax/servlet/Servlet] dropped
Java class [javax/servlet/ServletConfig] dropped
Java class [javax/servlet/ServletContext] dropped
Java class [javax/servlet/ServletException] dropped
Java class [javax/servlet/ServletInputStream] dropped
Java class [javax/servlet/ServletOutputStream] dropped
Java class [javax/servlet/ServletRequest] dropped
Java class [javax/servlet/ServletResponse] dropped
Java class [javax/servlet/SingleThreadModel] dropped
Java class [javax/servlet/UnavailableException] dropped
Java class [javax/servlet/http/Cookie] dropped
Java class [javax/servlet/http/HttpServlet] dropped
Java class [javax/servlet/http/HttpServletRequest] dropped
Java class [javax/servlet/http/HttpServletResponse] dropped
Java class [javax/servlet/http/HttpSession] dropped
Java class [javax/servlet/http/HttpSessionBindingEvent] dropped
Java class [javax/servlet/http/HttpSessionBindingListener] dropped
Java class [javax/servlet/http/HttpSessionContext] dropped
Java class [javax/servlet/http/HttpUtils] dropped
Java class [javax/servlet/http/NoBodyOutputStream] dropped
Java class [javax/servlet/http/NoBodyResponse] dropped
PL/SQL procedure successfully completed.
SQL> COMMIT;
Commit complete.
SQL> @?/rdbms/admin/sqlsessend.sql
Session altered.
SQL>
在每一個有問題的PDB上執行上面SQL語句后,重新跑datapatch腳本,經過實際驗證,上述方法能解決這個問題. 另外,在搜索這個問題的時候,也發現還有其他一些原因也會遇到ORA-29532,不過出錯的細節有所不同。個人沒有碰到過那樣的問題。
參考資料
19.28 OJVMRU Datapatch Execution Failing With ORA-29532 Error During Dropjava Command While Opening File javax/servlet (Doc ID 3097851.1)
掃描上面二維碼關注我
如果你真心覺得文章寫得不錯,而且對你有所幫助,那就不妨幫忙“推薦"一下,您的“推薦”和”打賞“將是我最大的寫作動力!
本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接.
浙公網安備 33010602011771號