(官方文档)
(官方文档)
(百度上很详细的示例)
(百度空间上的系列博文一)
(百度空间上的系列博文二)
(百度空间上的系列博文三)
######################################################################################################DBMS_METADATA.GET_DDL包可以得到数据库的对象的ddl脚本。如下(SQLPLUS中执行):
1.得到一个表的ddl语句:Trackback:
******************************************************
常见错误1:
ORA-39212: 安装错误: 未正确加载 XSL 样式表
ORA-06512: 在 "SYS.DBMS_SYS_ERROR", line 79ORA-06512: 在 "SYS.DBMS_METADATA_INT", line 7398ORA-06512: 在 "SYS.DBMS_METADATA_INT", line 7447ORA-06512: 在 "SYS.DBMS_METADATA_INT", line 9453ORA-06512: 在 "SYS.DBMS_METADATA", line 1919ORA-06512: 在 "SYS.DBMS_METADATA", line 2792ORA-06512: 在 "SYS.DBMS_METADATA", line 4333ORA-06512: 在 line 1
ORA-06502: PL/SQL: 数字或值错误
ORA-31605: the following was returned from LpxXSLResetAllVars in routine kuxslResetParams:LPX-1: NULL pointerORA-06512: 在 "SYS.UTL_XML", line 246ORA-06512: 在 "SYS.DBMS_METADATA_INT", line 7511ORA-06512: 在 "SYS.DBMS_METADATA_INT", line 9453ORA-06512: 在 "SYS.DBMS_METADATA", line 1919ORA-06512: 在 "SYS.DBMS_METADATA", line 2792ORA-06512: 在 "SYS.DBMS_METADATA", line 4333ORA-06512: 在 line 1
【解决办法】:
如果遇到类似的错误,需要 站点下载编号为2736436的补丁。
常见错误2:
SQL> select dbms_metadata.get_ddl('TABLE','PC','SCOTT') from dual;
ERROR:ORA-19206: Invalid value for query or REF CURSOR parameterORA-06512: at "SYS.DBMS_XMLGEN", line 83ORA-06512: at "SYS.DBMS_METADATA", line 345ORA-06512: at "SYS.DBMS_METADATA", line 410ORA-06512: at "SYS.DBMS_METADATA", line 449ORA-06512: at "SYS.DBMS_METADATA", line 615ORA-06512: at "SYS.DBMS_METADATA", line 1221ORA-06512: at line 1no rows selectedSQL>解决办法:运行$ORACLE_HOME/rdbms/admin/catmeta.sql
*****************************************************
今天在一个数据库上执行DBMS_METADATA包的时候,出现了ORA-19206的错误。
具体错误信息如下:
SQL> SELECT DBMS_METADATA.GET_DDL('MATERIALIZED_VIEW', 'CAT_AUTH_GMP', 'NDMAIN') FROM DUAL;ERROR:ORA-19206: Invalid value for query or REF CURSOR parameterORA-06512: at "SYS.DBMS_XMLGEN", line 83ORA-06512: at "SYS.DBMS_METADATA", line 345ORA-06512: at "SYS.DBMS_METADATA", line 410ORA-06512: at "SYS.DBMS_METADATA", line 449ORA-06512: at "SYS.DBMS_METADATA", line 615ORA-06512: at "SYS.DBMS_METADATA", line 1221ORA-06512: at line 1
no rows selected
仔细检查了一下,发现所有和物化视图相关的表在执行DBMS_METADATA.GET_DDL时都会出现上面的错误,而其他的对象并没有受到影响。
由于这个数据库的数据是通过EXP/IMP迁移得到的,虽然在IMP过程中没有什么明显的错误信息,但是仍然怀疑是EXP/IMP造成的数据字典出现了错误。
查询了一下METALINK信息,发现了很多类似的错误,而Oracle给出的解决方法是重装XDB。
于是尝试重装XML方案:
首先以SYSDBA身份登陆,关闭并重启数据库,为卸载XML对象做准备:
SQL> CONN / AS SYSDBAConnected.SQL> SHUTDOWN IMMEDIATEDatabase closed.Database dismounted.ORACLE instance shut down.SQL> STARTUPORACLE instance started.
Total System Global Area 5876197568 bytesFixed Size 739520 bytesVariable Size 503316480 bytesDatabase Buffers 5368709120 bytesRedo Buffers 3432448 bytesDatabase mounted.Database opened.SQL> SET ECHO ONSQL> SPO XDB_REMOVAL.LOGSQL> @?/rdbms/admin/catnoqm.sqlSQL> RemSQL> Rem $Header: catnoqm.sql 03-jan-2002.17:32:31 spannala Exp $SQL> RemSQL> Rem catnoqm.sqlSQL> RemSQL> Rem Copyright (c) 2001, 2002, Oracle Corporation. All rights reserved.SQL> RemSQL> Rem NAMESQL> Rem catnoqm.sql - CATalog script for removing (NO) XDBSQL> RemSQL> Rem DESCRIPTIONSQL> Rem this script drops the metadata created for SQL XML managementSQL> Rem This scirpt must be invoked as sys. It is to be invoked asSQL> RemSQL> Rem @@catnoqmSQL> Rem NOTESSQL> RemSQL> Rem MODIFIED (MM/DD/YY)SQL> Rem spannala 01/03/02 - tables are not handled by xdbSQL> Rem spannala 01/02/02 - registrySQL> Rem spannala 12/20/01 - passing in the resource tablespace nameSQL> Rem tsingh 11/17/01 - remove connection stringSQL> Rem tsingh 06/30/01 - XDB: XML Database mergeSQL> Rem amanikut 02/13/01 - CreationSQL> RemSQL> RemSQL>SQL> execute dbms_registry.removing('XDB');BEGIN dbms_registry.removing('XDB'); END;
*ERROR at line 1:ORA-01403: no data foundORA-06512: at "SYS.DBMS_REGISTRY", line 420ORA-06512: at line 1
SQL> drop user xdb cascade;
User dropped.
SQL> SPO OFF
从上面脚本调用的结果可以确定,XML对象在执行导入时没有注册成功,可能这就是导致错误产生的原因。
保证JAVA池和共享池都大于150M,且XDB表空间可扩展,或者大于150M。则可以重启系统。
SQL> SHUTDOWN IMMEDIATEDatabase closed.Database dismounted.ORACLE instance shut down.SQL> STARTUPORACLE instance started.
Total System Global Area 5876197568 bytesFixed Size 739520 bytesVariable Size 503316480 bytesDatabase Buffers 5368709120 bytesRedo Buffers 3432448 bytesDatabase mounted.Database opened.
下面重新安装XML方案:
SQL> SET ECHO ONSQL> SPO XDB_INSTALL.LOGSQL> @?/rdbms/admin/catqm.sql XDBPASSWD XDB TEMP
调用catqm.sql时,后面的三个参数依次时XDB用户的密码、默认表空间和临时镖客。
SQL> @?/rdbms/admin/catxdbj.sql
然后继续执行上面的SQL:
然后检查XDB用户是否存在错误对象,以及XDB是否注册到数据库中:
SQL> SELECT COUNT(*) FROM DBA_OBJECTS WHERE OWNER = 'XDB' AND STATUS = 'INVALID';
COUNT(*)----------0
SQL> SELECT COMP_NAME, STATUS, VERSION FROM DBA_REGISTRY WHERE COMP_NAME = 'Oracle XML Database';
COMP_NAME STATUS VERSION---------------------------------------- ----------- --------------------Oracle XML Database VALID 9.2.0.4.0
下面重启数据库和监听,XDB重装完毕。
重建XDB之后,对DBMS_METADATA的访问恢复正常:
SQL> SELECT DBMS_METADATA.GET_DDL('MATERIALIZED_VIEW', 'CAT_AUTH_GMP', 'NDMAIN') FROM DUAL;
DBMS_METADATA.GET_DDL('MATERIALIZED_VIEW','CAT_AUTH_GMP','NDMAIN')------------------------------------------------------------------
CREATE MATERIALIZED VIEW "NDMAIN"."CAT_AUTH_GMP"ORGANIZATION HEAP PCTFREE