exp遇到错误ORA-06512 SYS.DBMS_EXPORT_EXTENSION

本文解决在Windows客户端使用exp导出Oracle全库时遇到的ORACLE错误,通过检查并授权缺失的权限,成功解决问题。
Linux5.5
Oracle10.2.0.4.0
 
从windows客户端使用exp导出全库时出现以下错误:
 
. . 正在导出表                     DEF$_AQCALL
EXP-00008: 遇到 ORACLE 错误 6550
ORA-06550: line 1, column 18:
PLS-00201: identifier 'SYS.DBMS_DEFER_IMPORT_INTERNAL' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
ORA-06512: at "SYS.DBMS_SYS_SQL", line 1204
ORA-06512: at "SYS.DBMS_SQL", line 323
ORA-06512: at "SYS.DBMS_EXPORT_EXTENSION", line 97
ORA-06512: at "SYS.DBMS_EXPORT_EXTENSION", line 126
ORA-06512: at line 1
. . 正在导出表                    DEF$_AQERROR
EXP-00008: 遇到 ORACLE 错误 6510
ORA-06510: PL/SQL: unhandled user-defined exception
ORA-06512: at "SYS.DBMS_EXPORT_EXTENSION", line 50
ORA-06512: at "SYS.DBMS_EXPORT_EXTENSION", line 126
ORA-06512: at line 1
. . 正在导出表                   DEF$_CALLDEST
EXP-00008: 遇到 ORACLE 错误 6550
ORA-06550: line 1, column 18:
PLS-00201: identifier 'SYS.DBMS_DEFER_IMPORT_INTERNAL' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
ORA-06512: at "SYS.DBMS_SYS_SQL", line 1204
ORA-06512: at "SYS.DBMS_SQL", line 323
ORA-06512: at "SYS.DBMS_EXPORT_EXTENSION", line 97
ORA-06512: at "SYS.DBMS_EXPORT_EXTENSION", line 126
ORA-06512: at line 1
. . 正在导出表                DEF$_DEFAULTDEST
EXP-00008: 遇到 ORACLE 错误 6510
ORA-06510: PL/SQL: unhandled user-defined exception
ORA-06512: at "SYS.DBMS_EXPORT_EXTENSION", line 50
ORA-06512: at "SYS.DBMS_EXPORT_EXTENSION", line 126
ORA-06512: at line 1
. . 正在导出表                DEF$_DESTINATION
EXP-00008: 遇到 ORACLE 错误 6550
ORA-06550: line 1, column 18:
PLS-00201: identifier 'SYS.DBMS_DEFER_IMPORT_INTERNAL' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
ORA-06512: at "SYS.DBMS_SYS_SQL", line 1204
ORA-06512: at "SYS.DBMS_SQL", line 323
ORA-06512: at "SYS.DBMS_EXPORT_EXTENSION", line 97
ORA-06512: at "SYS.DBMS_EXPORT_EXTENSION", line 126
ORA-06512: at line 1
. . 正在导出表                      DEF$_ERROR
EXP-00008: 遇到 ORACLE 错误 6510
ORA-06510: PL/SQL: unhandled user-defined exception
ORA-06512: at "SYS.DBMS_EXPORT_EXTENSION", line 50
ORA-06512: at "SYS.DBMS_EXPORT_EXTENSION", line 126
ORA-06512: at line 1
 
查看metalink发现,这个错误与ID 464672.1十分相似。
 
 
ORA-06512 SYS.DBMS_EXPORT_EXTENSION And PLS-00201 SYS.DBMS_DEFER_IMPORT_INTERNAL in 11g Export Or After OCTCPU2007 [ID 464672.1]

Modified 20-JAN-2011 Type PROBLEM Status PUBLISHED

In this Document



Applies to:

Oracle Server - Enterprise Edition - Version: 10.1.0.2 to 11.1.0.6 - Release: 10.1 to 11.1
Information in this document applies to any platform.

Symptoms

Checked for relevance on 10-22-2010

Running export utility in 11g or in 10g (After applying the OCTCPU2007 patch) may fail with the following errors:

EXP-00008: ORACLE error 6550 encountered
ORA-06550: line 1, column 19:
PLS-00201: identifier 'SYS.DBMS_DEFER_IMPORT_INTERNAL' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
ORA-06512: at "SYS.DBMS_SQL", line 1501
ORA-06512: at "SYS.DBMS_EXPORT_EXTENSION", line 97
ORA-06512: at "SYS.DBMS_EXPORT_EXTENSION", line 126
ORA-06512: at line 1

