Oracle Data Pump 数据泵:dump文件实现数据迁移

目录

1.导出dump文件

2.导入dump文件

2.1创建逻辑目录

2.2检查逻辑目录是否成功创建

2.3创建物理目录

2.4数据泵导入

3.问题

4.调优参数


导出环境:Red Hat enterprise linux server release 6.6(santiago)/  Oracle11g

导入环境:Red Hat enterprise linux server release 6.8(santiago)/  Oracle11g

  • 本次操作的是单表导入导出(从准生产环境导入测试)
  • 导入导出表空间不同
  • 导入导出用户名不同
  • 导入导出表名相同
  • 导入导出结构相同
  • 导入表中需进行追加数据

1.导出dump文件

expdp 用户名/密码@IP地址/实例名 tables=需要导出的表名 dumpfile=导出的dump文件名.dmp logfile=生成的日志名.log

如果导入导出的两个表结构等完全一致,可以加上参数 rows = y ,表示只导出数据,这样的导出速度会快很多。

原始的imp/exp工具有很多参数用来调优,(BUFFER, COMMIT, COMPRESS,CONSISTENT, DIRECT, 和RECORDLENGTH),数据泵无需设置这些参数,它本身会找到最适合的参数

注意数据泵只有Parallelism参数调整并行度来提升性能,比如开启4个并行执行expdp,导出多个文件   DUMPFILE=export_%u.dmp PARALLEL=4

链接到服务器上Oracle用户执行导出命令,不需要sqlplus链接数据库。

执行效果如下:


2.导入dump文件


2.1创建逻辑目录

注意:执行此SQL语句为ORACLE指定了一个逻辑目录,但是ORACLE不能判断此逻辑目录是否存在,如果你是第一次执行,需要到服务器上自己手动创建一个目录,否则会在导入时报错。

 --创建逻辑目录
create directory dump_dir_20230106 as '/home/oracle/dump_dir_20230106 ';  
 --修改逻辑目录
create or replace directory 目录名称 as  '/存放目录路径'
 --赋权逻辑目录
grant read,write on directory dump_dir_20230106 to CPR;  
 --删除逻辑目录
drop directory 目录名称;

2.2检查逻辑目录是否成功创建

注意:逻辑目录有些情况可能需要system用户授权,在此没遇到。

select * from dba_directories;


2.3创建物理目录

服务器上手动创建SQL中指定逻辑目录的物理目录。

进行数据泵导入时,可以把导入的dmp文件存到此文件夹。

生成的log日志也会存于此。


2.4数据泵导入

数据泵导入涉及很多问题

  • 指定逻辑目录文件夹
  • 指定导入dump文件名
  • 指定源用户名与导入用户名
  • 指定源表空间与导入表空间
  • 指定表存在的动作
  • 指定导入的日志

impdp 用户名/密码@IP地址/实例名 DIRECTORY=指定逻辑目录 DUMPFILE=dmp文件名.dmp REMAP_SCHEMA=原用户名:导入用户名 REMAP_TABLESPACE=原表空间名:现表空间名 TABLE_EXISTS_ACTION=表存在执行动作 LOGFILE=生成日志名.log

执行效果如下:

如果出现意外可以去指定逻辑目录下查看日志,具体问题具体分析。


3.问题

第一个问题是因为同事不会使用数据泵,导出的.dump文件中给导出语句加了rows = y参数,即只导出数据,结果我再导入的时候因为表空间、用户、表名等等原因频繁导入失败。

解决方案:去掉这个参数,正常导出。


 第二个问题是因为我再使用导入命令是给TABLE_EXISTS_ACTION=REPLACE 指定了REPLACE,REPLACE是需要先DROP这个表,再CREATE。

引用官网:“Only objects created by the Import will be remapped. In particular, the tablespaces for preexisting tables will not be remapped if TABLE_EXISTS_ACTION is set to SKIP, TRUNCATE, or APPEND.”

结果因为权限问题无法CREATE,导致了报错ORA-39112。 

出现问题后再去数据查询,因为这个表是别的用户grant 查询权限后创建的同义词,在查询时还爆出了同义词循环链ORA-01775。



解决方案:拿到建表语句重新建一个表,如果这个表是别的用户授权后创建的同义词,需要让别的用户重新授权,同义词可以直接复用,不用改变


 4.调优参数

未完待续......

  • 25
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值