对于oracle常用的导入导出工具:exp\imp,expdp\impdp后者速度快,但是expdp属于服务端工具,而exp属于客户端工具,expdp生成的文件默认是存放在服务端的,而exp生成的文件是可以存放在客户端的
expdp是server端工具,但可以通过NETWORK_LINK参数实现远端导出,但是前提是远端也安装有Oracle数据库,只有CLIENT端是没有办法利用数据泵的。
使用expdpusername/password@connect_string这种格式导出数据,生成的文件存放在服务端,可以通过在expdp中使用network_link完成再远端服务器通过expdp导出数据。对于impdp亦然。
如:expdp system/oracledba directory=my_dir dumpfile=test.dmp logfile=test.log network_link=DB_LINK_TEST schemas=test01,test02 parallel=4
1、使用dblink远程导出导入数据的步骤为:
1.1 在源端创建到服务端的 dblink
create database link link_name connect to username identified by password using 'connect_string' ;
//username和 password是 server端的,并且特别注意该处的connect_string 就为tnsnames.ora中的服务名(连接服务端的串),
如:
SQL> create public database link yjtestlink connect to yjtest identified by "yjtest22324" using '//177.100.42.102:30145/orcl';
Database link created.
创建完成以后可以使用dblink,查询远程数据库表数据进行验证
SQL> select count(*) from yjtest.devicemodel@dbnmslink;
COUNT(*)
----------
7921574
验证成功
1.2 在源端创建导入导出文件夹并赋权
语句:
sqlplus / as sysdba
create or replace directory DMPDIR as 'directory';
grant read,write on directory DMPDIR to username;
sqlplus / as sysdba
create or replace directory dir as 'directory';
grant read,write on directory dir to yjsource;
1.3 源端使用dblink远程导出数据
expdp 'yjsource/"yjsource123"@orclsource' schemas=yjtest directory=DMPDIR dumpfile=yjtest20201013.dmp log=ytest20201013.log network_link=yjtestlink tables=ALARMLOGINHIS
分区表network_link的说明:
这里要指出的是:network_link不支持远端导出分区表中的某一个分区,但可以导整个分区表
2、远程导出导入示例
ORCL1 是源端,ORCL2是服务端
2.1. IMPDP + network_link, 直接将源端数据导入到目标库中(DUMP文件不落地)
--在ORCL2上创建DBLINK到ORCL1
create [public] database link <link_name> connect to
create public database link scms_test connect to dbmt identified by dbmt using '//192.168.1.144:1521/scms';
create public database link to_orcl1 connect to system identified by oracle using 'ORCL1';
--在ORCL2上执行IMPDP
$ impdp localusername/"localpasswd"@localsid' directory=DUMP_DIR logfile=impdp_to_orcl2.log network_link=to_orcl1 schemas=scott
2.2 EXPDP + network_link, 直接将源端库上的数据,导出到目标端服务器上
--在ORCL2上创建DBLINK到ORCL1
create public database link to_orcl1 connect to system identified by oracle using 'ORCL1';
--在ORCL2上执行EXPDP,导出的DUMP文件在ORCL2上
expdp 'localusername/"localpasswd"@localsid' directory=DUMP_DIR logfile=expdp_from_orcl1.log network_link=to_orcl1 schemas=scott parallel=2