冷备和恢复工具-expdp和impdp

逻辑备份和恢复

2019.11.14 BoobooWei

数据泵官方介绍

Oracle Data Pump

本部分讨论的主题包括数据泵导出,数据泵导入,旧模式,性能和数据泵API DBMS_DATAPUMP

  • Oracle数据泵概述
    Oracle数据泵技术可将数据和元数据从一个数据库高速移动到另一个数据库。
  • Oracle数据泵导出
    Oracle数据泵导出实用程序用于将数据和元数据卸载到一组操作系统文件中,这些文件称为转储文件集。
  • Oracle数据泵导入
    使用Oracle数据泵导入,您可以将导出转储文件集加载到目标数据库中,或直接从源数据库中加载目标数据库,而无需插入文件。
  • Oracle数据泵旧模式
    在Oracle数据泵旧模式下,您可以在Oracle数据泵导出和数据泵导入命令行上使用原始的导出和导入参数。
  • Oracle数据泵性能
    了解Oracle数据泵导出和导入如何比原始的导出和导入更好,以及如何提高导出和导入操作的性能。
  • Oracle Data Pump API
    您可以使用Oracle Data Pump PL / SQL API自动执行数据移动操作DBMS_DATAPUMP

数据泵组件

Oracle数据泵由三个不同的部分组成:

  • 命令行客户端,expdp以及impdp
  • DBMS_DATAPUMPPL / SQL程序包(也称为数据泵API)
  • DBMS_METADATAPL / SQL程序包(也称为元数据API)

数据泵客户端expdp和分别impdp调用数据泵导出实用程序和数据泵导入实用程序。

expdpimpdp客户机使用规定的程序DBMS_DATAPUMPPL / SQL包来执行导出和导入命令,使用在命令行中输入的参数。这些参数支持导出和导入完整数据库或数据库子集的数据和元数据。

移动元数据时,数据泵将使用DBMS_METADATAPL / SQL软件包提供的功能。该DBMS_METADATA包提供了用于提取,操作和重新创建字典元数据的集中式工具。

DBMS_DATAPUMPDBMS_METADATAPL / SQL程序包可独立使用的数据泵客户。

注意:

所有数据泵的导出和导入处理,包括读取和写入转储文件,都是在指定数据库连接字符串选择的系统(服务器)上完成的。这意味着对于非特权用户,数据库管理员(DBA)必须为在该服务器文件系统上读写的数据泵文件创建目录对象。

也可以看看:

数据泵如何移动数据?

有关Data Pump如何将数据移入和移出数据库的信息,请参阅以下部分:

注意:

数据泵不使用 禁用唯一索引。要将数据加载到表中,必须删除索引或重新启用索引。

数据泵导出和导入操作的必需角色

许多数据泵的导出和导入操作都要求用户DATAPUMP_EXP_FULL_DATABASE扮演一个角色和/或一个DATAPUMP_IMP_FULL_DATABASE角色。当您运行数据库创建过程中的标准脚本时,会自动为Oracle数据库定义这些角色。(请注意,尽管这些角色的名称中包含单词FULL,但实际上对于所有导出和导入模式(不仅是完全模式),都需要这些角色。)

DATAPUMP_EXP_FULL_DATABASE角色仅影响导出操作。该DATAPUMP_IMP_FULL_DATABASE角色影响导入操作和使用Import SQLFILE参数的操作。这些角色允许执行导出和导入的用户执行以下操作:

  • 在其架构范围之外执行操作
  • 监视其他用户启动的作业
  • 非特权用户无法引用的导出对象(例如表空间定义)和导入对象(例如目录定义)

这些是强大的角色。在向用户授予这些角色时,数据库管理员应谨慎行事。

尽管SYS没有为架构分配任何这些角色,但是由Data Pump执行的所有需要这些角色的安全检查也都授予了对该SYS架构的访问权限。

也可以看看:
《 Oracle数据库安全指南》中有关Oracle数据库安装中预定义角色的更多信息

expdp导出步骤

