oracle导入dmp文件 替换现有表 重命名表

本文详细介绍了在Oracle数据库中使用IMPDP工具导入数据时的四种不同策略:忽略、追加、替换和截断。每种策略都有其特定的应用场景,通过实际案例演示了如何在现有数据基础上操作,以及如何在导入时对表进行重命名。

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

当使用IMPDP完成数据库导入时,如遇到表已存在时,Oracle提供给我们如下四种处理方式:

a.忽略(SKIP,默认行为);
b.在原有数据基础上继续增加(APPEND);
c.先DROP表,然后创建表,最后完成数据插入(REPLACE);
d.先TRUNCATE,再完成数据插入(TRUNCATE)。

 先用EXPDP生成一份dump文件
    sec@secDB /expdp$ expdp sec/sec directory=expdp_dir dumpfile=`date +"%Y%m%d%H%M%S"`_sec.dmp logfile=`date +"%Y%m%d%H%M%S"`_sec.log
 
    分别使用四中方式真实的感知一下具体效果
    用到的IMPDP语句统一汇总在这里,方便参考。
    SKIP:
    impdp system/sys directory=expdp_dir dumpfile=20100401102917_sec.dmp logfile=20100401102917_sec_impdp.log TABLE_EXISTS_ACTION=SKIP
 
    APPEND:
    impdp system/sys directory=expdp_dir dumpfile=20100401102917_sec.dmp logfile=20100401102917_sec_impdp.log TABLE_EXISTS_ACTION=APPEND
 
    REPLACE:
    impdp system/sys directory=expdp_dir dumpfile=20100401102917_sec.dmp logfile=20100401102917_sec_impdp.log TABLE_EXISTS_ACTION=REPLACE
 
    TRUNCATE:
    impdp system/sys directory=expdp_dir dumpfile=20100401102917_sec.dmp logfile=20100401102917_sec_impdp.log TABLE_EXISTS_ACTION=TRUNCATE

如果需要对导入表进行重命名 可以添加
remap_table=schema.tablename:newtablename

remap_table=orcl.userlogin:userlogin1127

完整的imp语句如下

impdp system/sys directory=expdp_dir dumpfile=20100401102917_sec.dmp logfile=20100401102917_sec_impdp.log TABLE_EXISTS_ACTION=TRUNCATE  tables= orcl.userlogin,orcl.userlogout remap_table=orcl.userlogin:userlogin1127

directory 如不指定则默认为去oracle安装目录\admin\orcl\dpdump 文件夹中寻找dump文件
logfile 如不指定则默认生成至directory目录下import.log每次导入自动替换

<think>好的,我需要回答用户关于如何将Oracle数据库备份数据恢复到正式的问题。首先,我得回忆一下Oracle的备份和恢复方法。用户提到的备份可能指的是通过导出工具(如exp或expdp)生成的备份文件,通常是dmp文件。恢复数据到正式的话,可能需要使用imp或impdp工具。 用户的需求是将备份的数据还原到正式,但需要注意正式可能已经存在数据的情况。这时候可能需要考虑数据覆盖或者追加的方式。首先,应该确认备份文件的格式是使用exp还是expdp导出的,因为对应的导入工具不同。exp导出的是旧版,而expdp是数据泵,效率更高,但语法有所不同。 接下来,步骤可能包括:准备备份文件、确定导入方式(全导入或部分导入)、处理空间和用户权限问题,以及在导入时是否替换现有数据。例如,使用impdp时可以通过remap_table参数来重命名,或者在导入时指定table_exists_action参数来处理已存在的情况,比如替换(replace)、追加(append)等。 另外,用户可能需要考虑在导入前清空正式的数据,或者使用闪回技术恢复数据。不过闪回可能更适合误操作的情况,而这里用户明确提到了从备份恢复,所以可能更适用imp/impdp。 还要注意字符集问题,如果备份文件的字符集和目标数据库不一致,可能会导致导入失败。此外,空间的问题也需要检查,比如备份空间在目标数据库中是否存在,否则可能需要使用remap_tablespace参数重新映射。 可能还需要指导用户如何编写导入命令,例如使用impdp的命令行参数,比如directory、dumpfile、remap_table等。同时,提醒用户在执行导入操作前做好备份,防止数据丢失。 最后,根据提供的引用内容,引用[2]提到了逻辑备份使用expdp和impdp,引用[4]提到了还原dmp文件时可能遇到的空间不存在的问题,需要在回答中引用这些内容,说明注意事项。</think>### Oracle数据库将备份数据还原至正式的方法教程 在Oracle数据库中,将备份数据还原至正式通常涉及**逻辑备份恢复**操作,具体可通过`expdp/impdp`(数据泵)或`exp/imp`(传统导出导入)工具实现。以下是详细步骤及注意事项: --- #### **一、确认备份类型及环境** 1. **备份类型** - 若备份文件为`.dmp`格式且由`expdp`生成,使用`impdp`导入(推荐,效率更高)[^2][^4]。 - 若为旧版`exp`生成的`.dmp`文件,则使用`imp`导入。 2. **环境检查** - 确保目标数据库的**字符集**与备份文件一致,避免乱码。 - 确认正式所在的**空间**是否存在,若不存在需提前创建或使用`REMAP_TABLESPACE`参数重映射。 --- #### **二、使用impdp导入数据至正式** **场景1:正式为空,直接覆盖** 若正式为空或可接受覆盖,直接导入: ```sql impdp user/password@db_name directory=DATA_PUMP_DIR dumpfile=backup.dmp tables=备份名 remap_table=备份名:正式名 ``` - **关键参数说明** - `directory`: 指定备份文件存储的目录对象。 - `tables`: 指定要导入的备份。 - `remap_table`: 将备份名映射为目标名。 **场景2:正式已有数据,追加或替换** 若需保留正式原有数据并追加备份数据,或替换部分数据: ```sql impdp user/password@db_name directory=DATA_PUMP_DIR dumpfile=backup.dmp tables=备份名 remap_table=备份名:正式名 table_exists_action=append ``` - **`table_exists_action`选项** - `append`: 追加数据(需结构一致)。 - `replace`: 删除原后重建并导入。 - `truncate`: 清空数据后导入。 --- #### **三、使用imp工具导入(旧版exp备份)** ```sql imp user/password@db_name file=backup.dmp fromuser=备份用户 touser=目标用户 tables=备份名 ignore=y ``` - **关键参数说明** - `ignore=y`: 忽略已存在的错误,仅追加数据。 - `fromuser/touser`: 跨用户导入时需指定用户映射。 --- #### **四、验证与恢复后操作** 1. **数据校验** 执行`SELECT COUNT(*) FROM 正式名`,确认数据量与备份一致。 2. **索引重建** 若导入时禁用了索引,需手动重建以优化性能。 3. **事务一致性** 检查约束和触发器状态,确保业务逻辑完整。 --- #### **注意事项** 1. **权限问题** 执行导入的用户需具备`IMP_FULL_DATABASE`权限或的所有权。 2. **空间不足** 监控空间使用率,避免导入失败。 3. **备份恢复策略** 建议在非高峰时段操作,并提前备份正式数据以防意外[^1][^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值