empdp及impdp实现在不同库和不同用户之间的数据转移

使用empdp和impdp数据泵实现不同库及不同用户之间的数据转移

前言. exp/imp和empdp/impdp的区别

  1. exp/imp是客户端工具程序,既可以在客户端使用,也可以在服务端使用。expdp/impdp是服务端的工具程序,他们只能在oracle服务端使用。
  2. imp/impdp导出的文件只能使用对应的emp/empdp进行导入
  3. Oracle版本高于10g时,需要使用empdp才能导出空表。

★★ 由于博主需要导出数据的库与目标库间网络通信速度较差,如果使用plsql连接原始库进行数据导出的速度非常慢。故考虑使用如下方式进行数据转移

Created with Raphaël 2.2.0 导出原始数据的dmp文件 使用SCP命令后台进行dmp文件迁移至目标库服务器 导入dmp文件至目标库

以下操作为博主在生产环境中的实际执行过程,如有问题可留言交流

1. expdp导出数据

  1. 在服务器上创建dump文件的实际存储目录并授权:
mkdir -p /mnt/data/oracldump
chown -R oracle:oinstall /mnt/data/oracldump

创建后的目录

  1. 创建逻辑目录:

(1). 使用DBA角色登录sqlplus

sqlplus / as sysdba

(2). 查看dba_directories目录(博主拷出了查询结果,并调整了一下格式)

select * from dba_directories;

在这里插入图片描述
(3). 创建dump文件存放的逻辑目录

create directory dump_dir as '/mnt/data/oracldump'

逻辑目录创建成功
(4). 再次查看管理员目录

select * from dba_directories;

逻辑目录创建成功
在这里插入图片描述
(5).为指定用户( kktd )赋予在该目录的操作权限

grant read,write on directory dump_dir to kktd;

在这里插入图片描述

  1. 使用empdp进行数据导出

(1). empdp有多种导出格式,本次使用的是导出表的方式,可以不指定logfile目录,它会默认生成在directory目录。

导出表样例:

expdp user/passwd@orcl tables=table1,table2 dumpfile=expdp.dmp directory=data_dir logfile=expdp.log;

生产环境实操:

expdp kktd/******@xx.xx.xx.xx:port/实例名 tables=traffic_vehicleinfo_msbak_0415  dumpfile=traffic_vehicleinfo_msbak_0415.dmp directory=dump_dir parallel=1 compression=all

★. 由于数据量较大,楼主在导出时中使用了compression=all(评价最高的压缩方式)。
在这里插入图片描述
(2).查看后缀为 dmp 的文件是否生成

★. 有必要的情况下可以查询下原表的占用的物理空间,比对下导出文件的大小。ALL的压缩格式下,文件大小一般能压缩近10倍。1G–>100M
在这里插入图片描述

2. 拷贝 dmp 文件至远程服务器

当前操作如果 dmp文件数量较少可考虑手动进行SCP,后续脚本针对文件个数较多时较适用。

  1. expect命令准备(如果未配置YUM源需先配置, 待博主补充YUM源配置教程 )
yum -y install expect
  1. 脚本样例(建议先了解下expect的原理及使用方法)
#/bin/bash
CURRENT_PATH=`pwd`
B_password=密码
FILES=`ls -lh $CURRENT_PATH | awk -F' ' '{print $9}' |grep .dmp`
#echo -e $FILES
 for i in $FILES
 do
 /usr/bin/expect <<EOF
 spawn scp ./$i root@目标库IP:/mnt/data/oracledatafrom104/ ----(目标库dmp存放路径,需先创建)
 set timeout -1
 expect {
 "yes/no" { send "yes\r";exp_continue }
 "password:" { send "$B_password\r" }
  }
 expect "100%"
 expect eof
EOF
 done
  1. 脚本创建及运行
    (1). 登录目标库的服务器创建接收文件的目录, ( 此目录在进行impdp导入时将作为逻辑目录的对应实际目录 )

目标库服务器执行

mkdir -p /mnt/data/oracledatafrom104/

(2). 进入 /mnt/data/oracldump目录vim/vi ex.sh,将样例脚本拷入后修改好相应参数。
(3). 使用后台运行的方式执行脚本。

 nohup ./ex.sh >uploaddmp.log 2>&1 &

3. impdp数据导入

  1. 逻辑目录的创建及授权

(1). 参照empdp导出过程中的前两步操作。值得注意的是待导入目标库的dmp存放目录博主已在文件传输前创建完成了,后面只需要在sqlplus中进行逻辑目录创建,并为新库的目标用户( kksj )授权使用逻辑目录即可。
(2). 使用impdp指定表名及使用模式映射导入数据

样例

./impdp 用户名/密码@目标库IP:端口/实例名 tables=源库模式名.表名 REMAP_SCHEMA=源库模式名:目标库模式名 REMAP_TABLESPACE=源库模式名:目标库模式名 CONTENT=对导出选择的压缩格式进行解压dumpfile=dmp文件名 directory=dump_dir parallel=线程数(如果dump文件中表只有一个只能使用一个线程)

生产环境

./impdp kksj/******@xx.xx.xx.xx:port/orcl tables=kktd.traffic_vehicleinfo_msbak_0415 REMAP_SCHEMA=kktd:kksj REMAP_TABLESPACE=kktd:kksj CONTENT=all  dumpfile=traffic_vehicleinfo_msbak_0415.dmp directory=dump_dir parallel=1

导入成功
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值