ITPub博客

首页 > 数据库 > Oracle > Oracle传输表空间(TTS)

Oracle传输表空间(TTS)

原创 Oracle 作者:llnnmc 时间:2017-06-28 14:58:19 0 删除 编辑

数据泵导出/导入的变体是表空间传输功能。通过这一功能,可以将整个表空间和其内容从一个数据库复制到另一个数据库。基本步骤如下:

  • 使源表空间只读
  • 使用 Data Pump 导出描述表空间和内容的元数据
  • 将数据文件和 Data Pump 导出文件复制到目标系统
  • 使用 Data Pump 导入元数据
  • 使源和目标上的表空间可读写

 

在将表空间从一个平台传输到另一个平台时需要的额外一步是,转换数据的字节序格式。大字节序以高位字节优先方式存储多字节值,小字节序则首先存储最低字节。要跨有着不同字节序格式的平台传输表空间要求转换数据文件,使用RMAN的CONVERT命令完成。

 

要确定当前数据库系统的运行平台和字节序,可以将视图v$database和v$transportable_platform结合查询

col platform_name for a40

select db.platform_name, tp.endian_format from v$database db, v$transportable_platform tp where db.platform_name = tp.platform_name;

 

PLATFORM_NAME                            ENDIAN_FORMAT

---------------------------------------- --------------

Microsoft Windows x86 64-bit             Little

 

在传输表空间时,有一些限制:

  • 表空间应该是自包含的,表空间中的对象不依赖于任何其他对象。

常见的以下情况是违反自包含原则的:

1)索引在内部表空间集,而表在外部表空间集(相反地,如果表在内部表空间集,而索引在外部表空间集,则不违反自包含原则)。

2)分区表一部分在内部表空间集,一部分在外部表空间集(对于分区表,要么全部包含在内部表空间集中,要么全不包含)。

3)如果在传输表空间时同时传输约束,则对于引用完整性约束,如约束指向的表在外部表空间集,则违反自包含,如果不传输约束,则与约束指向无关。

4)表在内部表空间集,而lob列在外部表空间集,则违反自包含。

  • 目标数据库必须使用和源数据库一样或兼容的字符集。
  • 拥有表空间中的对象的模式必须建立在目标数据库中,否则操作将失败。
  • 目标数据库中与可传输表空间集合中的对象有着相同的所有者和对象名的对象将不会丢失,在导入时将被忽略。
  • 不能存在同名的表空间,可以重命名表空间。

 

以下例子显示如何进行表空间的传输:

 

1、检查表空间是否为自包含,违反自包含规则的信息写入到临时表TRANSPORT_SET_VIOLATIONS中:

exec dbms_tts.transport_set_check('CMES');

PL/SQL 过程已成功完成。

 

执行成功即表明没有违反规则的情况,可以查看临时表信息

select * from TRANSPORT_SET_VIOLATIONS;

未选定行

 

2、修改源表空间为只读:

alter tablespace cmes read only;

表空间已更改。

 

3、导出描述表空间和内容的元数据:

expdp system/mesHz2 transport_tablespaces=cmes dumpfile=my_dir:cmes.dmp

 

Export: Release 11.2.0.1.0 - Production on 星期五 8月 5 10:31:33 2016

 

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

 

连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

启动 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01":  system/******** transport_tablespaces=cmes dumpfile=cmes.dmp directory=my_dir

处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK

处理对象类型 TRANSPORTABLE_EXPORT/TABLE

处理对象类型 TRANSPORTABLE_EXPORT/GRANT/OWNER_GRANT/OBJECT_GRANT

处理对象类型 TRANSPORTABLE_EXPORT/INDEX

处理对象类型 TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINT

处理对象类型 TRANSPORTABLE_EXPORT/INDEX_STATISTICS

处理对象类型 TRANSPORTABLE_EXPORT/COMMENT

处理对象类型 TRANSPORTABLE_EXPORT/TABLE_STATISTICS

处理对象类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK

已成功加载/卸载了主表 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01"

******************************************************************************

SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 的转储文件集为:

  D:\CMES.DMP

******************************************************************************

可传输表空间 CMES 所需的数据文件:

  D:\ORADATA\MES\CMES01.DBF

作业 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" 已于 10:32:12 成功完成

 

4、在源表空间仍是只读的情况下,将其数据文件复制到目标机器数据文件所在的位置,将Data Pump转储文件复制到目标机器指定的Oracle目录。

 

5、如果目标数据库位于一个字节序格式与源数据库不同的平台上,则用RMAN连接目标数据库,运行如下命令:

RMAN> convert datafile 'd:\oradata\mes\cmes01.dbf' from platform='Linux IA (32-bit)' format 'd:\oradata\mes\cmes01cnv.dbf';

该命令将读取指定的数据文件,并将其由指定的平台格式转换为目标数据库所要求的新的文件格式。

 

6、导入目标系统表空间:

impdp system/mesHz2 dumpfile=my_dir:cmes.dmp transport_datafiles=d:\oradata\mes\cmes01.dbf

 

Import: Release 11.2.0.1.0 - Production on 星期五 8月 5 11:08:59 2016

 

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

 

连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

已成功加载/卸载了主表 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01"

启动 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01":  system/********@mes dumpfile=cmes.dmp transport_datafiles=d:\oradata\mes\cmes01.dbf directory=my_dir

处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK

处理对象类型 TRANSPORTABLE_EXPORT/TABLE

处理对象类型 TRANSPORTABLE_EXPORT/GRANT/OWNER_GRANT/OBJECT_GRANT

处理对象类型 TRANSPORTABLE_EXPORT/INDEX

处理对象类型 TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINT

处理对象类型 TRANSPORTABLE_EXPORT/INDEX_STATISTICS

处理对象类型 TRANSPORTABLE_EXPORT/COMMENT

处理对象类型 TRANSPORTABLE_EXPORT/TABLE_STATISTICS

处理对象类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK

作业 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" 已于 11:09:15 成功完成

 

7、恢复源数据库和目标数据库上表空间的可读写:

alter tablespace cmes read write;

表空间已更改。

 

注意,非传输表空间中的东西无法传递进来,如存储过程、序列、触发器、函数、类型、视图等,他们并不在用户的表空间中,而存在于数据字典中。

 

可传输表空间的通用性使得可以将整个数据库从一台计算机传输到另一台计算机。对比RMAN虽然也可以创建一个数据库,但新数据库只可以位于与源数据库相同的平台上,利用RMAN的备份和还原不能跨平台。而传输数据库利用可传输表空间的功能,可以跨平台。该技术就是通过适当的转换将所有数据文件复制到新机器上,用新的参数文件启动实例,并创建新的控制文件和联机日志文件。

 


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28974745/viewspace-2141344/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Oracle约束
请登录后发表评论 登录
全部评论
刘鲁宁的个人博客。

注册时间:2016-12-29

  • 博文量
    113
  • 访问量
    287700