【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;
还要有一个准备工作:
如果需要用dblink来导出数据的话需要给远程的用户一个exp_full_database的权限
sqlplus system/xxxx@192.168.1.100/orcl
GRANT EXP_FULL_DATABASE TO USERXX;
2.创建dblink
这里要注意,创建的dblink必须要是public的
否则及时创建完后,也会报错找不到dblink
创建完成后,查看下数据是否存在
如果找到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>
但是这个工具好用的同时,有一个局限,就是必须用本地的用户才可以导出数据,也就是说数据泵只能导出本地数据库的数据
但是如果业务需求是 将一个用户的全部表都导出,但是不需要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数据导入导出imp/exp命令 10g以上expdp/impdp命令
- ORACLE使用EXPDP和IMPDP数据泵进行导出导入的方法
- 针对数据泵导出 (expdp) 和导入 (impdp)工具性能降低问题的检查表 (文档 ID 1549185.1)
- Oracle 数据泵(IMPDP/EXPDP)导入导出
- ORACLE impdp / expdp 导入导出数据
- Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令
- 数据泵(expdp/impdp)跨版本导入,11g导出10g导入
- Expdp导出分区表的数据文件再Impdp导入到没分区的表的操作方法
- Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令
- expdp,impdp导入导出备份恢复数据
- Oracle 数据泵(IMPDP/EXPDP)导入导出总结
- 利用expdp 和impdp来 导出,导入 oracle 数据(含比较 两个schema的表结构)
- Oracle基础 数据泵导出/导入Expdp/impdp(转)
- Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令
- Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令
- Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令
- Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令
- 使用数据泵导入(impdp)和导出(expdp)
- Oracle 10g 到11g的数据迁移 导入导出 顺序步骤 expdp/impdp
- Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令