oracle expdp/impdp/可传输表空间
oracle expdp/impdp/可传输表空间/及一些参数
Oracle data pump 导出操作能够将表、索引、约束、权限、PLSQL包、同义词等对象从数据库导出,并将它们保存在一种非文本格式的转储文件--泵文件内:数据泵的导入操作能够将泵文件中的对象导入数据库中。
Data pump实现的备份策略与RMAN实现的是不同的。导出操作能够精确到表的特定行而RMAN的backup命令操作的最小粒度是文件(比如数据文件):
导入操作只能使数据还原回当初导出的状态,在重做日志的帮助下,rman的restore和recover可以将数据库恢复到当前的时间点,所以,从恢复策略来说,data pump为rman的辅助工具。
1 目标对象及导出
--expdp/impdp 时必须指定文件所在目录,不指定就在默认的目录下
SQL> select directory_path,directory_name from dba_directories; /u01/app/oracle/dump DUMP_FILE_DIR /u01/app/oracle/admin/orcl/dpdump/ DATA_PUMP_DIR -- select * from dba_directories;
[oracle@DSI ~]$ mkdir -p /home/oracle/dump_test SQL> create directory dump_file_dir_test as '/home/oracle/dump_test';
--full=y 完全模式导出
[oracle@DSI dump_test]$ expdp system/*** cluster=n compression=all full=y parallel=2 nologfile=y dumpfile=EX%U.DMP reuse_dumpfiles=y DIRECTORY= dump_file_dir_test Processing object type DATABASE_EXPORT/SCHEMA/POST_SCHEMA/PROCACT_SCHEMA Processing object type DATABASE_EXPORT/AUDIT Master table "SYSTEM"."SYS_EXPORT_FULL_01" successfully loaded/unloaded ****************************************************************************** Dump file set for SYSTEM.SYS_EXPORT_FULL_01 is: /home/oracle/dump_test/EX01.DMP /home/oracle/dump_test/EX02.DMP Job "SYSTEM"."SYS_EXPORT_FULL_01" successfully completed at Wed Jul 10 15:40:59 2019 elapsed 0 00:01:43 [oracle@DSI dump_test]$ ll total 48276 -rw-r----- 1 oracle oinstall 21753856 Jul 10 15:40 EX01.DMP -rw-r----- 1 oracle oinstall 27680768 Jul 10 15:40 EX02.DMP
--parallel=2 导出工作在两个并行度下进行,会生成两个文件 --dumpfile=EX%U.DMP 指定导出格式,U%可以表示1~10,如果expdp不指定目录,生成文件在默认/u01/app/oracle/admin/orcl/dpdump/路径下 --cluster=n 表示仅允许使用一个数据库实例上的进程进行导出操作,此模式限制对RAC环境中其他节点的利用,默认,cluster=y --compression=all 开启了转储文件压缩功能,要求compatible初始化参数只是11.0.0 --full=y 表示完全模式导出,包含所有用户数据 --reuse_dumpfiles=y表示若目录中存在同名数据泵文件,则将其覆盖 --nologfile=y 不产生一个记录导出过程的细节
--使用tablespaces表空间导出
[oracle@DSI dump_test]$ expdp system/*** DIRECTORY=dump_file_dir_test compression=all tablespaces=user,TEST dumpfile=tablespace_%U.DMP parallel=2 logfile=tablespace_t1_20190710.log Export: Release 11.2.0.4.0 - Production on Wed Jul 10 15:55:09 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"."SYS_EXPORT_TABLESPACE_01": system/******** DIRECTORY=dump_file_dir_test compression=all tablespaces=user,TEST dumpfile=tablespace_%U.DMP parallel=2 logfile=tablespace_t1_20190710.log Estimate in progress using BLOCKS method... Processing object type TABLE_EXPORT/TABLE/TABLE_DATA Total estimation using BLOCKS method: 115.4 MB Processing object type TABLE_EXPORT/TABLE/TABLE Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX -rw-r----- 1 oracle oinstall 6238208 Jul 10 15:55 tablespace_01.DMP -rw-r----- 1 oracle oinstall 24576 Jul 10 15:55 tablespace_02.DMP -rw-r--r-- 1 oracle oinstall 2183 Jul 10 15:55 tablespace_t1_20190710.log
--使用schemas,用户模式导出
[oracle@DSI dump_test]$ expdp system/*** DIRECTORY=dump_file_dir_test compression=all schemas=TEST,scott dumpfile=schemas_%U.DMP parallel=2 logfile=schemas_t1_20190710.log Export: Release 11.2.0.4.0 - Production on Wed Jul 10 15:58:24 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 FLASHBACK automatically enabled to preserve database integrity. Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01": system/******** DIRECTORY=dump_file_dir_test compression=all schemas=TEST,scott dumpfile=schemas_%U.DMP parallel=2 logfile=schemas_t1_20190710.log -rw-r----- 1 oracle oinstall 6332416 Jul 10 15:58 schemas_01.DMP -rw-r----- 1 oracle oinstall 110592 Jul 10 15:58 schemas_02.DMP -rw-r--r-- 1 oracle oinstall 3700 Jul 10 15:58 schemas_t1_20190710.log
--使用tables
[oracle@DSI dump_test]$ expdp system/*** DIRECTORY=dump_file_dir_test compression=all tables=TEST.t1,scott.emp dumpfile=tables_%U.DMP logfile=tables_t1_20190710.log Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS . . exported "SCOTT"."EMP" 5.601 KB 14 rows . . exported "TEST"."T1" 4.890 KB 3 rows Master table "SYSTEM"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
--tables,query
[oracle@DSI dump_test]$ expdp system/*** DIRECTORY=dump_file_dir_test tables=scott.emp query=scott.emp:\"where job\=\'MANAGER\' and sal \>2000\" dumpfile=scott_emp_query_1.DMP nologfile=y Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS . . exported "SCOTT"."EMP" 8.117 KB 3 rows Master table "SYSTEM"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded ****************************************************************************** Dump file set for SYSTEM.SYS_EXPORT_TABLE_01 is: /home/oracle/dump_test/scott_emp_query_1.DMP Job "SYSTEM"."SYS_EXPORT_TABLE_01" successfully completed at Wed Jul 10 16:18:29 2019 elapsed 0 00:00:05 SQL> select * from SCOTT.EMP where job='MANAGER' and sal>200;
--flashback_time/flashback_scn参数导出与闪回时间查询
[oracle@DSI dump_test]$ expdp system/*** DIRECTORY=dump_file_dir_test flashback_time=\"systimestamp \- interval \'10\'minute\" tables=scott.emp dumpfile=scott_emp_flashbackup_10.DMP nologfile=y Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS . . exported "SCOTT"."EMP" 8.562 KB 14 rows Master table "SYSTEM"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded ****************************************************************************** Dump file set for SYSTEM.SYS_EXPORT_TABLE_01 is: /home/oracle/dump_test/scott_emp_flashbackup_10.DMP Job "SYSTEM"."SYS_EXPORT_TABLE_01" successfully completed at Wed Jul 10 16:25:40 2019 elapsed 0 00:00:04
2 导入
--full=y [oracle@DSI dump_test]$ impdp system/*** cluster=n full=y nologfile=y directory=dump_file_dir_test dumpfile=EX01.DMP,EX02.DMP --tablespace [oracle@DSI dump_test]$ impdp system/*** cluster=n tablespaces=TEST nologfile=y directory=dump_file_dir_test dumpfile=tablespace_%U.DMP --shcmeas [oracle@DSI dump_test]$ impdp system/*** cluster=n schemas=TEST nologfile=y directory=dump_file_dir_test dumpfile=schemas_%U.DMP --tables [oracle@DSI dump_test]$ impdp system/*** cluster=n tables=TEST.t1 nologfile=y directory=dump_file_dir_test dumpfile=tables_%U.DMP
--table_exists_action 默认=skip 如果要导入的表在目标库中存在该如何处理 ----SKIP 跳过当前对象的处理 ----APPEND 向当前对象追加记录 ----TRUNCATE 首先truncate当前对象中的数据,再导入数据 ----REPLACE 相当于先truncate,在append
也可以用--remap_table REMAP_TABLE=HR.EMPLOYEES:EMPS,或者remap_schema参数
表示将导入的表EMPLOYEES重命名为EMPS
3 可传输表空间
数据泵的可传输表空间是一种特殊的导出表空间内对象的方式,将产生两类文件:只读数据文件和元数据泵文件
SQL> alter tablespace test read only; Tablespace altered. [oracle@DSI dump_test]$ expdp system/*** transport_tablespaces=test nologfile=y directory=dump_file_dir_test dumpfile=test_tts.DMP reuse_dumpfiles=y Export: Release 11.2.0.4.0 - Production on Thu Jul 11 15:14:57 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"."SYS_EXPORT_TRANSPORTABLE_01": system/******** transport_tablespaces=test nologfile=y directory=dump_file_dir_test dumpfile=test_tts.DMP reuse_dumpfiles=y Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK Processing object type TRANSPORTABLE_EXPORT/TABLE Processing object type TRANSPORTABLE_EXPORT/INDEX/INDEX Processing object type TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINT Processing object type TRANSPORTABLE_EXPORT/INDEX_STATISTICS Processing object type TRANSPORTABLE_EXPORT/TABLE_STATISTICS Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK Master table "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded ****************************************************************************** Dump file set for SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 is: /home/oracle/dump_test/test_tts.DMP ****************************************************************************** Datafiles required for transportable tablespace TEST: /u01/app/oracle/oradata/orcl/test01.dbf Job "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at Thu Jul 11 15:15:13 2019 elapsed 0 00:00:15
--以这种方式生成的文件test_tts.DMP称为元数据泵文件,仅包含test表空间内所有对象的数据字典描述,实际的数据还在表空间test01文件中
另外,expdp还会检查导出的表空间是否符合自包含性。如果表T存在表空间test中,而t的索引idx_t1保存在users表空间中,若导出的只有users表空间,那么索引idx_t1将没有用处。自包含分为:单向自包含和双向自包含。
单向是指导出的表空间内的对象不依赖任何非导出的表空间内的任何对象,使用参数
--transport_full_check=n 可以做这样的检测;双向是指导出的表空间内的对象不依赖任何非导出的表空间内的任何对象,并且非导出的表空间内的对象也不依赖任何导出的表空间内的任何对象,--transport_full_check=y
若自包含失败--ORA-39187: the transportable set is not self-contained
[oracle@DSI dump_test]$ cp /u01/app/oracle/oradata/orcl/test01.dbf /home/oracle/backup/test01.tts SQL> alter tablespace test read write; Tablespace altered.
还原
SQL> drop tablespace test including contents and datafiles; Tablespace dropped. [oracle@DSI dump_test]$ impdp \'/ as sysdba\' transport_datafiles=/home/oracle/backup/test01.tts nologfile=y dumpfile=test_tts.DMP directory=dump_file_dir_test Import: Release 11.2.0.4.0 - Production on Thu Jul 11 15:29:42 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 Master table "SYS"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded Starting "SYS"."SYS_IMPORT_TRANSPORTABLE_01": "/******** AS SYSDBA" transport_datafiles=/home/oracle/backup/test01.tts nologfile=y dumpfile=test_tts.DMP directory=dump_file_dir_test Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK Processing object type TRANSPORTABLE_EXPORT/TABLE Processing object type TRANSPORTABLE_EXPORT/INDEX/INDEX Processing object type TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINT Processing object type TRANSPORTABLE_EXPORT/INDEX_STATISTICS Processing object type TRANSPORTABLE_EXPORT/TABLE_STATISTICS Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK Job "SYS"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at Thu Jul 11 15:29:46 2019 elapsed 0 00:00:03 SQL> select tablespace_name,status,plugged_in from dba_tablespaces where tablespace_name='TEST'; TABLESPACE_NAME STATUS PLU ------------------------------ --------- --- TEST READ ONLY YES 字段plugged_in的值是yes表示该表空间是通过可传输表空间导入的,而非创建的。 SQL> select * from test.t1; ID NAME DATE1 ---------- ---------- --------- 1 AAAAA 22-MAY-19 2 bbbbb 22-MAY-19 3 tt 23-MAY-19 SQL> insert into test.t1 values(4,'yhq',sysdate); insert into test.t1 values(4,'yhq',sysdate) * ERROR at line 1: ORA-00372: file 5 cannot be modified at this time ORA-01110: data file 5: '/home/oracle/backup/test01.tts' SQL> alter tablespace test read write; Tablespace altered. SQL> insert into test.t1 values(4,'yhq',sysdate); 1 row created. SQL> commit; Commit complete. SQL> select * from test.t1; ID NAME DATE1 ---------- ---------- --------- 1 AAAAA 22-MAY-19 2 bbbbb 22-MAY-19 3 tt 23-MAY-19 4 yhq 11-JUL-19
最终结果是test表空间内对象都回到了导出时的状态,但是该表在导出后的变更全部丢失,所以只是还原没有回复。因为可传输表空间的主要目的是数据迁移。
采用该方式还原一个或多个自包含的表空间的最大特点是:还原时不要求被导入的数据文件头部中的DBID和数据库的DBID必须相同。此功能是RMAN的restore做不到的。
最后,可传输表空间的导入/导出不支持并行度,所以不能将parallel参数设置为大于1.
--expdp参数--主要
--expdp参数 --directory 默认DATA_PUMP_DIR --parallel=2 导出工作在两个并行度下进行,会生成两个文件--企业版才支持并行 --dumpfile=EX%U.DMP 指定导出格式,U%可以表示1~10,如果expdp不指定目录,生成文件在默认/u01/app/oracle/admin/orcl/dpdump/路径下 --cluster=n 表示仅允许使用一个数据库实例上的进程进行导出操作,此模式限制对RAC环境中其他节点的利用,默认,cluster=y --compression=all 开启了转储文件压缩功能,要求compatible初始化参数只是11.0.0 --full=y 表示完全模式导出,包含所有用户数据,实际上导出时仍然是只导与用户逻辑数据相关的对象和数据,如果要执行全库导出,连接用户必须 有EXP_FULL_DATABASE角色或dba角色的用户。 --reuse_dumpfiles=y表示若目录中存在同名数据泵文件,则将其覆盖 --nologfile=y 不产生一个记录导出过程的细节 --exclude 指定一个反规则的过滤条件,exclude=TABLE:"LIKE 'TMP%'" 所有TMP开头的表不会被导出 --filesize 默认=0 无限制,用来指定单个dump文件的最大容量,单位B\K\M\G --flashback_scn 应用flashback query的特性,导出指定的scn时的对象数据 --flashback_time 导出指定的时间点的对象数据 --include 指定一个正规则的过滤条件,与exclude正好相反 --logfile 默认值export.log --network_link 指定dblink执行导出,是expdp中, 唯一支持从远端数据库导出的方式 --parfile 指定参数文件的路径 --query 指定table的query功能 --schemas 以schema模式导出,schemas=TEST,scott --status 默认=0,指定任务执行状态刷新的频率 --tables 按表导出,tables=TEST.t1,scott.emp,TABLES=SCOTT.EMP%,TABLES=SCOTT.T_PARTITION:PART01导出分区 --tablespaces 按表空间导出tablespaces=user,TEST --transport_tablespaces 指定以传输表空间模式导出的表空间名称列表 --version 默认=compatible 指定数据库生成的dump文件的最低兼容版本
--impdp参数--主要
--impdp --impdp -help --content 默认=all,分为DATA和METADATA,分表代表对象数据和对象元数据 ----DATA_ONLY只导入数据部分 ----METADATA_ONLY只导入元数据,即对象的定义 --directory 默认DATA_PUMP_DIR --dumpfile 指定导入的dump文件 --exclude --flashback_scn --flashback_time --full=y 全库模式导入,指所有dump文件的内容均被导入 --include --logfile --network_link --parallel --nologfile --parfile --query --remap_datafile 用来转换本地数据文件的路径,通常在表空间迁移时需要设置,remap_datafile=source_datafile:target_datafile 在执行impdp时指定本参数,用户必须有imp_full_database角色或dba角色 --remap_table REMAP_TABLE=HR.EMPLOYEES:EMPS --remap_schema 用来转换对象的属主,remap_schema=source_schema:target_schema,该参数的作用类似fromuser+touser --remap_schema=A:X,B:Y --remap_tablespace 用来转换对象所在的表空间,remap_tablespace=source_tablespace:target_tablespace --reuse_datafiles 默认=n,用来指定如果导入执行创建表空间时,发现表空间对应的数据文件已经存在,是否能够重用 如果指定y,表空间的创建能够正常进行,并自动对已存在的数据文件进行初始化处理 --schemas 以schema模式导入 --skip_unusable_indexes 用来指定导入时是否跳过不可用(unusable)状态的index --sqlfile 用来生成导入设计的DDL语句,sqlfile=[directory_object:]file_name 当impdp命令并指定sqlfile参数时,数据并不会真正被导入,而是将导入所涉及的所有DDL语句存入sqlfile指定的文件中,因此该参数 可以用来生成对象的创建脚本 --streams_configuration 默认=y 指定是否导入streams的配置信息 --table_exists_action 默认=skip 如果要导入的表在目标库中存在该如何处理 ----SKIP 跳过当前对象的处理 ----APPEND 向当前对象追加记录 ----TRUNCATE 首先truncate当前对象中的数据,再导入数据 ----REPLACE 相当于先truncate,在append --tables 表模式导入 ,TABLES=SCOTT.EMP% --tablespaces 表空间模式来导入数据 --transform 可以用来修改对象创建的DDL语句,transform=transform_name:value[:object_type] --segment_attributes 指定存储段的属性是否被导入,包括物理属性、存储属性、表空间及是否记录日志等 --storage 指定是的导入存储属性 --oid 指定是否导入oid --pctspace 指定对象分配时的大小 --transport_datafiles --transport_full_check --transport_tablespaces 指定以传输表空间模式导入的表空间名称列表 --version