1 创建逻辑目录

  • 第一步:在服务器上创建真实的目录;(注意:第三步创建逻辑目录的命令不会在OS上创建真正的目录,所以要先在服务器上创建真实的目录。)mkdir /home/oracle/expbk

  • 第二步:用sys管理员登录sqlplus sqlplus / as sysdba

  • 第三步:创建逻辑目录SQL> create directory data_dir as '/home/oracle/expbk';

  • 第四步:查看管理员目录,检查是否存在select * from dba_directories;

    SQL> select * from dba_directories;

    OWNER DIRECTORY_NAME
    ------------------------------ ------------------------------
    DIRECTORY_PATH
    --------------------------------------------------------------------------------
    SYS DATA_DIR
    /home/oracle/dmp/user
  • 第五步:用sys管理员给你的指定用户赋予在该目录的操作权限 SQL> grant read,write on directory data_dir to user;

2 expdp的五种导出方式

第一种:full=y全量导出数据库

expdp user/passwd@orcl dumpfile=expdp.dmp directory=data_dir full=y logfile=expdp.log;

第二种:schemas按用户导出

expdp user/passwd@orcl schemas=user dumpfile=expdp.dmp directory=data_dir logfile=expdp.log;

第三种:tablespace按表空间导出

expdp sys/passwd@orcl tablespaces=tbs1,tbs2 dumpfile=expdp.dmp directory=data_dir logfile=expdp.log;

第四种:tables导出表

expdp user/passwd@orcl tables=table1,table2 dumpfile=expdp.dmp directory=data_dir logfile=expdp.log;

第五种:query按查询条件导

expdp user/passwd@orcl tables=table1 query='where number=1234' dumpfile=expdp.dmp directory=data_dir logfile=expdp.log;

3 impdp导入步骤

(1)如果不是同一台服务器,需要先将上面的dmp文件下载到目标服务器上;

(2)参照“expdp导出步骤”里的前三步,建立逻辑目录;

(3)用impdp命令导入,对应五种方式:

第一种:full=y全量导入数据库

impdp user/passwd directory=data_dir dumpfile=expdp.dmp full=y;

第二种:schemas按用户导出后同名用户导入

impdp A/passwd schemas=A directory=data_dir dumpfile=expdp.dmp logfile=impdp.log;

第三种:tablespaces导入表空间

同用户:

impdp sys/passwd tablespaces=tbs1 directory=data_dir dumpfile=expdp.dmp logfile=impdp.log;

跨用户:将表空间TBS01、TBS02、TBS03导入到表空间A_TBS,将用户B的数据导入到A,并生成新的oid防止冲突;

impdp A/passwd remap_tablespace=TBS01:A_TBS,TBS02:A_TBS,TBS03:A_TBS remap_schema=B:A FULL=Y transform=oid:n
directory=data_dir dumpfile=expdp.dmp logfile=impdp.log

第四种:tables导入表

同用户:

impdp A/passwd tables=table1,table2 dumpfile=expdp.dmp logfile=impdp.log;

跨用户:从A用户中把表table1和table2导入到B用户中

impdp B/passwd tables=A.table1,A.table2 remap_schema=A:B directory=data_dir dumpfile=expdp.dmp logfile=impdp.log;

第五种:追加数据

--table_exists_action:导入对象已存在时执行的操作。有效关键字:SKIP,APPEND,REPLACE和TRUNCATE

impdp sys/passwd directory=data_dir dumpfile=expdp.dmp schemas=system table_exists_action=replace logfile=impdp.log;

table_exists_action 含义
APPEND 已存在表,追加数据,(若存在主键冲突则导入失败)
REPLACE 已存在表,先drop,再导入
SKIP 已存在表,则跳过并处理下一个对象
TRUNCATE 已存在表,先truncate,再导入
TABLE_EXISTS_ACTION
Action to take if imported object already exists.
Valid keywords are: APPEND, REPLACE, [SKIP] and TRUNCATE.

课堂实践

实践1-创建逻辑目录用于存放逻辑备份

