注:最近在使用数据泵进行数据导入导出的时候发现一些问题,对部分参数的理解也不够透彻,于是找了一些文档读,发现这篇简明易懂的,简单翻译一下。
原文链接:Oracle Data Pump (expdp, impdp) in Oracle Database 10g, 11g, 12c
其他参考文档:
Oracle Data Pump (expdp, impdp) in Oracle Database 10g, 11g, 12c
Oracle数据泵(Data Pump),是一种相对于旧版本中使用的“exp”、“imp”来说全新的、更快并且更加灵活的工具。在基本的导入、导出功能之外,数据泵还提供了一组PL/SQL的API,并且支持外部表。
本文主要针对Oracle 10g来叙述,同时对之后以及最新版本的Oracle也有描述。新的特性会另写文章进行讲述,但文末的帮助小节是保持更新的。
- 开始
- 按表导出/导入
- 按模式导出/导入
- 按数据库导出/导入
- 参数:include与exclude
- 参数:content与query
- 网络导出/导入
- 闪回导出
- 其他信息
- 数据泵API
- 外部表(使用外部表卸载/载入数据)
- 安全的外部密码存储
- 帮助
Data Pump Enhancements in Oracle Database 12c Release 1 (expdp and impdp)
Data Pump Enhancements in Oracle Database 12c Release 2 (expdp and impdp)
SQL Developer 3.1 Data Pump Wizards (expdp, impdp)
开始
为使示例可以展示,我们需要解锁Scott用户,并且创建一个其拥有读取权限的目录对象。目录对象只是一个真实文件夹的映射,创建文件对象并不会在数据库所在服务器的真实文件系统中创建文件夹。
CONN / AS SYSDBA
ALTER USER scott IDENTIFIED BY tiger ACCOUNT UNLOCK;
CREATE OR REPLACE DIRECTORY test_dir AS '/u01/app/oracle/oradata/';
GRANT READ, WRITE ON DIRECTORY test_dir TO scott;
已存在的文件对象可以使用 ALL_DIRECTORIES 来查询。
注:数据泵是基于服务端的技术,所以其文件对象均指向数据库服务器的文件夹,而不会对本地文件系统进行操作。
按表导出/导入
TABLES 参数用来指明导出的表。下面是一个导出、导入表的例子。
expdp scott/tiger@db10g tables=EMP,DEPT directory=TEST_DIR dumpfile=EMP_DEPT.dmp logfile=expdpEMP_DEPT.log
impdp scott/tiger@db10g tables=EMP,DEPT directory=TEST_DIR dumpfile=EMP_DEPT.dmp logfile=impdpEMP_DEPT.log
TABLE_EXISTS_ACTION=APPEND 参数允许为已存在的表导入数据。
按模式导出/导入
exp 的 OWNER 参数被替换为 SCHEMAS 参数,用来指定导出的模式。下面是一个按模式导出、导入的例子。
expdp scott/tiger@db10g schemas=SCOTT directory=TEST_DIR dumpfile=SCOTT.dmp logfile=expdpSCOTT.log
impdp scott/tiger@db10g schemas=SCOTT directory=TEST_DIR dumpfile=SCOTT.dmp logfile=impdpSCOTT.log
按数据库导出/导入
FULL 参数用来指明需要导出完整的数据库。下面是一个按数据库导出/导入的例子。
expdp system/password@db10g full=Y directory=TEST_DIR dumpfile=DB10G.dmp logfile=expdpDB10G.log
impdp system/password@db10g full=Y directory=TEST_DIR dumpfile=DB10G.dmp logfile=impdpDB10G.log
INCLUDE 与 EXCLUDE 参数
INCLUDE 与 EXCLUDE 参数用来限定导出/导入的特定对象。使用 INCLUDE 参数时,只有被其限定的对象才包括在导出/导入数据中。使用 EXCLUDE 参数时,除被其限定的对象外,所有其他对象均在导出/导入数据中。这两个参数是互斥的,使用能给出所要的结果的最小集合的那个参数。两个参数的基本语法是相同的。
INCLUDE=object_type[:name_clause] [, ...]
EXCLUDE=object_type[:name_clause] [, ...]
下面是在命令行中使用的一个例子。
expdp scott/tiger@db10g schemas=SCOTT include=TABLE:"IN ('EMP', 'DEPT')" directory=TEST_DIR dumpfile=SCOTT.dmp logfile=expdpSCOTT.log
expdp scott/tiger@db10g schemas=SCOTT exclude=TABLE:"= 'BONUS'" directory=TEST_DIR dumpfile=SCOTT.dmp logfile=expdpSCOTT.log
如果参数在命令行中使用,取决于你的操作系统,语句中的特殊字符可能需要转义。因此,使用参数文件更加简单。
include=TABLE:\"IN (\'EMP\', \'DEPT\')\"
导入/导出中可能多次使用同一参数,所以在导出表、视图和一些包的时候,使用下面两种方法都是可以的。
INCLUDE=TABLE,VIEW,PACKAGE:"LIKE '%API'"
or
INCLUDE=TABLE
INCLUDE=VIEW
INCLUDE=PACKAGE:"LIKE '%API'"
可以使用 LIKE 和 IN 参数来在一个声明中包含多个对象。
EXCLUDE=SCHEMA:"LIKE 'SYS%'"
EXCLUDE=SCHEMA:"IN ('OUTLN','SYSTEM','SYSMAN','FLOWS_FILES','APEX_030200','APEX_PUBLIC_USER','ANONYMOUS')"
可以使用DATABASE_EXPORT_OBJECTS、SCHEMA_EXPORT_OBJECTS 和 TABLE_OBJECTS 视图来查看可被INCLUDE 包含或被 EXCLUDE 排除的合法对象。
CONTENT 与 QUERY 参数
CONTENT 参数允许更改导出的内容。下面的例子展示了使用 METADATA_ONLY 参数值来只导出模式的内容而非数据。
expdp system/password@db10g schemas=SCOTT directory=TEST_DIR dumpfile=scott_meta.dmp logfile=expdp.log content=METADATA_ONLY
只导出数据不导出 metadata 可以使用 DATA_ONLY 参数值。
expdp system/password@db10g schemas=SCOTT directory=TEST_DIR dumpfile=scott_data.dmp logfile=expdp.log content=DATA_ONLY
QUERY 参数允许控制一张或多张表的导出的列。下面的例子导出了整个数据库,但是不包括 EMP 和 DEPT 表中的数据。
expdp system/password@db10g full=Y directory=TEST_DIR dumpfile=full.dmp logfile=expdp_full.log query='SCOTT.EMP:"WHERE deptno=0",SCOTT.DEPT:"WHERE deptno=0"'
根据你想要的结果,命令行中使用引号的方式可以不同。下面是一些对单张表与多张表进行操作的例子。
# Single Table. Multiple quoting methods possible.
expdp scott/tiger@pdb1 schemas=scott directory=TEST_DIR dumpfile=scott1.dmp logfile=scott1.log query=SCOTT.EMP:'"WHERE deptno=10"'
expdp scott/tiger@pdb1 schemas=scott directory=TEST_DIR dumpfile=scott2.dmp logfile=scott2.log query=SCOTT.EMP:\"WHERE deptno=10\"
expdp scott/tiger@pdb1 schemas=scott directory=TEST_DIR dumpfile=scott3.dmp logfile=scott3.log query='SCOTT.EMP:"WHERE deptno=10"'
# Multiple WHERE clause on each table.
expdp scott/tiger@pdb1 schemas=scott directory=TEST_DIR dumpfile=scott4.dmp logfile=scott4.log query='SCOTT.EMP:"WHERE deptno=10",SCOTT.DEPT:"WHERE deptno=20"'
网络导出/导入(NETWORK_LINK)
NETWORK_LINK 参数用来识别导出/导入的网络源。下面的网络连接可以展示它的用法。
CONN / AS SYSDBA
GRANT CREATE DATABASE LINK TO test;
CONN test/test
CREATE DATABASE LINK remote_scott CONNECT TO scott IDENTIFIED BY tiger USING 'DEV';
在下面导出的例子中,NETWORK_LINK 参数用来识别指向源服务器的数据库链接。数据对象从源服务器导出,写人本地的目录对象中,而不是源服务器。本地和远程的用户都需要赋予 EXP_FULL_DATABASE 权限。
expdp test/test@db10g tables=SCOTT.EMP network_link=REMOTE_SCOTT directory=TEST_DIR dumpfile=EMP.dmp logfile=expdpEMP.log
在下面导入的例子中,NETWORK_LINK 参数也用来识别指向服务器的数据库连接。不同的是数据对象从源服务器直接导入本地的服务器,而不是写入到 dump 文件中。尽管这里的导入不需要用到 DUMPFILE 参数,但操作的日志依然需要一个目录对象。本地和远程的用户都需要赋予 IMP_FULL_DATABASE 权限。
impdp test/test@db10g tables=SCOTT.EMP network_link=REMOTE_SCOTT directory=TEST_DIR logfile=impdpSCOTT.log remap_schema=SCOTT:TEST
闪回导出
其他信息
数据泵API
外部表(使用外部表卸载/载入数据)
安全的外部密码存储
帮助
更多