技术开发 频道

使用可传输表空间的特性复制数据


二、选择自包含的表空间集(Pick a Self-Contained Set of Tablespaces)
    待传输的表空间集中对象可能会存在与其它对象逻辑或物理上的关联,但这里我们要强调的就是可传输的表空间集必须是自包含的,前面我们提到使用DBMS_TTS包的TRANSPORT_SET_CHECK过程来验证待传输表空间集是否自包含,TRANSPORT_SET_CHECK过程可以以两种方式执行:非严格方式和严格方式。 

    提示,使用sys用户执行DBMS_TTS包的过程,或者是被赋于EXECUTE_CATALOG_ROLE角色的用户。 
    严格方式验证就是在调用TRANSPORT_SET_CHECK过程时指定FULL_CHECK参数为TRUE。严格方式不只检查表空间集引用的对象是否自包含,同时会检查被其它表空间引用的对象,引用者是否在表空间集中。
    文字太绕口,以本次演示中要传输的表空间为例。 
    表空间jssweb有表DEPT,其索引DEPT.IDX_DEPT_DEPTNO在users表空间。    
SQL> exec dbms_tts.transport_set_check('jssweb', TRUE); PL/SQL 过程已成功完成。 SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS; 未选定行

如果表空间集满足自包含检查,则视图返回空记录。
执行严格方式的检查:

SQL> exec dbms_tts.transport_set_check('jssweb', TRUE , TRUE); PL/SQL 过程已成功完成。 SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS; VIOLATIONS -------------------------------------------------------------------------------- Index JSS.IDX_DEPT_DEPTNO in tablespace USERS points to table JSS.DEPT in tables pace JSSWEB

    不满足自包含验证,SELECT语句返回违反的信息,你可以根据其提示进行修正。
    提示:如果要检查的表空间有多个,相互之间以逗号分隔即可。

三、生成可传输表空间集(Generate a Transportable Tablespace Set) 
    执行export操作的用户需要被赋于EXP_FULL_DATABASE 角色。
再次提示,生成可传输表空间集之前,必须将要传输的表空间置为read-only,不然你就得选择通过RMAN备份生成表空间集了。

确认所选择的表空间都是自包含之后,按照下列步骤进行操作。
1、将表空间置为READ-ONLY;
SQL> ALTER TABLESPACE JSSWEB READ ONLY;

表空间已更改。

2、使用Data Dump导出表空间集元数据    

SQL> host 进入操作系统命令行 E:\ORA10G>expdp system/verysafe DUMPFILE=expdp_jssweb.dmp DIRECTORY=DATA _PUMP_DIR TRANSPORT_TABLESPACES=jssweb ..................................... ..................................... 启动 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01": system/******** DUMPFILE=expdp_jssweb.dmp DIRECTORY=DA TA_PUMP_DIR TRANSPORT_TABLESPACES=jssweb 处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK 处理对象类型 TRANSPORTABLE_EXPORT/TABLE 处理对象类型 TRANSPORTABLE_EXPORT/INDEX 处理对象类型 TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINT 处理对象类型 TRANSPORTABLE_EXPORT/COMMENT 处理对象类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK 已成功加载/卸载了主表 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" ****************************************************************************** SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 的转储文件集为: E:\ORA10G\PRODUCT\10.2.0\ADMIN\JSSWEB\DPDUMP\EXPDP_JSSWEB.DMP 作业 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" 已于 10:54:43 成功完成

 这里简单介绍一下本例中调用的参数:
 DUMPFILE:表示导出文件的文件名
 DIRECTORY:这个DIRECTORY所指可并不是实际的物理目录哟,它是物理路径在oracle中的一个别名,这样一旦你需要调用路径就非常方便,不需要写繁长的路径,修改路径的时候也同样很方便,只需要修改directory别名这一处即可。在10g中默认创建了一个名为DATA_PUMP_DIR,其路径指向到:$ORACLE_BASE\10.2.0\admin\SID NAME\dpdump,此处我们直接引用。
 TRANSPORT_TABLESPACES:对于TTS操作这是个必须指定的参数,指定要传输的表空间。
 TRANSPORT_FULL_CHECK:如果你希望执行严格自包含导出的话,可以指定本参数值为Y。
      EXPDP的参数还有很多,要查看其全部参数,可以通过调用expdp help=y的方式获得,如果想明确各参数的详细解释,可以参考Oracle® Database Utilities。

    提示:EXPDP只是导出的待传输表空间的目录结构信息(元数据),并不包含实际数据,因此导出的速度非常快,而且文件也很小,所以千万表看到它很小,就以为导出的文件有问题。

3、如果两平台间的字节顺序不一致的话,中间需要有个转换过程,前章操作步骤里也曾深入分析过,我们此次演示中不存在字节顺序不一致的问题,所以此步跳过,留待后续展现。

0
相关文章