合 Oracle 12C 数据泵新特性(DISABLE_ARCHIVE_LOGGING+VIEWS_AS_TABLES导出视图+LOGTIME)
Tags: Oracle数据泵DISABLE_ARCHIVE_LOGGINGLOGTIMEVIEWS_AS_TABLES
- 在Oracle 12c中,在数据泵(expdp)方面有哪些增强的新特性?
- 在Data Pump中引入了新的TRANSFORM的选项DISABLE_ARCHIVE_LOGGING
- 使用VIEWS_AS_TABLES选项可以让数据泵将视图转换为表然后导出
- LOGTIME参数
- 1.1 关闭redo日志的生成(TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y)
- 将视图转换为表然后导出(VIEWS_AS_TABLES选项)
- 1.2.1 自己实验
- 数据泵EXPDP/IMPDP在12C版本的新特性-VIEWS_AS_TABLES
- Oracle 12c 新特性 --- Oracle Data Pump Export View As a Table
- 1.1 数据泵新特性测试
- 1.1.1 数据导出工具expdp差异
- 1.1.2 视图转换成表
- 12c DataPump EXPORT (EXPDP) Enhancements (文档 ID 2171666.1)
- Audit all expdp/impdp operations with unified auditing
- Export one or more views as tables
- Silent encryption password for expdp job
- Transportable feature
- REFERENCES
在Oracle 12c中,在数据泵(expdp)方面有哪些增强的新特性?
Oracle 12c的数据泵新增了很多的新特性,分别如下所示:
在Data Pump中引入了新的TRANSFORM的选项DISABLE_ARCHIVE_LOGGING
(1)在Data Pump中引入了新的TRANSFORM的选项DISABLE_ARCHIVE_LOGGING,这对于表和索引在导入期间提供了关闭Redo日志生成的灵活性。当为TRANSFORM选项指定了DISABLE_ARCHIVE_LOGGING:Y值,那么在整个导入期间,表和索引的Redo日志就会处于关闭状态,仅生成少量的日志。这一功能在导入大型表时缓解了压力,并且减少了过度的Redo产生,从而加快了导入。这一属性对表和索引都适用。不管是在非归档还是归档情况下使用DISABLE_ARCHIVE_LOGGING都会减小导入时间,减少归档量。但是需要注意的是,如果数据库处于FORCE LOGGING模式,那么DISABLE_ARCHIVE_LOGGING参数会无效。
以下SQL演示了这一功能:
1 2 3 4 | impdp directory=dpump dumpfile=abcd.dmp TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y logfile=abcd.log impdp hr/hr DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp SCHEMAS=hr TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y -- 表和索引都关闭日志 impdp hr/hr DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp SCHEMAS=hr TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y:TABLE -- 只有表关闭日志 impdp hr/hr DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp SCHEMAS=hr TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y TRANSFORM=DISABLE_ARCHIVE_LOGGING:N:INDEX |
“TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y”表示表和索引都关闭日志。
有关该新特性需要注意以下几点:
① 在导入完成后,表和索引的状态(包括LOGGING状态和索引是否有效的状态)都会恢复到导入之前的状态。
② 在使用该参数导入数据文件后,如果相应的datafile被restored和recovered,那么接下来的涉及到目标表的查询会报ORA-01578和ORA-26040的坏块错误。例如:
例如:
1 2 3 4 5 6 7 | SQL> select * from test_nologging; ORA-01578: ORACLE data block corrupted (file # 11, block # 84) ORA-01110: data file 4: '/oradata/users.dbf' ORA-26040: Data block was loaded using the NOLOGGING option |
因此,在使用该参数导入数据文件后,需要立马对相关的数据文件做RMAN备份。
使用VIEWS_AS_TABLES选项可以让数据泵将视图转换为表然后导出
(2)使用VIEWS_AS_TABLES选项可以让数据泵将视图转换为表然后导出。需要注意的是,导出到dmp文件后,视图的定义已经自动转换为表的定义了。在执行导入操作后,会以表的形式存在。
以下SQL演示了这一功能:
1 2 3 4 | expdp system/lhr DIRECTORY=data_pump_dir DUMPFILE=expdp_vw.dmp LOGFILE=expdp_vw.log VIEWS_AS_TABLES=lhr.my_view impdp system/lhr DIRECTORY=data_pump_dir DUMPFILE=expdp_vw.dmp LOGFILE=impdp_vw.log remap_schema=lhr:lhr01 impdp lhr/lhr DIRECTORY=data_pump_dir DUMPFILE=expdp_vw.dmp LOGFILE=impdp_vw.log remap_schema=lhr:lhr1 VIEWS_AS_TABLES=lhr.my_view impdp lhr/lhr DIRECTORY=data_pump_dir DUMPFILE=expdp_vw.dmp LOGFILE=impdp_vw.log remap_schema=lhr:lhr1 TABLES=lhr.my_view |
表数据准备:
1 2 3 4 5 6 7 8 9 10 11 12 | create table lhr.my_tab1 (nr number, txt varchar2(10)); insert into lhr.my_tab1 values (1,'Line 1'); insert into lhr.my_tab1 values (2,'Line 2'); create table lhr.my_tab2 (nr number, col2 number, col3 varchar2(10)); insert into lhr.my_tab2 values (1,1,'c3_1'); insert into lhr.my_tab2 values (2,2,'c3_2'); commit; create view lhr.my_view (nr, txt, col3) as select t1.nr, t1.txt, t2.col3 from lhr.my_tab1 t1, lhr.my_tab2 t2 where t1.nr=t2.nr; |
LOGTIME参数
(3)LOGTIME参数决定时间戳是否将包括在expdp和impdp功能的输出信息中。LOGTIME的可用值如下所示:
① NONE:默认值,指示输出中不包括时间戳,输出和之前的版本相似。
② STATUS:时间戳包括在控制台输出中,但不会在日志文件中出现。
③ LOGFILE:时间戳出现在日志文件中,但不会输出到控制台。
④ ALL:时间戳出现在日志文件和控制台输出中。
关于Oracle 12c的数据泵还有很多的新特性,例如压缩、加密、审计等,这里不再详细介绍,读者可参考作者的博客或阅读相关的官方文档进行学习。
1.1 关闭redo日志的生成(TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y)
Data Pump中引入了新的TRANSFORM选项,这对于对象在导入期间提供了关闭重做生成的灵活性。当为TRANSFORM选项指定了DISABLE_ARCHIVE_LOGGING值,那么在整个导入期间,重做生成就会处于关闭状态。这一功能在导入大型表时缓解了压力,并且减少了过度的redo产生,从而加快了导入。这一属性还可应用到表以及索引。
以下案例演示了这一功能:
impdp directory=dpump dumpfile=abcd.dmp TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y logfile=abcd.log
l impdp directory=dpump dumpfile=abcd.dmp TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y logfile=abcd.log
l impdp hr/hr DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp SCHEMAS=hr TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y --表和索引都关闭日志
l impdp hr/hr DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp SCHEMAS=hr TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y:TABLE --只有表关闭日志
l impdp hr/hr DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp SCHEMAS=hr TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y TRANSFORM=DISABLE_ARCHIVE_LOGGING:N:INDEX
l impdp hr/hr DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp SCHEMAS=hr TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y:INDEX
Enables you to alter object creation DDL for objects being imported.
Syntax and Description
TRANSFORM=transform_name:value[:object_type]
The transform_name specifies the name of the transform.The possible options are as follows,in alphabetical order:
?DISABLE_ARCHIVE_LOGGING:[Y|N]
If set to Y,then the logging attributes for the specified object types(TABLE and/or INDEX)are disabled before the data is imported.If set to N(the default),then archive logging is not disabled during import.After the data has been loaded,the logging attributes for the objects are restored to their original settings.If no object type is specified,then the DISABLE_ARCHIVE_LOGGING behavior is applied to both TABLE and INDEX object types.This transform works for both file mode imports and network mode imports.It does not apply to transportable tablespace imports.
Note:
If the database is in FORCE LOGGING mode,then the DISABLE_ARCHIVE_LOGGING option will not disable logging when indexes and tables are created.
将视图转换为表然后导出(VIEWS_AS_TABLES选项)
这是Data Pump中另外一个改进。有了VIEWS_AS_TABLES 选项,你就可以将视图数据载入表中。
以下案例演示了如何在导出过程中将视图数据载入到表中:
expdp directory=dpump views_as_tables=my_view:my_table dumpfile=abcd.dmp logfile=abcd.log
1.2.1 自己实验
expdp VIEWS_AS_TABLES选项可以将视图看做表并将其数据导出。
expdp system/lhr DIRECTORY=data_pump_dir DUMPFILE=expdp_vw.dmp LOGFILE=expdp_vw.log VIEWS_AS_TABLES=lhr.my_view
表数据准备:
create table lhr.my_tab1 (nr number, txt varchar2(10));
insert into lhr.my_tab1 values (1,'Line 1');
insert into lhr.my_tab1 values (2,'Line 2');
create table lhr.my_tab2 (nr number, col2 number, col3 varchar2(10));
insert into lhr.my_tab2 values (1,1,'c3_1');
insert into lhr.my_tab2 values (2,2,'c3_2');
commit;
create view lhr.my_view (nr, txt, col3) as
select t1.nr, t1.txt, t2.col3
from lhr.my_tab1 t1, lhr.my_tab2 t2
where t1.nr=t2.nr;
开始导出:
C:\Users\xiaomaimiao>expdp system/lhr DIRECTORY=data_pump_dir DUMPFILE=expdp_vw.dmp LOGFILE=expdp_vw.log VIEWS_AS_TABLES=lhr.my_view
Export: Release 12.1.0.2.0 - Production on 星期五 12月 16 16:31:49 2016
Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.
连接到: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
启动 "SYSTEM"."SYS_EXPORT_TABLE_01": system/**** DIRECTORY=data_pump_dir DUMPFILE=expdp_vw.dmp LOGFILE=expdp_vw.log VIEWS_AS_TABLES=lhr.my_view
正在使用 BLOCKS 方法进行估计...
处理对象类型 TABLE_EXPORT/VIEWS_AS_TABLES/TABLE_DATA
使用 BLOCKS 方法的总估计: 16 KB
处理对象类型 TABLE_EXPORT/VIEWS_AS_TABLES/TABLE