oracle imp ora 00959,如何IMP存储在多TABLESPACE上的对象(IMP-00003 和 ORA-00959 问题的对应)...

上周在导入用户给的DUMP文件时,遇到IMP-00003 ORA-0095问题,解决过程整理如下:

源数据库中有一张照片表,其中lob字段独立于用户缺省表空间zhxt_data,单独存放在zhxt_lob中,表结构如下:

SQL> create table RY_RXZP

2  (

3    RYBH      VARCHAR2(20),

4    RXZP      blob

5  )

6  lob(rxzp) store as(tablespace zhxt_lob disable storage in row nocache);

-------------------------------

从源数据库中导出数据

C:\oracle\product\9.2\bin>exp njgajwpt/njgajwpt@ora9 file=d:\temp\lob.dmp tables=ry_rxzp

Export: Release 9.2.0.1.0 - Production on 星期一 9月 11 15:25:26 2006

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.1.0 - Production

已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的表通过常规路径 ...

. . 正在导出表                    RY_RXZP               5 行被导出

在没有警告的情况下成功终止导出。

-------------------------------

导入到目标数据库

目标数据库用户的缺省表空间是njga_jwpt,没有使用其他表空间

C:\oracle\product\9.2\bin>imp njgajwpt/njgajwpt@pc609_ora9 file=d:\temp\lob.dmp ignore=y

Import: Release 9.2.0.1.0 - Production on 星期一 9月 11 15:31:57 2006

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.1.0 - Production

经由常规路径导出由EXPORT:V09.02.00创建的文件

已经完成ZHS16GBK字符集和AL16UTF16 NCHAR 字符集中的导入

. 正在将NJGAJWPT的对象导入到 NJGAJWPT

IMP-00017: 由于 ORACLE 的 959 错误,以下的语句失败

"CREATE TABLE "RY_RXZP" ("RYBH" VARCHAR2(20), "RXZP" BLOB)  PCTFREE 10 "

"PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELI"

"ST GROUPS 1) TABLESPACE "NJGA_JWPT" LOGGING NOCOMPRESS LOB ("RXZP") STORE A"

"S  (TABLESPACE "ZHXT_LOB" DISABLE STORAGE IN ROW CHUNK 8192 PCTVERSION"

" 10 NOCACHE  STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1))"

IMP-00003: 遇到 ORACLE 错误 959

ORA-00959: 表空间'ZHXT_LOB'不存在成功终止导入,但出现警告。

-------------------------------

解决方法

在目标数据库中创建该表的表结构,在导入时,使用 ignore=y 选项

SQL> create table RY_RXZP

2  (

3    RYBH      VARCHAR2(20),

4    RXZP      blob

5  )

6  lob(rxzp) store as(tablespace njga_jwpt_lob disable storage in row nocache);

C:\oracle\product\9.2\bin>imp njgajwpt/njgajwpt@pc609_ora9 file=d:\temp\lob.dmp ignore=y

Import: Release 9.2.0.1.0 - Production on 星期一 9月 11 16:12:14 2006

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.1.0 - Production

经由常规路径导出由EXPORT:V09.02.00创建的文件

已经完成ZHS16GBK字符集和AL16UTF16 NCHAR 字符集中的导入

. 正在将NJGAJWPT的对象导入到 NJGAJWPT

. . 正在导入表                  "RY_RXZP"               5行被导入

成功终止导入,但出现警告。

注:如果目标数据库中不希望将lob字段单独存放,而是与其他对象存放在缺省表空间中,在定义表结构时,不定义lob storage即可.

