使用expdp和impdp在Linux实现按表导出导入

比如数据库用户kms下有一个表PAYMENT,导出该表的数据

1.expdp导出
expdp \'/ as sysdba \' directory=dpdir dumpfile=PAYMENT0510.dmp tables=kms.PAYMENT

directory:导出文件到指定目录

dumpfile:导出指定文件名

tables:导出的表

图中看出有几个报错,最终导出的结果是失败或文件损坏,如果拿该文件执行impdp导入操作会报文件不完整的错误,所以执行expdp导出时一定保证导出的文件是完整的成功的,

图中框起来部分:ORA-27072: File I/O error
Linux-x86_64 Error: 28: No space left on device 说明

服务器磁盘已满,导致导出失败,df -h 查看磁盘空间,如果该目录下磁盘已满,可以清理一些无用的大文件。

导入上面导出的文件报错:文件已损坏

df -h 查看磁盘已满:

清理一些大文件后磁盘空间充足正常导出:

2.impdp导入

 导入前查看一下PAYMENT表的记录数

 错误 ORA-39151 指出 "KMS"."PAYMENT" 表已经存在,并且由于 table_exists_action 参数被设置为 skip,所以所有依赖的元数据和数据都被跳过了,导致该表的数据和依赖的元数据没有被导入。如果希望更新现有表,而不是跳过它可以在 impdp 命令中添加 table_exists_action=replace 或 table_exists_action=append 参数。

  • table_exists_action=replace:如果表存在,则删除它并重新创建。
  • table_exists_action=append:如果表存在,则只导入新数据(不删除现有数据)。

由于我是在测试环境操作,且原表数据基本无用,所以选择的是前者替换方式,请确认你的表数据是替换还是追加,如果是替换请做好备份操作!!!!!

impdp \"/ as sysdba\" directory=dpdir dumpfile=PAYMENT0510.dmp tables=kms.PAYMENT table_exists_action=replace

这次 impdp 命令尝试替换现有的 KMS.PAYMENT 表,但在处理过程中遇到了两个错误:

  1. ORA-01917: user or role 'KMSQURY' does not exist
    这个错误表明在导出文件中有一个授权给 KMSQURY 用户的 SELECT 权限,但是在目标数据库中这个用户或角色不存在。为了解决这个问题,您需要在目标数据库中创建 KMSQURY 用户,或者如果您不需要这个授权,您可以在导入之前编辑导出文件以删除这个授权语句,或者在导入时使用 exclude=GRANT 参数来排除所有授权语句。

  2. ORA-02298: cannot validate (KMS.FK_PAYMENT_DEALSCONFIRMID) - parent keys not found
    这个错误表示 KMS.PAYMENT 表上的外键 FK_PAYMENT_DEALSCONFIRMID 引用了 KMS.DEALSCONFIRM 表中的某个列,但在目标数据库中找不到相应的父键。这可能是因为 KMS.DEALSCONFIRM 表不存在,或者该表中没有包含 DEALSCONFIRM_ID 列的相应数据。要解决这个问题,您需要确保 KMS.DEALSCONFIRM 表和相应的数据存在于目标数据库中。

对于第一个问题,您可以在目标数据库中创建 KMSQURY 用户,或者使用以下命令导入,同时排除授权语句:

impdp '/ as sysdba' directory=dpdir dumpfile=PAYMENT0510.dmp tables=kms.PAYMENT exclude=GRANT table_exists_action=replace

对于第二个问题,您需要确保 KMS.DEALSCONFIRM 表存在,并且包含所有必要的数据。如果 KMS.DEALSCONFIRM 表在目标数据库中不存在,您可能需要先导入它,或者手动创建它并填充必要的数据。

另外,请注意,使用 table_exists_action=replace 会删除现有的表及其所有数据,然后再重新创建它。这是一个破坏性的操作,所以在执行之前请确保您已经备份了任何重要的数据。

上述两个问题即使不解决也不影响数据的导入,测试环境数据随便玩

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值