Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1200935
  • 博文数量: 350
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5668
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-23 17:53
文章分类

全部博文(350)

文章存档

2013年(350)

分类: Oracle

2013-04-24 16:29:47

前面各章从理论到实践详细论述了关于可传输表空间,还有个集(Transportable Tablespace Sets)的创建,其中都提到了很重要一点,就是被传输的表空间在传输过程中必须置为read-only。而在实际操作过程中,对于某些生产,将表空间置为read-only是件非常复杂的事情甚至完全不允许,有了RMAN的Transportable Tablespace,这一切都得以避免。RMAN通过创建可传输表空间集,它并不需要存取活动的数据文件,相应也就不需要将表空间置为read-only。因此,数据库可用性得到提升,尤其对于超大的表空间,因为被传输的表空间在此期间仍可进行读写操作,而且把表空间置为read-only模式可能会花费较长时间,

使用RMAN创建可传输表空间集,允许你在传输过程中指定目标恢复时间点或SCN,这样传输的数据可以更灵活,不必完全复制现有表空间,只要备份中存在,你就选择性的恢复数据。例如,你的备份策略为保留一周,你希望创建的可传输表空间中数据是截止本月底最后一天的数据,那么你在下个月第一周内任何时候都可以进行传输操作而不需要考虑这期间生产库是否会有写入操作

使用rman备份创建Transportable Tablespace Sets主要是通过RMAN中的TRANSPORT TABLESPACE命令完成的

提示:即使并未使用rman备份数据库,TRANSPORT TABLESPACE命令也可以用来创建transportable tablespace sets。不过,你必须有要传输的表空间集数据文件拷贝,然后使用rman的catalog命令将数据文件、归档日志等文件的拷贝载入rman资料库。只有rman拥有了所需备份才能够正常执行TRANSPORT TABLESPACE。

一、适用场合

基本上,任何需要传输表空间的情况,你都可以使用rman的TRANSPORT TABLESPACE命令去创建,只要拥有所需的备份。

二、相关

RMAN可传输表空间的结构如下图:

RMAN创建可传输表空间集与RMAN Tablespace Point-in-Time Recovery (TSPITR)极其相似,如果你有过TSPITR的操作经验,那么操作这个同样不在话下。

单枪不能成事,Oracle的霸业就是靠无数相互关联的对象以不同方式巧妙组合而成。对于创建TTS而言,RMAN仍然不是一个人在战斗,他不是一个人:

RMAN客户端(Recovery Manager client)

源库(source database),即要传输的表空间所在库。

源库归档及备份(Archived redo logs and backups)

辅助(auxiliary instance),这个大家应该都比较熟了,如果你还不了解可以参见"Duplicate创建副本数据库"系列第2章。

辅助集(auxiliary set),包括数据文件等其它传送所需但又并不是恢复集一部分的文件。例如SYSTEM表空间,Undo表空间之类。而辅助实例通常也不是一个人,它也有一些关联文件,例如控制文件、初始化参数文件、在线日志等,这些文件并不属于辅助集,虽然是起辅助目的,但它们的老主顾显然是辅助实例。

辅助文件暂存地(auxiliary destination)即辅助集所包含的对象在rman transport tablespace命令执行过程中物理存放的位置,执行完之后这些文件会被删除。

提示:auxiliary destination并非必须指定,如果不指定的话,必须确保协助实例相关的各文件在初始化参数中均已指定具体存储位置。

表空间目的地(tablespace destination),tablespace transport命令执行期间生成的传输集数据文件及其它输出文件的存储路径

可传输集(transportable set),由待传输表空间数据文件以及expdp生成的导出文件(export dump file)组成的,用于填充目标数据库表空间的集合,默认情况下,这些集合中的文件保存在表空间目的地指定路径下

RMAN自动生成的导入脚本(import script)以及expdp生成的导出日志(export  log),可传输集的一部分。

上述提到的术语在后面会反复涉及,所以大家最好能记住其概念。