<think>嗯,用户遇到了ORA-31694错误,涉及主表加载或卸载失败的问题。首先,我需要回想一下这个错误的常见原因解决方法。根据引用[1][4],可能的原因包括权限不足、存储空间不够、对象依赖问题或者数据字典损坏。 首先,权限问题可能是关键。用户使用的用户需要有足够的权限,比如IMP_FULL_DATABASE角色。检查用户权限是否正确,或者尝试用更高权限的用户比如SYSTEM或SYS来执行导入操作。另外,主表在导入过程中需要被创建,如果用户没有创建表的权限,就会失败,所以需要确认权限设置。 然后是存储空间的问题。主表通常存储在SYSTEM表空间里,如果这个表空间空间不足,就会导致错误。需要检查SYSTEM表空间的可用空间,必要时进行扩展或者清理临时文件。此外,用户的默认表空间是否有足够空间也很重要,特别是如果主表被存储在用户默认表空间中时。 接下来是对象依赖问题。可能导入的数据中存在无效对象或依赖关系,比如引用了不存在的表或视图。需要检查日志文件,确认是否有对象被跳过或报错,根据日志调整导入参数,比如EXCLUDE或INCLUDE来排除问题对象。另外,使用CONTENT=METADATA_ONLY尝试仅导入元数据,看是否成功,这样可以缩小问题范围。 数据字典损坏或版本兼容性问题也可能导致这个错误。检查数据库版本是否符合导出文件的版本,低版本导入高版本可能出现兼容性问题。执行数据库健康检查,比如使用RMAN验证或DBVERIFY,确认数据字典完整性。必要时进行修复或重建数据字典。 其他可能性包括参数配置错误,比如使用了不兼容的转换参数,或者作业名称冲突。检查导入命令中的参数是否正确,特别是REMAP_SCHEMA或REMAP_TABLE等。同时,确保作业名称唯一,避免重复使用导致冲突。 如果以上步骤都无法解决,可能需要参考官方文档或联系Oracle支持,提供详细日志进行分析。另外,用户提到的引用[3]中提到的ORA-00904错误可能与对象名无效有关,这也可能与数据字典或元数据问题相关,需要进一步检查导入的元数据是否正确。 总结来说,解决ORA-31694错误需要逐步排查权限、空间、对象依赖、数据字典等个方面,结合日志分析,逐步缩小问题范围,找到具体原因并采取相应措施。</think>### ORA-31694错误解决方案 **错误描述** ORA-31694表示在使用`impdp`进行数据泵导入时,主表(Master Table)`SYSTEM.SYS_IMPORT_FULL_01`加载/卸载失败。主表用于记录导入过程中的元数据作业状态,其失败通常由以下原因导致: --- ### 分步解决方案 #### 1. **检查权限用户角色** - **确保用户具有足够权限**:执行导入的用户需要拥有`IMP_FULL_DATABASE`角色或`SYSDBA`权限[^1]。 ```sql GRANT IMP_FULL_DATABASE TO your_user; ``` - **尝试使用SYSTEM/SYS用户操作**: ```bash impdp system/password@dbname DIRECTORY=dpump_dir DUMPFILE=export.dmp ``` #### 2. **验证存储空间** - **检查SYSTEM表空间**:主表默认存储在`SYSTEM`表空间中,需确保其有足够空间: ```sql SELECT tablespace_name, bytes/1024/1024 "Free Space (MB)" FROM dba_free_space WHERE tablespace_name = 'SYSTEM'; ``` - **扩展表空间(如需)**: ```sql ALTER DATABASE DATAFILE '/path/to/system01.dbf' RESIZE 2G; ``` #### 3. **处理对象依赖无效对象** - **检查日志文件**:通过`LOGFILE`参数指定日志路径,分析具体失败对象[^2]: ```bash impdp system/password DIRECTORY=dpump_dir DUMPFILE=export.dmp LOGFILE=import.log ``` - **排除无效对象**:使用`EXCLUDE`参数跳过问题对象: ```bash impdp ... EXCLUDE=TABLE:"IN ('PROBLEM_TABLE')" ``` #### 4. **修复元数据或数据字典** - **使用`CONTENT=METADATA_ONLY`测试**:仅导入元数据验证结构完整性[^4]: ```bash impdp ... CONTENT=METADATA_ONLY ``` - **重建主表(谨慎操作)**: ```sql DROP TABLE SYSTEM.SYS_IMPORT_FULL_01; -- 需确认表可删除 ``` #### 5. **版本兼容性参数验证** - **检查数据库版本**:确保导出文件(DMP)版本≤目标库版本。 - **验证参数一致性**:检查`REMAP_SCHEMA`、`REMAP_TABLE`等参数是否正确。 #### 6. **其他操作** - **清理残留作业**: ```sql SELECT * FROM DBA_DATAPUMP_JOBS; -- 查找作业名 BEGIN DBMS_DATAPUMP.STOP_JOB('SYS_IMPORT_FULL_01'); END; ``` - **重启数据库服务**:临时解决内存或锁冲突问题--- ### 相关引用 - 主表依赖SYSTEM表空间权限空间分配[^1]。 - 对象依赖错误可能导致级联失败(如ORA-31693)[^2]。 - 参数配置错误可能引发无效标识符(如ORA-00904)[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值