使用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
    评论
expdpimpdp是Oracle数据库提供的工具,用于进行数据的导出导入操作。下面是使用expdpimpdp工具进行数据导入导出的步骤: 1. 导出数据(使用expdp): - 打开命令行窗口或终端,并登录到Oracle数据库。 - 运行以下命令来导出数据: ``` expdp username/password@database_name DIRECTORY=directory_name DUMPFILE=dumpfile_name LOGFILE=logfile_name ``` 其中,`username`是要导出数据的用户,`password`是用户的密码,`database_name`是数据库的名称,`directory_name`是导出文件的目录,`dumpfile_name`是导出文件的名称,`logfile_name`是日志文件的名称。 - 根据需要,可以添加其他选项来指定要导出的表、模式、数据过滤条件等。 2. 导入数据(使用impdp): - 打开命令行窗口或终端,并登录到Oracle数据库。 - 运行以下命令来导入数据: ``` impdp username/password@database_name DIRECTORY=directory_name DUMPFILE=dumpfile_name LOGFILE=logfile_name ``` 其中,`username`是要导入数据的用户,`password`是用户的密码,`database_name`是数据库的名称,`directory_name`是导入文件的目录,`dumpfile_name`是导入文件的名称,`logfile_name`是日志文件的名称。 - 根据需要,可以添加其他选项来指定要导入的表、模式、数据过滤条件等。 需要注意的是,导出导入的用户需要具有相应的权限才能执行这些操作。另外,导出导入的文件可以是二进制文件(.dmp)或压缩文件(.dpb)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值