oracle impdp 变动用户、表空间(ORA-00959:表空间不存在)

本文介绍了Oracle数据库中使用impdp进行用户和表空间变动的方法,包括remap_schema和remap_tablespace参数的使用,以及如何处理数据已存在、索引排除等问题。在遇到ORA-00959错误时,可以通过指定REMAP_TABLESPACE参数解决。

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

oracle impdp 变动用户、表空间

  • 引言:
    expdp 'sys/123456 AS SYSDBA' directory=dump_dir dumpfile=mz_schema_%U.dmp logfile=mz_schema_2016.log schemas=HCPROD


    impdp 'sys/HCPROD AS SYSDBA'  directory=dir_dir dumpfile=mz_schema_%U.dmp logfile=impdp_mz_schema_2016.log schemas=HCPROD table_exists_action=replace remap_talespace=qz_prod:users



    expdp 'sys/HCPROD AS SYSDBA' directory=dump_dir dumpfile=accaddr_mz_schema_%U.dmp logfile=accaddr_mz_schema_2016.log schemas=HCPROD



    impdp 'sys/HCPROD AS SYSDBA'  directory=dump_dir dumpfile=accaddr_mz_schema_%U.dmp logfile=impdp_accaddrdemo_mz_schema_2016.log schemas=HCPROD table_exists_action=replace

    ***************************************************************************
    本人遇到ORA-00959: tablespace 'qz_prod' does not exist(表空间不存在)这个问题的背景:
    源数据库里的HCPROD用户使用了表空间qz_prod,而目标数据库里不存在表空间qz_prod
    故而执行impdp 'sys/HCPROD AS SYSDBA' directory=dir_dir dumpfile=mz_schema_%U.dmp logfile=impdp_mz_schema_2016.log schemas=HCPROD table_exists_action=replace时,提示ORA-00959: tablespace 'qz_prod' does not exist(表空间不存在),此时就需要调整REMAP_SCHEMA参数。
    改为
    impdp 'sys/HCPROD AS SYSDBA'  directory=dir_dir dumpfile=mz_schema_%U.dmp logfile=impdp_mz_schema_2016.log schemas=HCPROD table_exists_action=replaceremap_talespace=qz_prod:users
    注释:
    以schemas作业模式执行expdpexpdp不会创建表空间qz_prod的对象类型到导出文件里,这样,impdp时就不能导出文件里的表空间qz_prod的对象类型来在目标数据库里创建一个名为qz_prod表空间这个数据库对象。而目标数据库里又不存在表空间qz_prod。所以,执行impdp时,就会提示ORA-00959: tablespace 'qz_prod' does not exist(表空间不存在)

    只要参数schema、参数tablespace、参数table(以及其他数据库对象类型)三种作业模式的值是expdp时存在的,expdp都会为这些值创建对应的对象类型(即数据库对象的元数据)。也就是说,参数schema,对应创建的对象类型包含有用户元数据;参数tablespace,对应创建的对象类型包含有表空间元数据(和用户
<think>好的,我现在需要处理用户提供的Oracle错误信息:ORA-31626、ORA-31633以及相关的堆栈跟踪。首先,我要理解每个错误的具体含义和可能的原因。 首先,ORA-31626表示作业存在。这通常发生在使用Data Pump导出或导入作业时,可能因为作业尚未正确创建、作业名错误,或者作业已经被删除或完成。用户可能在尝试重新启动或监控一个存在的作业,所以需要检查作业名称是否正确,或者确认作业是否已经被清理。 接下来是ORA-31633,无法创建主表SYSTEM.SYS_IMPORT_FULL_09。主表是Data Pump用来存储元数据的关键组件,通常在导入/导出过程中创建。这个错误可能有几个原因:用户权限足,无法在SYSTEM模式下创建表;表空间足,导致无法分配存储空间;或者表已经存在,但名称冲突。SYSTEM表空间通常推荐用户对象,所以用户可能错误地使用了SYSTEM模式而是自己的schema。 堆栈跟踪中的ORA-06512指向了DBMS_SYS_ERROR和KUPV$FT内部包,这说明错误发生在Data Pump的内部处理过程中。这通常需要用户直接处理,但需要根据前面的错误代码来排查问题。 现在,我需要将这些分析转化为用户友好的解决步骤。首先确认作业是否存在,使用DBA_DATAPUMP_JOBS视图检查。如果存在,可能需要重新创建。然后检查权限问题,确保用户有CREATE TABLE权限和足够的表空间配额。可能需要指定正确的schema,避免使用SYSTEM。最后,处理表空间足或存在同名表的情况。 需要提醒用户要随意在SYSTEM表空间创建对象,避免权限和空间问题。同时,建议正确的Data Pump使用方法,比如指定正确的目录对象和schema。 可能用户是在尝试进行数据导入时遇到了这些问题,尤其是权限和表空间方面。需要分步骤引导用户检查每个可能性,确保权限正确,空间足够,作业名称正确,并避免使用系统模式。</think>以下是对您提供的Oracle错误序列的分析及解决方案: ### 错误分解 1. **ORA-31626: 作业存在** - **原因**:尝试访问的Data Pump作业(如导入/导出)未被正确创建或已被清理。 - **典型场景**:作业名称拼写错误、作业完成/终止后尝试重新附加、未提交作业直接退出客户端。 2. **ORA-31633: 无法创建主表 "SYSTEM.SYS_IMPORT_FULL_09"** - **根本原因**:Data Pump无法在`SYSTEM`模式下创建主表(元数据存储表),可能由以下问题引发: - **权限足**:用户缺少`CREATE TABLE`权限或`SYSTEM`表空间配额- **命名冲突**:同名主表已存在 - **表空间问题**:`SYSTEM`表空间无可用存储空间 - **模式误用**:未指定正确用户模式,默认使用`SYSTEM` 3. **ORA-06512堆栈跟踪** - **说明**:指示错误在Oracle内部包`DBMS_SYS_ERROR`和`KUPV$FT`中触发,属于Data Pump底层机制报错,需结合前两个错误定位问题。 --- ### 分步解决方案 #### 第一步:验证作业状态 ```sql SELECT * FROM DBA_DATAPUMP_JOBS WHERE job_name = 'SYS_IMPORT_FULL_09'; ``` - 若无结果:作业确实存在,需重建 -存在:检查作业状态(`STATE`列) #### 第二步:解决主表创建问题 1. **避免使用SYSTEM模式** - 导入时显式指定目标schema: ```bash impdp system/password SCHEMAS=目标用户 DIRECTORY=dpump_dir DUMPFILE=your.dmp LOGFILE=imp.log ``` 2. **检查权限与配额** ```sql -- 授予必要权限 GRANT CREATE TABLE TO 操作用户; -- 检查表空间配额 SELECT * FROM DBA_TS_QUOTAS WHERE TABLESPACE_NAME = 'SYSTEM' AND USERNAME = 'SYSTEM'; ``` 3. **释放表空间(如需)** ```sql -- 清理SYSTEM表空间碎片 ALTER TABLESPACE SYSTEM COALESCE; -- 扩展数据文件(需DBA权限) ALTER DATABASE DATAFILE '/path/to/system01.dbf' RESIZE 2G; ``` 4. **强制删除残留主表** ```sql DROP TABLE SYSTEM.SYS_IMPORT_FULL_09 PURGE; -- 如果表确实存在 ``` #### 第三步:重建Data Pump作业 ```bash impdp system/password FULL=Y DIRECTORY=dpump_dir DUMPFILE=your.dmp LOGFILE=imp.log JOB_NAME=自定义作业名 -- 避免默认命名冲突 ``` --- ### 预防措施 1. **专用用户原则**:避免使用`SYSTEM`用户执行常规数据操作,创建专用用户并授予最小权限集 2. **独立表空间**:为Data Pump操作配置专用表空间 ```sql CREATE TABLESPACE dp_ts DATAFILE '/path/to/dp_ts.dbf' SIZE 5G; ALTER USER 操作用户 DEFAULT TABLESPACE dp_ts QUOTA UNLIMITED ON dp_ts; ``` 3. **作业命名规范**:使用可识别的作业名,如`IMP_MYSCHEMA_2024` 4. **监控机制**:定期检查长期运行作业 ```sql SELECT owner_name, job_name, state FROM DBA_DATAPUMP_JOBS WHERE state = 'EXECUTING'; ``` --- ### 扩展建议 若问题持续发生,建议: 1. 检查Oracle版本是否需打补丁(部分旧版本存在Data Pump缺陷) 2. 验证操作系统级权限(目录写入权限、磁盘空间) 3. 启用Data Pump跟踪: ```bash impdp ... TRACE=480300 ``` 分析生成的跟踪文件定位底层问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值