三、命令格式:关于Transport Tablespaces命令

通过rman备份创建可传输表空间集避免通过源库当前活动的数据文件。同样恢复时可以恢复到备份中包含的任意时间而不会被限定仅能恢复到当前时间。其创建的工作就是由一个名为Transport Tablespaces的RMAN命令来实现,其格式如下:

Transport Tablespace命令的参数不少,不过幸运的是并不复杂,并且其参数与前面介绍的关联实体名称相同,由此仅通常参数名我们也大致能猜出所代表的意义,下面通常几个应用的示例加深一下印象:

1、最简单的可传输表空间集的创建:

transport tablespace tbs_1, tbs_2

   tablespace destination '/disk1/transportdest'

   auxiliary destination '/disk1/auxdest';

本例中,待传输表空间为tbs_1和tbs_2两个(如果待传输的表空间有多个,中间以逗号分隔),生成的可传输文件将会被存储至tablespace destination参数指定的位置,其它辅助文件生成到auxiliary destination参数指定的位置。

2、创建时指定恢复时间点

TRANSPORT TABLESPACE tbs_3 

   TABLESPACE DESTINATION '/disk1/transportdest' 

   AUXILIARY DESTINATION '/disk1/auxdest'

   UNTIL SCN 11379;

本例中,通过指定SCN的方式控制恢复的内容。

又如下例中通过指定时间控制恢复的内容:

TRANSPORT TABLESPACE tbs_2 

   TABLESPACE DESTINATION '/disk1/transportdest' 

   AUXILIARY DESTINATION '/disk1/auxdest'

   UNTIL RESTORE POINT 'before_upgrade';

指定恢复点方式控制恢复的内容:

TRANSPORT TABLESPACE tbs_2 

   TABLESPACE DESTINATION '/disk1/transportdest' 

   AUXILIARY DESTINATION '/disk1/auxdest'

   UNTIL TIME 'SYSDATE-1';

提示:需要注意指定的恢复时间点必须存在于备份的redo log或归档文件中。

3、创建时指定文件的生成路径:

TRANSPORT TABLESPACE tbs_2

   TABLESPACE DESTINATION '/disk1/transportdest'

   AUXILIARY DESTINATION '/disk1/auxdest'

   DATAPUMP DIRECTORY ttsdir

   DUMP FILE 'dmpfile.dmp'

   IMPORT SCRIPT 'impscript.sql'

   EXPORT LOG 'explog.log';

只要你想,就可以。默认情况下:

DATAPUMP DIRECTORY参数指定已定义的DIRECTORY:ttsdir

DUMP FILE参数指定元数据文件,命名为:dmpfile.dmp

IMPORT SCRIPT参数指定导入脚本,命名为:impscript.sql

EXPORT LOG参数指定导出日志文件,命名为:explog.log

dmpfile.dmp及explog.log文件会自动存储到ttsdir指向的物理路径,其它文件均被生成到/disk1/transportdest目录内。

四、创建流程

小学时候的语文课,打三年级开始,老师就会教我们给课文分段,三思不才,每次分段不管文章有多长都是三分法(俺还真是跟三有猿奋啊),开头一段,结尾一段,其它的都算中间段。

RMAN创建TTS的步骤嘛,也分三步吧:

1、启动辅助实例

首先启动辅助实例到nomount模式,当然启动之前你得先创建好初始化参数文件。然后从备份中恢复控制文件到初始化参数文件中指定的控制文件所在路径,直接拷过来也靠谱(前提是源库和目标库的操作系统一致),加载辅助实例到mount模式。

2、恢复辅助实例

一旦辅助实例中控制文件被正确加载,RMAN从备份中恢复辅助集和可传输集相关的数据文件,存储辅助文件到指定的辅助文件暂存地,可传输集文件存储到表空间目的地。然后RMAN在辅助实例执行switch操作加载数据文件。