[oracle@oratest ~]$ mkdir /home/oracle/expbk
[oracle@oratest ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Sun Nov 10 00:21:27 2019

Copyright (c) 1982, 2013, Oracle. All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select *from dba_directories;

OWNER DIRECTORY_NAME
------------------------------ ------------------------------
DIRECTORY_PATH
--------------------------------------------------------------------------------
SYS ORACLE_OCM_CONFIG_DIR
/u01/app/oracle/product/11.2.0.4/ccr/hosts/oratest/state

SYS DATA_PUMP_DIR
/u01/app/oracle/product/11.2.0.4/rdbms/log/

SYS ORACLE_OCM_CONFIG_DIR2
/u01/app/oracle/product/11.2.0.4/ccr/state


SQL> column directory_path format a40
SQL> select *from dba_directories;

OWNER DIRECTORY_NAME
------------------------------ ------------------------------
DIRECTORY_PATH
----------------------------------------
SYS ORACLE_OCM_CONFIG_DIR
/u01/app/oracle/product/11.2.0.4/ccr/hos
ts/oratest/state

SYS DATA_PUMP_DIR
/u01/app/oracle/product/11.2.0.4/rdbms/l
og/

SYS ORACLE_OCM_CONFIG_DIR2

OWNER DIRECTORY_NAME
------------------------------ ------------------------------
DIRECTORY_PATH
----------------------------------------
/u01/app/oracle/product/11.2.0.4/ccr/sta
te


SQL> create or replace directory expbk as '/home/oracle/expbk';

Directory created.

SQL> grant read,write on directory expbk to scott;

Grant succeeded.

SQL> select *from dba_directories;

OWNER DIRECTORY_NAME
------------------------------ ------------------------------
DIRECTORY_PATH
----------------------------------------
SYS EXPBK
/home/oracle/expbk

SYS ORACLE_OCM_CONFIG_DIR
/u01/app/oracle/product/11.2.0.4/ccr/hos
ts/oratest/state

SYS DATA_PUMP_DIR
/u01/app/oracle/product/11.2.0.4/rdbms/l

OWNER DIRECTORY_NAME
------------------------------ ------------------------------
DIRECTORY_PATH
----------------------------------------
og/

SYS ORACLE_OCM_CONFIG_DIR2
/u01/app/oracle/product/11.2.0.4/ccr/sta
te

实践2-解决报错 ORA-39213

执行expdp时报错如下:

ORA-39006: internal error
ORA-39213: Metadata processing is notavailable

执行oerr ora <错误编号>查看报错明细:

[oracle@oratest expbk]$ oerr ora 39213
39213, 00000, "Metadata processing is not available"
// *Cause: The Data Pump could not use the Metadata API. Typically,
// this is caused by the XSL stylesheets not being set up properly.
// *Action: Connect AS SYSDBA and execute dbms_metadata_util.load_stylesheets
// to reload the stylesheets.

可以看到解决方法为,使用sysdba角色的用户执行execute sys.dbms_metadata_util.load_stylesheets;

实践3-全库备份导出

[oracle@oratest expbk]$ expdp userid=system/oracle job_name=full_job directory=expbk dumpfile=full.dump full=y logfile=full.log

Export: Release 11.2.0.4.0 - Production on Sun Nov 10 00:36:56 2019

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."FULL_JOB": userid=system/******** job_name=full_job directory=expbk dumpfile=full.dump full=y logfile=full.log
Estimate in progress using BLOCKS method...
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 576 KB
Processing object type DATABASE_EXPORT/TABLESPACE
Processing object type DATABASE_EXPORT/PROFILE
Processing object type DATABASE_EXPORT/SYS_USER/USER
Processing object type DATABASE_EXPORT/SCHEMA/USER
Processing object type DATABASE_EXPORT/ROLE
Processing object type DATABASE_EXPORT/GRANT/SYSTEM_GRANT/PROC_SYSTEM_GRANT
Processing object type DATABASE_EXPORT/SCHEMA/GRANT/SYSTEM_GRANT
Processing object type DATABASE_EXPORT/SCHEMA/ROLE_GRANT
Processing object type DATABASE_EXPORT/SCHEMA/DEFAULT_ROLE
Processing object type DATABASE_EXPORT/RESOURCE_COST
Processing object type DATABASE_EXPORT/TRUSTED_DB_LINK
Processing object type DATABASE_EXPORT/SCHEMA/SEQUENCE/SEQUENCE
Processing object type DATABASE_EXPORT/DIRECTORY/DIRECTORY
Processing object type DATABASE_EXPORT/DIRECTORY/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type DATABASE_EXPORT/CONTEXT
Processing object type DATABASE_EXPORT/SCHEMA/PUBLIC_SYNONYM/SYNONYM
Processing object type DATABASE_EXPORT/SCHEMA/SYNONYM
Processing object type DATABASE_EXPORT/SCHEMA/TYPE/TYPE_SPEC
Processing object type DATABASE_EXPORT/SYSTEM_PROCOBJACT/PRE_SYSTEM_ACTIONS/PROCACT_SYSTEM
Processing object type DATABASE_EXPORT/SYSTEM_PROCOBJACT/PROCOBJ
Processing object type DATABASE_EXPORT/SYSTEM_PROCOBJACT/POST_SYSTEM_ACTIONS/PROCACT_SYSTEM
Processing object type DATABASE_EXPORT/SCHEMA/PROCACT_SCHEMA
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/PRE_TABLE_ACTION
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/COMMENT
Processing object type DATABASE_EXPORT/SCHEMA/PACKAGE/PACKAGE_SPEC
Processing object type DATABASE_EXPORT/SCHEMA/FUNCTION/FUNCTION
Processing object type DATABASE_EXPORT/SCHEMA/PROCEDURE/PROCEDURE
Processing object type DATABASE_EXPORT/SCHEMA/PACKAGE/COMPILE_PACKAGE/PACKAGE_SPEC/ALTER_PACKAGE_SPEC
Processing object type DATABASE_EXPORT/SCHEMA/FUNCTION/ALTER_FUNCTION
Processing object type DATABASE_EXPORT/SCHEMA/PROCEDURE/ALTER_PROCEDURE
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/INDEX/INDEX
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/CONSTRAINT/CONSTRAINT
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type DATABASE_EXPORT/SCHEMA/VIEW/VIEW
Processing object type DATABASE_EXPORT/SCHEMA/VIEW/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type DATABASE_EXPORT/SCHEMA/VIEW/COMMENT
Processing object type DATABASE_EXPORT/SCHEMA/PACKAGE_BODIES/PACKAGE/PACKAGE_BODY
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/POST_TABLE_ACTION
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TRIGGER
Processing object type DATABASE_EXPORT/SCHEMA/POST_SCHEMA/PROCACT_SCHEMA
Processing object type DATABASE_EXPORT/AUDIT
. . exported "SCOTT"."DEPT" 5.929 KB 4 rows
. . exported "SCOTT"."EMP" 8.562 KB 14 rows
. . exported "SCOTT"."SALGRADE" 5.859 KB 5 rows
. . exported "SCOTT"."T02" 5.421 KB 1 rows
. . exported "SYSTEM"."REPCAT$_AUDIT_ATTRIBUTE" 6.328 KB 2 rows
. . exported "SYSTEM"."REPCAT$_OBJECT_TYPES" 6.882 KB 28 rows
. . exported "SYSTEM"."REPCAT$_RESOLUTION_METHOD" 5.835 KB 19 rows
. . exported "SYSTEM"."REPCAT$_TEMPLATE_STATUS" 5.484 KB 3 rows
. . exported "SYSTEM"."REPCAT$_TEMPLATE_TYPES" 6.289 KB 2 rows
. . exported "OUTLN"."OL$" 0 KB 0 rows
. . exported "OUTLN"."OL$HINTS" 0 KB 0 rows
. . exported "OUTLN"."OL$NODES" 0 KB 0 rows
. . exported "SCOTT"."BONUS" 0 KB 0 rows
. . exported "SYSTEM"."DEF$_AQCALL" 0 KB 0 rows
. . exported "SYSTEM"."DEF$_AQERROR" 0 KB 0 rows
. . exported "SYSTEM"."DEF$_CALLDEST" 0 KB 0 rows
. . exported "SYSTEM"."DEF$_DEFAULTDEST" 0 KB 0 rows
. . exported "SYSTEM"."DEF$_DESTINATION" 0 KB 0 rows
. . exported "SYSTEM"."DEF$_ERROR" 0 KB 0 rows
. . exported "SYSTEM"."DEF$_LOB" 0 KB 0 rows
. . exported "SYSTEM"."DEF$_ORIGIN" 0 KB 0 rows
. . exported "SYSTEM"."DEF$_PROPAGATOR" 0 KB 0 rows
. . exported "SYSTEM"."DEF$_PUSHED_TRANSACTIONS" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_AUDIT_COLUMN" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_COLUMN_GROUP" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_CONFLICT" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_DDL" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_EXCEPTIONS" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_EXTENSION" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_FLAVORS" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_FLAVOR_OBJECTS" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_GENERATED" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_GROUPED_COLUMN" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_INSTANTIATION_DDL" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_KEY_COLUMNS" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_OBJECT_PARMS" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_PARAMETER_COLUMN" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_PRIORITY" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_PRIORITY_GROUP" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_REFRESH_TEMPLATES" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_REPCAT" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_REPCATLOG" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_REPCOLUMN" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_REPGROUP_PRIVS" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_REPOBJECT" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_REPPROP" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_REPSCHEMA" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_RESOLUTION" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_RESOLUTION_STATISTICS" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_RESOL_STATS_CONTROL" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_RUNTIME_PARMS" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_SITES_NEW" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_SITE_OBJECTS" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_SNAPGROUP" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_TEMPLATE_OBJECTS" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_TEMPLATE_PARMS" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_TEMPLATE_REFGROUPS" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_TEMPLATE_SITES" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_TEMPLATE_TARGETS" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_USER_AUTHORIZATIONS" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_USER_PARM_VALUES" 0 KB 0 rows
. . exported "SYSTEM"."SQLPLUS_PRODUCT_PROFILE" 0 KB 0 rows
Master table "SYSTEM"."FULL_JOB" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.FULL_JOB is:
/home/oracle/expbk/full.dump
Job "SYSTEM"."FULL_JOB" successfully completed at Sun Nov 10 00:37:27 2019 elapsed 0 00:00:31

[oracle@oratest expbk]$ ll -h
total 2.7M
-rw-r----- 1 oracle oinstall 2.7M Nov 10 00:37 full.dump
-rw-r--r-- 1 oracle oinstall 8.6K Nov 10 00:37 full.log
[oracle@oratest expbk]$ file full.dump
full.dump: DBase 3 data file (1728087684 records)
[oracle@oratest expbk]$ strings full.dump | head -n 20
"SYSTEM"."FULL_JOB"
x86_64/Linux 2.4.xx
BOOBOO
ZHS16GBK
11.02.00.04.00
001:001:000001:000001
HDR>T<?
1B"#
ejVW
4DDE
]uW\[
JVhv
L2k[
Q)hZ
E)H'
$DD@D
UUUUUUUUUUV`
.0](
HF((0
&`wrA

逻辑备份恢复工具对比

Oracle 官网帮助

工具区别 exp\imp expdp\impdp
使用位置 服务器/客户端都可 只能服务端
影响因素 网络、磁盘 磁盘
备份速度 更慢 更快
恢复速度 更慢 更快
数据库版本 oracle 11g 开始

我的理解

  1. exp工具一样,expdp工具也属于逻辑备份,数据一致性为:备份开始的时间点;
  2. 有三种使用方式:1)命令行;2)参数文件;3)交互式
  3. 数据泵的导出模式:1)full 完全模式;2)schema 库模式;3)tables 表模式;4) tablespace表空间模式;5) transport_tablespaces可传输表空间模式
  4. 11g开始使用该工具做逻辑备份
  5. 备份文件为二进制文件