Cause

This is was discussed in Bug 6392040:ORA-6512 ON SYS.DBMS_EXPORT_EXTENSION WHEN TRYING TO RUN FULL EXPORT

There are two execute privileges missing in the DBA role and the EXP_FULL_DATABASE role.

There is no fix in this bug because the export utility is not longer supported in 11g and should be replaced by the Data Pump Export.

Conventional export is no longer supported in 11g.
http://download.oracle.com/docs/cd/B28359_01/readmes.111/b28280/toc.htm#BABGIGDC
section "2":

"The original Export utility is no longer supported for general use. ..."

For 10g versions there is another bug fix (5870297) in OCTCPU2007 patch that caused the problem.

Solution

The workaround for the problem is to grant the two missing privileges explicitly to the user doing the export:

GRANT EXECUTE ON SYS.DBMS_DEFER_IMPORT_INTERNAL TO ;
GRANT EXECUTE ON SYS.DBMS_EXPORT_EXTENSION TO ;

 

 

按照文中给出的solution,授权之后再次导出,错误未再出现。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10640532/viewspace-735262/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10640532/viewspace-735262/

### 错误分析与解决方法 Oracle数据库报错 `ORA-31603` 和 `ORA-06512` 通常表示在尝试访问或导出特定对象时,该对象在数据库中不存在或无法被找到。具体来说: - `ORA-31603`: 表示指定的对象(如表、视图、存储过程等)在指定的模式中不存在。 - `ORA-06512`: 表示在PL/SQL程序包 `SYS.DBMS_SYS_METADATA` 中发生了错误,通常是由于调用了无效的对象或参数。 在本例中,错误信息指出对象 `'audit_log'` 类型为 `TABLE` 在模式 `'mes'` 中未找到。这可能是由于以下原因之一: 1. **对象名称拼写错误**:检查表名是否正确,包括大小写敏感性。Oracle默认将对象名转换为大写,但如果在创建时使用了双引号,则必须使用正确的大小写进行查询。 ```sql SELECT * FROM "mes"."audit_log"; ``` 2. **模式名错误**:确认 `'mes'` 模式确实存在,并且该模式下确实存在名为 `'audit_log'` 的表。可以通过以下查询验证: ```sql SELECT table_name FROM all_tables WHERE owner = 'MES'; ``` 3. **权限不足**:当前用户可能没有访问 `'mes'` 模式下 `'audit_log'` 表的权限。确保已授予适当的权限,例如: ```sql GRANT SELECT ON mes.audit_log TO your_user; ``` 4. **元数据损坏或不一致**:在某些情况下,特别是使用数据泵导出导入(Data Pump)时,可能会出现元数据不一致的问题。可以通过重建元数据或重新导入对象来解决。例如,使用 `DBMS_METADATA` 获取DDL语句并重新创建对象: ```sql SET LONG 2000000 SELECT DBMS_METADATA.GET_DDL('TABLE', 'AUDIT_LOG', 'MES') FROM DUAL; ``` 5. **使用 `DBMS_SYS_METADATA` 时的参数错误**:如果在调用 `DBMS_SYS_METADATA` 过程时传递了错误的参数,例如无效的对象类型或名称,则会触发 `ORA-06512`。确保调用时使用正确的参数格式,例如: ```sql DECLARE h NUMBER; th NUMBER; BEGIN h := DBMS_SYS_METADATA.OPEN('TABLE'); DBMS_SYS_METADATA.SET_FILTER(h, 'SCHEMA_NAME', 'MES'); DBMS_SYS_METADATA.SET_FILTER(h, 'OBJECT_NAME', 'AUDIT_LOG'); th := DBMS_SYS_METADATA.LOAD(h); -- 处理返回的元数据 DBMS_SYS_METADATA.CLOSE(h); END; ``` 6. **数据泵导出问题**:如果是在使用 `expdp` 或 `impdp` 时遇到此问题,检查导出日志以确认对象是否成功导出,并确保在导入时使用了正确的模式和表名。 ### 总结 解决 `ORA-31603` 和 `ORA-06512` 错误的关键在于确认对象的存在性、名称的正确性、权限的完整性以及调用 `DBMS_SYS_METADATA` 时参数的准确性。通过逐一排查这些方面,通常可以定位并解决该类问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值