摘要
作为Oracle数据库管理员,或多或少会用到Expdp/Impdp工具。在Oracle数据库间迁移或者升级,备份和恢复,以及生产、开发、测试环境之间数据导出导入等方面,DBA通过会使用Expdp/Impdp工具很快速来实现这些操作。
数据泵
什么是数据泵?
Oracle数据泵技术支持Oracle数据库间进行数据和元数据高速迁移,主要是由客户端expdp和impdp实用工具来实现导出和导入数据。expdp和impdp客户端其实是使用DBMS_DATAPUMP PL/SQL包中提供的过程,使用在命令行中输入的参数执行导出和导入命令。这些参数支持导出和导入完整数据库或数据库子集的数据和元数据。同时,DBMS_DATAPUMP和DBMS_METADATAPL/SQL包可以独立于数据泵客户端使用。
数据泵的组成
Oracle Data Pump由三个不同的组件组成:
- 命令行客户端、expdp和impdp
- DBMS_DATAPUMP PL/SQL包(也称为数据泵API)
- DBMS_METADATA PL/SQL包(也称为元数据API)
注意事项
- exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
- expdp和impdp是服务端工具程序,它们只能在oracle服务端使用,不能在客户端使用。
- imp只适用于exp导出的文件,不适用于expdp导出的文件;impdp只适用于expdp导出的文件,不适用于exp导出的文件
expdp和impdp使用
- 在Oracle服务端,命令行打开sqlplus
sqlplus /nolog
conn / as sysdba
- 创建逻辑目录,该命令不会在操作系统中创建真正的目录(最好手工创建好),最好以administrator创建
create directory dump as "/u01/dump";
- 查看管理员目录(同时查看操作系统中是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)
select * from dba_directories;
- 给用户赋予在指定目录的操作上权限,最好是以system等管理员赋予
grant read,write on directory dump to 用户;
- 导出数据
(1)按用户导出
expdp 用户名/密码@实例名 schemas=模式 dumpfile=expdp.dmp directory=dump logfile=expdp.log;
(2)并行进程paraller
expdp scott/tigger@orcl directory=dump dumpfile=scott3.dmp paraller=40 job_name=scott3;
(3)按表名导出
expdp scott/tigger@orcl tables=emp,dept dumpfile=expdp.dmp directory=dump;
(4)按查询条件导出
expdp scott/tigger@orcl directory=dump dumpfile=expdp.dmp tables=emp query='where eno=20';
(5)按表空间导出
expdp system/manager directory=dump dumpfile=tablespace.dmp tablespace=temp,example;
(6)整个数据库导出
expdp system/manager directory=dump dumpfile=full.dmp full=y;
- 还原数据
(1)导入指定用户下
impdp scott/tigger@orcl directory=dump dumpfile=expdp.dmp schemas=scott logfile=expdp.log
(2)改变表的owner
impdp system/manager directory=dump dumpfile=expdp.dmp tables=scott.dept remap_schema=scott:system
(3)导入表空间
impdp system/manager diretory=dump dumpfile=tablespace.dmp tablespace=example
(4)导入整个数据库
impdp system/manager directory=dump dumpfile=full.dmp full=y;
(5)追加数据
impdp system/manager directory=dump dumpfile=expdp.dmp schemas=system table_exists_action;