8.1.4.3 单个分区的表空间传输(Oracle 11g)
在Oracle数据库的早期版本中,能够传输表空间并且稍后能将其插入不同数据库或同一个数据库中。该过程涉及复制数据文件,因此它是跨数据库传输数据的最快方法。然而直到现在,仍然无法传输单个分区的表空间,然后再将其插回数据库中。在 Oracle 11g 中可以这么做。
假设有一个名为SALES5的表,它包括了几个名为CT、NY等的分区。SQL>select partition_name, tablespace_name
2 from user_tab_partitions
3 wheretable_name='SALES5';
PARTITION_NAME TABLESPACE_NAME
-------------- ---------------
CT TS1
NY TS2
现在,可以使用如下命令传输 CT 分区:$ expdptables=scott.sales5:cttransportable=alwaysdirectory=data_pump_dirdumpfile=p_ct.dmp
Export:Release 11.1.0.4.0 - Beta on Sunday, 10 June, 2007 16:05:40 Copyright (c) 2003, 2005, Oracle.All rights reserved. Username:/ as sysdba
Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.4.0 - Beta
With the Partitioning, Oracle Label Security, OLAP, Data Mining
and Oracle Database Vault options
Starting "SYS"."SYS_EXPORT_TABLE_01": /******** AS SYSDBAtables=scott.sa-
les5:cttransportable=alwaysdirectory=data_pump_dirdumpfile=p_ct.dmp
Processing object type TABLE_EXPORT/TABLE/PLUGTS_BLK
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/END_PLUGTS_BLK
Master table "SYS"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
************************************************************************* ***
Dump file set for SYS.SYS_EXPORT_TABLE_01 is:
/home/oracle/oracle/admin/PROBE2/dpdump/p_ct.dmp
************************************************************************* *****
Datafiles required for transportable tablespace TS1:
/home/oracle/oradata/PROBE2/PROBE2/ts1_01.dbf
Job "SYS"."SYS_EXPORT_TABLE_01" successfully completed at 16:05:55
现在,可以将p_ct.dmp 和ts1_01.dmp 这两个文件传递到其他系统,然后尝试将其插入到数据库中。出于学习目的,尝试插入到相同的数据库中。首先,需要删除该表,然后删除ts1表空间。SQL>drop table scott.sales5;
Table dropped.
SQL>drop tablespace ts1 including contents;
Tablespace dropped.
现在,将表空间插入到数据库中。但这里有个小问题,sales5表不再存在,最初只导出了一个分区(ct),并未导出整个表,那么如何只导入不存在表的一个分区呢?
在 Oracle 11g中,Data Pump 导入中的一个名为partition_options的新命令行选项可实现此操作。如果指定了值departition,Data Pump将根据导出的分区创建一个新表。该方法以这种方式"拆分"分区,因此它相应地被命名为取消分区。下面看一下它的工作原理。$ impdppartition_options=departitiondumpfile=p_ct.dmp
transport_datafiles='/home/oracle/oradata/PROBE2/PROBE2
/ts1_01.dbf'
Import: Release 11.1.0.4.0 - Beta on Sunday, 10 June, 2007 21:58:08
Copyright (c) 2003, 2005, Oracle. All rights reserved.
Username: / as sysdba
Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.4.0 - Beta
With the Partitioning, Oracle Label Security, OLAP, Data Mining
and Oracle Database Vault options
Master table "SYS"."SYS_IMPORT_TRANSPORTABLE_04" successfully loaded/unloadded
Starting "SYS"."SYS_IMPORT_TRANSPORTABLE_04": /******** AS SYSDBA partit-
ion_options=departitiondumpfile=p_ct.dmptransport_datafiles=/home/orac-
le/oradata/PROBE2/PROBE2/ts1_01.dbf
Processing object type TABLE_EXPORT/TABLE/PLUGTS_BLK
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/END_PLUGTS_BLK
Job "SYS"."SYS_IMPORT_TRANSPORTABLE_04" successfully completed at 21:58:23
该SQL创建了一个名为sales5_ct的表,这个表只是由先前可传输的表空间导出的 SALES5表的ct分区,表名是原始表名和分区名的组合。可以通过检查 DBA_SEGMENTS视图来确认段的存在。SQL>select segment_name
2 from dba_segments
3 wheretablespace_name='TS1';
SEGMENT_NAME
-----------------
SALES5_CT
可以使用单个分区的可传输表空间特性将一个表的单个分区插入到其他数据库中。插入之后,人们可能希望执行交换分区操作,以便将其作为一个分区置于某个表上。
【责任编辑:云霞 TEL:(010)68476606】
点赞 0