联系:QQ(5163721)
标题:OGG DDL trigger造成升级数据库后大量SYS对象失效和数据库DDL失效
作者:Lunar©版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.]
OGG的DDL功能真是坑,今天在测试库尝试升级,被OGG的DDL给坑了(以前没摸过这个库,不知道有这个东西……)
以后,做任何大操作以前,一定要仔细检查数据库,是否曾经开启过OGG的DDL功能。
这个功能有很多隐患:
因为OGG的DDL是建立在SYS用户下面的, 与其他普通用户的trigger不同:
1,数据库文件offline后,如果有OGG的DDL曾经被开启,可能因此打不开数据库(先disable ogg ddl才行)
2,升级过程中,如果没有disable ddl trigger,可能出现一些升级后的异常
3,OGG用户删除后,并不能删除OGG的DDL trigger,因为他的属主是SYS,且属于internal trigger,会导致大量SYS用户的对象失效和DDL功能失效。
。。。。
升级数据库,从11.2.0.1到11.2.0.4,升级过程中,没有报错,但是数据库启动后,报错:
Errors in file /u01/oracle/app/diag/rdbms/gpsdb3/gpsdb3/trace/gpsdb3_ora_19939.trc: ORA-04045: errors during recompilation/revalidation of SYS.OLAPISTARTUPTRIGGER ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 1027 ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 904 ORA-04045: errors during recompilation/revalidation of GGUSR.DDLREPLICATION ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 1027 ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLR Completed: ALTER DATABASE OPEN
尝试删除OGG用户,报错:
SQL> drop user GGUSR; drop user GGUSR * ERROR at line 1: ORA-00604: error occurred at recursive SQL level 1 ORA-04045: errors during recompilation/revalidation of GGUSR.DDLREPLICATION ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 1027 ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 904 ORA-04045: errors during recompilation/revalidation of GGUSR.DDLREPLICATION ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 1027 ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-04045: errors during recompilation/revalidation of GGUSR.DDLREPLICATION ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 1027 ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" SQL>
检查报错的OLAP过程,为INVALID状态:
SQL> select owner, object_type, status from all_objects where object_name='OLAPIHISTORYRETENTION'; OWNER OBJECT_TYPE STATUS ------------------------------ ------------------- ------- SYS PROCEDURE INVALID SQL>
但是升级后,检查所有数据库组件是VALID状态:
SQL> set pages 9999 SQL> set linesize 1000 SQL> col comp_id for a14 SQL> col comp_name for a36 SQL> col version for a14 SQL> select COMP_ID, COMP_NAME, VERSION, STATUS from dba_registry; COMP_ID COMP_NAME VERSION STATUS -------------- ------------------------------------ -------------- ---------------------- OWB OWB 11.2.0.1.0 VALID APEX Oracle Application Express 3.2.1.00.10 VALID AMD OLAP Catalog 11.2.0.4.0 VALID SDO Spatial 11.2.0.4.0 VALID ORDIM Oracle Multimedia 11.2.0.4.0 VALID XDB Oracle XML Database 11.2.0.4.0 VALID CONTEXT Oracle Text 11.2.0.4.0 VALID EXF Oracle Expression Filter 11.2.0.4.0 VALID RUL Oracle Rules Manager 11.2.0.4.0 VALID OWM Oracle Workspace Manager 11.2.0.4.0 VALID CATALOG Oracle Database Catalog Views 11.2.0.4.0 VALID CATPROC Oracle Database Packages and Types 11.2.0.4.0 VALID JAVAVM JServer JAVA Virtual Machine 11.2.0.4.0 VALID XML Oracle XDK 11.2.0.4.0 VALID CATJAVA Oracle Database Java Packages 11.2.0.4.0 VALID APS OLAP Analytic Workspace 11.2.0.4.0 VALID XOQ Oracle OLAP API 11.2.0.4.0 VALID 17 rows selected. SQL>
理论上,升级后,组件都是正常的,为什么出现这种情况?
SQL> select owner, trigger_name, status from dba_triggers where trigger_name like '%OLAPI%'; OWNER TRIGGER_NAME STATUS ------------------------------ ------------------------------ -------- SYS OLAPISTARTUPTRIGGER ENABLED SYS OLAPISHUTDOWNTRIGGER ENABLED SQL>
尝试disable 这两个trigger,也报错:
SQL> ALTER TRIGGER SYS.OLAPISTARTUPTRIGGER DISABLE; ALTER TRIGGER SYS.OLAPISTARTUPTRIGGER DISABLE * ERROR at line 1: ORA-00604: error occurred at recursive SQL level 1 ORA-04045: errors during recompilation/revalidation of GGUSR.DDLREPLICATION ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 1027 ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 904 ORA-04045: errors during recompilation/revalidation of GGUSR.DDLREPLICATION ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 1027 ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-04045: errors during recompilation/revalidation of GGUSR.DDLREPLICATION ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 1027 ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" SQL>
貌似所有的DDL都失效了:
SQL> create user lunar identified by lunar; create user lunar identified by lunar * ERROR at line 1: ORA-00604: error occurred at recursive SQL level 1 ORA-04045: errors during recompilation/revalidation of GGUSR.DDLREPLICATION ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 1027 ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 904 ORA-04045: errors during recompilation/revalidation of GGUSR.DDLREPLICATION ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 1027 ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-04045: errors during recompilation/revalidation of GGUSR.DDLREPLICATION ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 1027 ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" SQL>
再一查SYS的无效对象,800多个:
SQL> select count(*) from dba_objects where status='INVALID'; COUNT(*) ---------- 814 SQL>
使用utlrp编译,也报错:
SQL> @?/rdbms/admin/utlrp COMP_TIMESTAMP UTLRP_BGN 2015-04-16 00:36:07 DOC> The following PL/SQL block invokes UTL_RECOMP to recompile invalid DOC> objects in the database. Recompilation time is proportional to the DOC> number of invalid objects in the database, so this command may take DOC> a long time to execute on a database with a large number of invalid DOC> objects. DOC> DOC> Use the following queries to track recompilation progress: DOC> DOC> 1. Query returning the number of invalid objects remaining. This DOC> number should decrease with time. DOC> SELECT COUNT(*) FROM obj$ WHERE status IN (4, 5, 6); DOC> DOC> 2. Query returning the number of objects compiled so far. This number DOC> should increase with time. DOC> SELECT COUNT(*) FROM UTL_RECOMP_COMPILED; DOC> DOC> This script automatically chooses serial or parallel recompilation DOC> based on the number of CPUs available (parameter cpu_count) multiplied DOC> by the number of threads per CPU (parameter parallel_threads_per_cpu). DOC> On RAC, this number is added across all RAC nodes. DOC> DOC> UTL_RECOMP uses DBMS_SCHEDULER to create jobs for parallel DOC> recompilation. Jobs are created without instance affinity so that they DOC> can migrate across RAC nodes. Use the following queries to verify DOC> whether UTL_RECOMP jobs are being created and run correctly: DOC> DOC> 1. Query showing jobs created by UTL_RECOMP DOC> SELECT job_name FROM dba_scheduler_jobs DOC> WHERE job_name like 'UTL_RECOMP_SLAVE_%'; DOC> DOC> 2. Query showing UTL_RECOMP jobs that are running DOC> SELECT job_name FROM dba_scheduler_running_jobs DOC> WHERE job_name like 'UTL_RECOMP_SLAVE_%'; DOC># DECLARE * ERROR at line 1: ORA-04045: errors during recompilation/revalidation of GGUSR.DDLREPLICATION ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 1027 ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 904 ORA-04045: errors during recompilation/revalidation of GGUSR.DDLREPLICATION ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 1027 ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-04045: errors during recompilation/revalidation of GGUSR.DDLREPLICATION ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 1027 ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at "SYS.UTL_RECOMP", line 865 ORA-06512: at line 4 COMP_TIMESTAMP UTLRP_END 2015-04-16 00:36:07 DOC> The following query reports the number of objects that have compiled DOC> with errors. DOC> DOC> If the number is higher than expected, please examine the error DOC> messages reported with each object (using SHOW ERRORS) to see if they DOC> point to system misconfiguration or resource constraints that must be DOC> fixed before attempting to recompile these objects. DOC># 0 DOC> The following query reports the number of errors caught during DOC> recompilation. If this number is non-zero, please query the error DOC> messages in the table UTL_RECOMP_ERRORS to see if any of these errors DOC> are due to misconfiguration or resource constraints that must be DOC> fixed before objects can compile successfully. DOC># 0 CREATE OR REPLACE FUNCTION local_enquote_name (str varchar2) * ERROR at line 1: ORA-00604: error occurred at recursive SQL level 1 ORA-04045: errors during recompilation/revalidation of GGUSR.DDLREPLICATION ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 1027 ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 904 ORA-04045: errors during recompilation/revalidation of GGUSR.DDLREPLICATION ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 1027 ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-04045: errors during recompilation/revalidation of GGUSR.DDLREPLICATION ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 1027 ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" DECLARE * ERROR at line 1: ORA-00904: "LOCAL_ENQUOTE_NAME": invalid identifier ORA-06512: at line 27 DROP function local_enquote_name * ERROR at line 1: ORA-00604: error occurred at recursive SQL level 1 ORA-04045: errors during recompilation/revalidation of GGUSR.DDLREPLICATION ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 1027 ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 904 ORA-04045: errors during recompilation/revalidation of GGUSR.DDLREPLICATION ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 1027 ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-04045: errors during recompilation/revalidation of GGUSR.DDLREPLICATION ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06512: at line 1027 ORA-04067: not executed, package body "GGUSR.DDLREPLICATION" does not exist ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" ORA-06508: PL/SQL: could not find program unit being called: "GGUSR.DDLREPLICATION" FAILED CHECK FOR INDEXTYPE CONTEXT Warning: XDB now invalid, could not find xdbconfig PL/SQL procedure successfully completed. SQL>
最后一行提示XDB组件有问题:
SQL> SELECT substrb(Comp_ID,1,10)Comp_ID, 2 substrb(Status,1,8)Status, 3 substrb(Version,1,12)Version, 4 substrb(Comp_Name,1,35)Comp_Name 5 FROM DBA_Registry 6 WHERE comp_id = 'XDB'; COMP_ID STATUS VERSION COMP_NAME ---------- -------- ------------ ----------------------------------- XDB INVALID 11.2.0.4.0 Oracle XML Database SQL>
diable OGG的trigger,然后删除ogg用户后,再次使用utlrp编译,已经正常了:
SQL> @?/rdbms/admin/utlrp TIMESTAMP -------------------------------------------------------------------------------- COMP_TIMESTAMP UTLRP_BGN 2015-04-16 01:03:22 1 row selected. DOC> The following PL/SQL block invokes UTL_RECOMP to recompile invalid DOC> objects in the database. Recompilation time is proportional to the DOC> number of invalid objects in the database, so this command may take DOC> a long time to execute on a database with a large number of invalid DOC> objects. DOC> DOC> Use the following queries to track recompilation progress: DOC> DOC> 1. Query returning the number of invalid objects remaining. This DOC> number should decrease with time. DOC> SELECT COUNT(*) FROM obj$ WHERE status IN (4, 5, 6); DOC> DOC> 2. Query returning the number of objects compiled so far. This number DOC> should increase with time. DOC> SELECT COUNT(*) FROM UTL_RECOMP_COMPILED; DOC> DOC> This script automatically chooses serial or parallel recompilation DOC> based on the number of CPUs available (parameter cpu_count) multiplied DOC> by the number of threads per CPU (parameter parallel_threads_per_cpu). DOC> On RAC, this number is added across all RAC nodes. DOC> DOC> UTL_RECOMP uses DBMS_SCHEDULER to create jobs for parallel DOC> recompilation. Jobs are created without instance affinity so that they DOC> can migrate across RAC nodes. Use the following queries to verify DOC> whether UTL_RECOMP jobs are being created and run correctly: DOC> DOC> 1. Query showing jobs created by UTL_RECOMP DOC> SELECT job_name FROM dba_scheduler_jobs DOC> WHERE job_name like 'UTL_RECOMP_SLAVE_%'; DOC> DOC> 2. Query showing UTL_RECOMP jobs that are running DOC> SELECT job_name FROM dba_scheduler_running_jobs DOC> WHERE job_name like 'UTL_RECOMP_SLAVE_%'; DOC># PL/SQL procedure successfully completed. TIMESTAMP -------------------------------------------------------------------------------- COMP_TIMESTAMP UTLRP_END 2015-04-16 01:04:47 1 row selected. DOC> The following query reports the number of objects that have compiled DOC> with errors. DOC> DOC> If the number is higher than expected, please examine the error DOC> messages reported with each object (using SHOW ERRORS) to see if they DOC> point to system misconfiguration or resource constraints that must be DOC> fixed before attempting to recompile these objects. DOC># OBJECTS WITH ERRORS ------------------- 0 1 row selected. DOC> The following query reports the number of errors caught during DOC> recompilation. If this number is non-zero, please query the error DOC> messages in the table UTL_RECOMP_ERRORS to see if any of these errors DOC> are due to misconfiguration or resource constraints that must be DOC> fixed before objects can compile successfully. DOC># ERRORS DURING RECOMPILATION --------------------------- 0 1 row selected. Function created. PL/SQL procedure successfully completed. Function dropped. PL/SQL procedure successfully completed. SQL>
且数据库已经没有无效对象:
SQL> set heading off SQL> spool compileinvalid.sql SQL> select 'alter '||object_type|| ' ' || owner ||'.'||object_name || ' compile;' from dba_objects where status='INVALID'; no rows selected SQL> SQL> SQL>
再次校验XDB的组件,正常了:
SQL> execute dbms_regxdb.validatexdb; PL/SQL procedure successfully completed. SQL> SELECT substrb(Comp_ID,1,10)Comp_ID, substrb(Status,1,8)Status, substrb(Version,1,12)Version, 2 3 4 substrb(Comp_Name,1,35)Comp_Name FROM DBA_Registry 5 6 WHERE comp_id = 'XDB'; COMP_ID STATUS VERSION COMP_NAME -------------------- --------------- ---------- ---------------------------------------- XDB VALID 11.2.0.4.0 Oracle XML Database SQL> alter trigger MDSYS.SDO_GEOR_ADDL_TRIGGER enable; alter trigger MDSYS.SDO_GEOR_BDDL_TRIGGER enable; Trigger altered. SQL> Trigger altered. SQL>
再次查询组建状态,都ok:
SQL> set pages 9999 SQL> set linesize 1000 SQL> col comp_id for a14 SQL> col comp_name for a36 SQL> col version for a14 SQL> select COMP_ID, COMP_NAME, VERSION, STATUS from dba_registry; COMP_ID COMP_NAME VERSION STATUS -------------- ------------------------------------ -------------- ---------------------- OWB OWB 11.2.0.1.0 VALID APEX Oracle Application Express 3.2.1.00.10 VALID AMD OLAP Catalog 11.2.0.4.0 VALID SDO Spatial 11.2.0.4.0 VALID ORDIM Oracle Multimedia 11.2.0.4.0 VALID XDB Oracle XML Database 11.2.0.4.0 VALID CONTEXT Oracle Text 11.2.0.4.0 VALID EXF Oracle Expression Filter 11.2.0.4.0 VALID RUL Oracle Rules Manager 11.2.0.4.0 VALID OWM Oracle Workspace Manager 11.2.0.4.0 VALID CATALOG Oracle Database Catalog Views 11.2.0.4.0 VALID CATPROC Oracle Database Packages and Types 11.2.0.4.0 VALID JAVAVM JServer JAVA Virtual Machine 11.2.0.4.0 VALID XML Oracle XDK 11.2.0.4.0 VALID CATJAVA Oracle Database Java Packages 11.2.0.4.0 VALID APS OLAP Analytic Workspace 11.2.0.4.0 VALID XOQ Oracle OLAP API 11.2.0.4.0 VALID 17 rows selected. SQL>