expdp远程导出方式network_link使用

很多时候,出于数据安全考虑,需要备份一些重要的业务数据,但这个时候服务器没有直接登录的权限,我们只能通过数据库用户名方式进行访问,这个时候可以考虑用exp,但exp毕竟是个旧版的工具,功能没有expdp那么全面,但由于expdp只能在服务端进行本地备份写入,受限比较大,这个时候可以考虑用expdp的network_link方式进行远程导出或直接导入,下面是这个方案的详细介绍:

解决方案:通过dblink实现远程数据的导入导出。

  1. 本地库创建dblink指向远程库。
create database link link_oss connect to dba_ftc identified by ****** using 'OSS';
  1. 本地库创建directory目录对象。
create directory expdp_dir as '/home/oracle11g/expdp_dir/';
  1. 本地库创建数据泵导出参数文件。
vi exp.par:
userid=username/password  //本地库的用户名密码,可用上面创建的dblink和directory目录。
directory=expdp_dir  //本地库创建的directory目录。
dumpfile=gf_expdp.dump  //dump文件名。
logfile=gf_expdp.log  //日志文件名。
tables=depkf15.t_cp  //要导出的表。
query='"where rownum<1000001"' //导出条件,前100万行。
network_link=gf_local  //dblink名。

注意,这里有个小问题值得注意,tables=depkf15.t_cp,如果待导出表和登录用户不同,则这里需要添加导出的对象schema(用户),否则会报错。

  1. 执行导出命令。
expdp '"/ as sysdba"'  network_link=link_oss  directory=dir1 dumpfile=om_order.dmp tables=gdoss.om_order 

impdp使用network_link直接导入
1,从源库直接复制用户到目标库。
建立从目标库连接源库的dblink,登录目标库使用下面语句

impdp system/password schemas=用户名 network_link=dblink

2,也可以将源库作为目标库,创建连接自身的dblink

impdp system/password schemas=用户名 network_link=dblink remap_schema=用户名:新用户名

通过network_link方式直接将远程用户(schema)复制到本地!