然后TRANSPORT DATABASE命令按指定的时间点对辅助实例进行恢复(如未指定目标时间,则执行完全恢复),所有辅助文件暂存地中的可用归档日志都将被用于恢复操作,并会在应用后自动删除这些文件。

一旦恢复完成,RMAN将以resetlogs方式加载辅助数据库。

3、将辅助实例看做源库应用传输表空间。

将辅助实例中待恢复的表空间置为read-only模式,并调用expdp生成表空间原数据的导出文件。导出文件一般都保存在表空间目的地(当然,你也可以指定dp文件的保存路径,后面会有介绍)

此时,RMAN自动生成导入脚本。脚本自动被保存在表空间目的地指定路径下,并命名为impscript.sql。

所有的操作都成功执行之后,RMAN将shutdown辅助实例并删除TRANSPORT TABLESPACE命令执行过程中创建的除数据文件dmp文件,expdp日志和impscript.sql其它临时文件

提示:

TRANSPORT TABLESPACE命令执行过程中,恢复集文件并不会自动转换到目标数据库的endian格式。如果需要转换,你必须在创建可传输集前使用rman的convert命令转换数据文件到目标数据库的endian格式。

如果impdp导入脚本不在TRANSPORT TABLESPACE命令默认生成路径下,要注意更新脚本位置。

是不是觉着步骤超级多,使用超复杂,甚至一度对其实用性有了怀疑,实际操作完全没有这么复制。特别是10g之后,只需要执行一个transport tablespace命令,并通过auxiliary destination参数指定临时辅助文件的存放位置,RMAN会自动创建和销毁auxiliary database,非常方便。

五、注意事项

如果你决定使用RMAN备份创建可传输表空间地话,除了记住前面我们提到过的关于可传输表空间特性应用的限制之外呢,你又得将自己的脑袋置为read-write状态了,这个明显是黑正常的嘛,应用的技术越多,可能碰到的问题也会越多,相应需要注意的地方也越多,花费的精力也越大,哎,无数干技术活的(非特指IT)脑袋就是这么秃地呀~~~~~

必须拥有执行TRANSPORT TABLESPACE操作所需的所有相关的表空间的备份以及归档日志文件。

提示:即使RMAN不是你备份策略的一部分,你也仍可能使用TRANSPORT TABLESPACE命令,只要所需的数据文件和归档日志均可被rman有效访问。

因为rman创建transportable tablespaces需与expdp和impdp配合使用,因此不能传输含XMLTypes的表空间。

由于rman会在相同节点上创建自动辅助实例做为源实例用于修复、恢复操作,这在TRANSPORT TABLESPACE命令执行期间会造成一定的性能开销

如果你删除或重命名了一个表空间,那就不能在之后又使用TRANSPORT TABLESPACE试图传输包含了该表空间的可传输表空间集。

对于有关联约束关系的表必须同时传输。

transportable set(可传输集)和auxiliary set(辅助集)数据文件都不能包含下列的类型:

复制主表

分区表

含VARRAY类型列的表,嵌套表或扩展文件

快照记录或快照表

含undo或rollback segments的表空间,或含SYS对象的表空间。

如果你在nocatalog模式下执行TRANSPORT TABLESPACE命令,还会有下列的限制:

如果过去创建一个传输集做为一个时间点,那么在TRANSPORT TABLESPACE执行时,源库表空间回滚段必须与传输集中表空间回滚段时间点相同。

包括回滚段的表空间做为目标SCN在TRASNPORT TABLESPACE操作中必须是auxiliary set的一部分。不像在catalog模式,rman资料库在控制文件中只包含那些包括回滚段的表空间。

如果数据库重用了控制文件中TRANSPORT TABLESPACE命令所需的备份信息,则命令会失败,因为RMAN不能定位需要的备份文件位置。你得通过catalog命令将这些备份文件加入rman资料库中。如果数据库已经重写了控制文件,那么很不幸你可能就会丢失这部分备份了。

阅读(663) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~