WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606
全部博文(599)
分类: Oracle
2011-05-12 21:07:46
上一篇文章讨论了触发器的存在对IMP导入结果的影响。
可以看到,对于存在触发器的表,在IMP导入后,将会对结果产生影响。
下面看看触发器对IMPDP导入结果的影响。
还是利用前面创建的表。
SQL> SELECT TRIGGER_NAME,TABLE_NAME,STATUS FROM USER_TRIGGERS;
TRIGGER_NAME TABLE_NAME STATUS
-------------------- -------------------- --------
EXP_TRIGGER TEST ENABLED
SQL> SELECT * FROM TEST;
ID NAME
---------- ------------------------------
1 YANSHOUPENG
2 YANSP[huateng]
SQL> DELETE FROM TEST WHERE ID=2;
已删除 1 行。
SQL> COMMIT;
提交完成。
SQL> CREATE OR REPLACE DIRECTORY OUTPUT_DIR AS 'C:\';
目录已创建。
下面采用EXPDP进行导出操作:
SQL> host expdp admin/admin directory=output_dir dumpfile=test.dp tables=test
Export: Release 10.2.0.1.0 - Production on 星期三, 11 5月, 2011 10:52:24
Copyright (c) 2003, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
启动 "ADMIN"."SYS_EXPORT_TABLE_01": admin/******** directory=output_dir dumpfile=test.dp tables=test
正在使用 BLOCKS 方法进行估计...
处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 64 KB
处理对象类型 TABLE_EXPORT/TABLE/TABLE
处理对象类型 TABLE_EXPORT/TABLE/TRIGGER
. . 导出了 "ADMIN"."TEST" 5.242 KB 1 行
已成功加载/卸载了主表 "ADMIN"."SYS_EXPORT_TABLE_01"
******************************************************************************
ADMIN.SYS_EXPORT_TABLE_01 的转储文件集为:
C:\TEST.DP
作业 "ADMIN"."SYS_EXPORT_TABLE_01" 已于 10:52:48 成功完成
SQL> SELECT * FROM TEST;
ID NAME
---------- ------------------------------
1 YANSHOUPENG
SQL> DELETE FROM TEST;
已删除 1 行。
SQL> COMMIT;
提交完成。
下面进行导入操作:
SQL> host impdp admin/admin directory=output_dir dumpfile=test.dp tables=test content=data_only
Import: Release 10.2.0.1.0 - Production on 星期三, 11 5月, 2011 10:56:14
Copyright (c) 2003, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已成功加载/卸载了主表 "ADMIN"."SYS_IMPORT_TABLE_01"
启动 "ADMIN"."SYS_IMPORT_TABLE_01": admin/******** directory=output_dir dumpfile=test.dp tables=test content=data_only
处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA
. . 导入了 "ADMIN"."TEST" 5.242 KB 1 行
作业 "ADMIN"."SYS_IMPORT_TABLE_01" 已于 10:56:19 成功完成
SQL> SELECT * FROM TEST;
ID NAME
---------- ------------------------------
1 YANSHOUPENG[huateng]
可以看到,导入结果和IMP一样。
其实就算IMPDP有直接路径导入的方式,但是一旦表中有活动的触发器,IMPDP就采用外部表方式进行导入。
也就是说一旦表上有活动的触发器,IMPDP就不会采用直接路径方式进行导入。
对于以下情况IMPDP导入将会采用外部表方式。
Situations in Which Direct Path Load Is Not Used
If any of the following conditions exist for a table, Data Pump uses external tables rather than direct path to load the data for that table:
■ A global index on multipartition tables exists during a single-partition load. This includes object tables that are partitioned.
■ A domain index exists for a LOB column.
■ A table is in a cluster.
■ There is an active trigger on a pre-existing table.
■ Fine-grained access control is enabled in insert mode on a pre-existing table.
■ A table contains BFILE columns or columns of opaque types.
■ A referential integrity constraint is present on a pre-existing table.
■ A table contains VARRAY columns with an embedded opaque type.
■ The table has encrypted columns
■ The table into which data is being imported is a pre-existing table and at least one of the following conditions exists:
– There is an active trigger
– The table is partitioned
– Fine-grained access control is in insert mode
– A referential integrity constraint exists
– A unique index exists
■ Supplemental logging is enabled and the table has at least one LOB column.
■ The Data Pump command for the specified table used the QUERY, SAMPLE, or REMAP_DATA parameter.
以上所述,在进行IMP/IMPDP进行导入的时候,如果表上有活动的触发器的话,需要注意。