exp时遇到EXP-00008&ORA-06550&ORA-00904的解决

在使用Oracle数据库的EXP工具导出时遇到错误EXP-00008、ORA-06550和ORA-00904。问题源于ORDSYS用户被删除但exppkgact$字典表未更新。解决方案包括删除exppkgact$中不一致的记录以及重建缺失的视图EXU8GRN并授权。经过这些步骤,EXP操作能够成功完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

exp时遇到EXP-00008&ORA-06550&ORA-00904的解决
现象:exp时报错,如下:
[oracle@cicgo1 oracle]$ exp system/pass owner=cicgo file=/tmp/cicgo.dmp

Export: Release 8.1.7.4.0 - Production on Tue Apr 23 15:07:17 2013

(c) Copyright 2000 Oracle Corporation. All rights reserved.


Connected to: Oracle8i Release 8.1.7.4.0 - Production
JServer Release 8.1.7.4.0 - Production
Export done in US7ASCII character set and ZHS16GBK NCHAR character set
server uses ZHS16GBK character set (possible charset conversion)

About to export specified users ...
. exporting pre-schema procedural objects and actions
EXP-00008: ORACLE error 6550 encountered
ORA-06550: line 1, column 13:
PLS-00201: identifier 'ORDSYS.ORDTEXP' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
EXP-00083: The previous problem occurred when calling ORDSYS.ORDTEXP.schema_info_exp
. exporting foreign function library names for user cicgo
. exporting object type definitions for user cicgo
About to export cicgo's objects ...
. exporting database links
. exporting sequence numbers
EXP-00008: ORACLE error 904 encountered
<think>好的,用户遇到了ORA-00904错误,需要解决方案。首先我要回顾一下这个错误的常见原因。ORA-00904通常表示SQL语句中使用了无效的列名或标识符。根据提供的引用,特别是用户在使用exp或impdp遇到这个问题,可能涉及数据库对象不存在或权限问题。 首先,用户提到在导出出现这个错误,引用[4]指出导出执行了涉及SYS.EXU9PTS和SYS.EXU9TYPT的查询,而可能这些系统视图中的某些列在特定Oracle版本中不存在。需要检查使用的工具版本是否与数据库版本兼容,比如旧版本的exp工具连接新版本数据库可能导致问题。 其次,引用[1]中的案例是impdp报错,涉及ORIGINAL_OBJECT_NAME列无效,这可能是因为数据泵导出文件中的元数据引用了目标数据库不存在的列。需要确认导出和导入的数据库版本是否一致,或者是否有补丁未应用。 另外,引用[3]提到以SYSTEM用户或DBA身份执行导出出现错误,可能权限过高导致访问了不兼容的系统表。这候建议使用数据泵(expdp/impdp)代替传统的exp/imp工具,因为数据泵更现代化且兼容性更好。 接下来需要分步骤解决问题。第一步是检查SQL语句中的列名是否正确,特别是用户提到的案例中可能涉及系统视图,需要确认列是否存在。第二步是检查数据库对象权限,确保用户有访问相关对象的权限。第三步是确认工具和数据库版本的兼容性,必要升级工具或应用补丁。第四步,如果使用传统工具,考虑迁移到数据泵。第五步,收集更多错误信息,比如开启跟踪或检查日志,帮助定位具体问题。 同,用户可能需要更新统计信息或检查无效对象,但根据引用内容,这似乎不是主要原因。最后,要提醒用户如果自行解决困难,可以联系Oracle支持,提供详细的环境信息。 现在需要将这些分析整理成结构化的回答,分步骤说明解决方案,并生成相关问题。同确保遵循系统级指令,正确使用LaTeX格式,添加引用标识。</think>### ORA-00904错误解决方案 #### 1. 错误原因分析 ORA-00904表示SQL语句中引用了无效的标识符(如列名、表名或函数名)。根据引用内容,常见场景包括: - 使用过的导出工具(如`exp`)连接新版本数据库[^4] - 数据泵(`impdp`)导入目标库缺少相关列(如`ORIGINAL_OBJECT_NAME`)[^1] - 系统视图查询权限不足或版本不兼容[^3] #### 2. 分步解决方案 **步骤1:验证SQL语法** 检查报错语句中的标识符是否存在拼写错误,例如: ```sql -- 错误示例 SELECT ORIGINAL_OBJECT_NAME FROM DBA_OBJECTS; ``` 需确认目标数据库的`DBA_OBJECTS`视图中是否存在该列: ```sql DESC DBA_OBJECTS; ``` **步骤2:检查工具与数据库版本兼容性** - 若使用传统工具`exp/imp`,建议升级为`expdp/impdp` - 确保客户端工具版本与数据库版本一致 例如:Oracle 19c数据库应使用19c版本的`expdp`工具 **步骤3:验证系统视图权限** 以SYSDBA身份执行以下操作: ```sql GRANT SELECT ON SYS.EXU9PTS TO <用户名>; GRANT SELECT ON SYS.EXU9TYPT TO <用户名>; ``` 若问题仍存在,可能需检查视图列是否存在: ```sql SELECT COLUMN_NAME FROM ALL_TAB_COLS WHERE TABLE_NAME = 'EXU9PTS' AND OWNER = 'SYS'; ``` **步骤4:应用最新补丁集** 某些情况下缺失列可能是未安装补丁导致: ```shell # 检查当前补丁版本 SELECT * FROM V$VERSION; # 通过OPatch工具升级 opatch apply ``` **步骤5:使用数据泵替代传统工具** 传统导出示例升级为数据泵: ```shell # 旧方式(可能报错) exp system/password file=export.dmp # 新方式 expdp system/password directory=DATA_PUMP_DIR dumpfile=export.dmp ``` #### 3. 高级排查方法 - **开启SQL跟踪**: ```sql ALTER SESSION SET SQL_TRACE = TRUE; ``` 通过跟踪文件定位具体报错语句 - **检查无效对象**: ```sql SELECT OBJECT_NAME, OBJECT_TYPE FROM ALL_OBJECTS WHERE STATUS = 'INVALID'; ``` #### 4. 特殊案例处理 当报错信息显示`ORA-00904: : invalid identifier`(冒号间无具体标识符): 1. 检查客户端字符集设置: ```sql SELECT * FROM NLS_DATABASE_PARAMETERS; ``` 2. 验证NLS_LANG环境变量: ```shell echo $NLS_LANG # 应设置为与数据库一致的字符集,如: export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值