您的位置:首页 > 数据库 > Oracle

【EXPDP】expdp/impdp数据泵远程导入导出

2017-11-24 15:21 429 查看
Oracle在10g的时候有一个很好用的导出工具expdp(数据泵)

但是这个工具好用的同时,有一个局限,就是必须用本地的用户才可以导出数据,也就是说数据泵只能导出本地数据库的数据

但是如果业务需求是   将一个用户的全部表都导出,但是不需要t1,t2,t3而且这个数据库不是本地的,是异地的一个数据库

正常的思路是通过exp userxx/passwd@192.168.1.100/orcl file=xxx.dmp log=xxx.log 就可以异地导出,但是消耗很多时间,而且有一个硬性要求,必须要除去某些表,所以必须要用到expdp来完成

expdp中有一个参数是exclude,这个参数中就可以添加不想导出的索引或者表之类的

但是再一想,必须要用expdp,而且是一个异地的数据库,主机登录不上,很是矛盾

思考了好久,终于想到办法

用dblink来做一个中间的链接,再用expdp导出

完事具备,开搞:

1.在本地创建一个用户,一个目录,授权

$ mkdir /home/oracle/dmpfile

CREATE USER TEST IDENTIFIED BY TEST DEFAULTE TABLESPACE XXX; 
CREATE DIRECTORY DMPFILE AS '/oracle/dmpfile'
GRANT resource,connect,imp_full_database to TEST;
GRANT read,write on directory dmpfile to test;

还要有一个准备工作:

如果需要用dblink来导出数据的话需要给远程的用户一个exp_full_database的权限

sqlplus system/xxxx@192.168.1.100/orcl

GRANT EXP_FULL_DATABASE TO USERXX;

2.创建dblink

这里要注意,创建的dblink必须要是public的

否则及时创建完后,也会报错找不到dblink

create public database link db_local
connect to userxx IDENTIFIED BY  passwd
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl )
)
)';

 创建完成后,查看下数据是否存在

select * from userxx.test@db_local;

如果找到userxx重的test表的数据,证明dblink创建成功

3.用expdp导出数据

这是最关键的一步,因为参数有很多,所以使用parfile来完成,格式更好看些

vim test.par

userid=test/test            --导出的用户,本地用户!!

directory=dmpfile          --导出的目录,一定要在oracle中创建完成的,并且给用户授权读写权限

dumpfile=userxx.dmp      --导出的数据文件的名称,如果想在指定的位置的话可以写成dumpfile=/home/oracle/userxx.dmp

logfile=userxx.log          --日志文件,如果不写这个参数的话默认名称就是export.log,可以在本地的文件夹中找到

SCHEMAS=userxx       --使用dblink导出的用户不是本地的用户,需要加上schema来确定导出的用户,类似于exp中的owner,但还有一定的区别

EXCLUDE=TABLE:"IN('T1','T2','T3')"     --exclude 可以指定不导出的东西,table,index等,后面加上不想导出的表名

network_link=db_local          --这个参数是使用的dblink来远程导出,需要指定dblink的名称

完成后退出保存。

执行导出

expdp parfile=test.par

就可以看到最后的导出了

导入的话需要这样:必须要在oracle中有一个目录,而且要有读写权限,要有imp_full_database权限

impdp testuser/testuser dumfile=userxx.dmp logfile=imp_userxx.log directory=dmpfile remap_schema=userxx:testuser 

最后一个参数需要加上remap_schema=old:new

由一个用户导入到其他的用户,需要添加最后一个参数。

这样就可以导入成功了

SQL> 
SQL> 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 导入导出