2013年(350)
分类: Oracle
2013-04-25 10:29:21
如果你看过三思之前的几个笔记系列,那么对于rman想必已经非常熟悉,操作这个必然也不成问题,如果你还没有看过,建议你先回去看看,然后再回来操作必然也没有问题,如果你一定不准备看,没关系,只要你严格按照实践部分的步骤操作,我相信你一定也可以创建成功,操作应该也没有问题,不过如果这样你也觉着没有问题,那么我要告诉你,可能就这是最大的问题:不知道做过什么,不知道该做什么,不知道为什么要做,一旦需求稍变,你甚至什么都不敢做。
你什么都不用说,我知道,你还有问题,下面,我们先来看你下意识的第一个问题,为什么要用rman创建物理standby?告诉我们,有三点:
l RMAN创建standby是通过primary的,因此不会对primary有任何的影响
l RMAN自动重命名OMF的文件及路径结构。
l RMAN修复归档日志文件并执行恢复以尽可能保证standby与primary数据一致相同。
当然,我们也应该知道,上述这些都是形容词,它只是为了强化意识,说到这里再多白话几句,第一条呢还说的过去(虽然你不用rman备份,使用其它方式的备份创建standby也不会对primary造成影响),第二条第三条就完全不靠谱了,并不是说它实现不了,恰恰相反,是它描述的太基础了,形容手法有问题,我举个例子,比如你在鱼缸里看到一条鱼,你会不会形容说哇这条鱼能够在水里游耶(死鱼才不会在水里游呢)~~所以鉴别能力很重要,虽然这点我做的还很不够,但是请首长们放心,我一定会努力的,我一定会加强的,我一定会坚持的!!!
回到这个问题上来,为什么要用rman来创建物理standby呢,在我看来如果说有优势那么就一点:简单!
另外在这里三思更明确的指出,使用RMAN的duplicate命令只能直接创建物理standby,幸还是不幸?
一、准备工作
注意,在做任何操作之前,需要确认以下几点:
l 拥有至少一份通过rman创建的备份;
l 已经在primary数据库设置了所有相关的初始化参数;
l 已经创建了standby的初始化参数文件并配置了所有相关的初始化参数;
l 已经配置了实例,NetService,Listener等;
l 启动standby实例到nomount状态;
然后:
1、通过rman创建standby的控制文件
创建standby的控制文件前面我们提到通过命令,使用非常简单,使用rman命令创建与之同理,并且有两种方式创建演示如下:
1).
RMAN> backup current controlfile for standby;
2).
RMAN> copy current controlfile for standby to 'e:\ora10g\oradata\jssrman\JSSRMAN01.CTL';
2、定制standby数据(日志)文件重命名策略
为什么oracle要提供重命名策略呢?因为dg配置非常灵活,standby甚至可以与primary在同一个。
什么时候需要应用重命名策略呢?如果standby与primary在同一台服务器,或虽然不在同一台服务器,但standby的目录结构与primary不同,这两种情况下,都必须应用重命名策略。如果standby与primary不在同一台服务器,并且目录结构相同,那就不需要应用重命名策略。
如何应用重命名策略呢?多种方式,比如我们的老朋友初始化参数:db_file_name_convert,log_file_name_convert。还有rman命令SET NEWNAME 或CONFIGURE AUXNAME等等,这些相关参数、命令的应用我们都在"Duplicate复制数据库"系列中介绍并应用过,后面还会再次提及。
二、大致流程
通常情况下,rman创建完standby之后不会自动执行recover。
如果你执行duplicate命令时没有指定dorecover参数,则rman自动按照下面的步骤操作:
1、RMAN连接standby与primary,及catalog(如果使用了的话);
2、检索catalog(nocatalog的话是primary数据库的控制文件),确定primary的备份以及standby控制文件;
3、如果使用介质恢复,RMAN需要连接介质器以获取所需备份数据;
4、恢复standby控制文件到standby服务器;
5、恢复primary数据库备份集中相应数据文件到standby服务器;
6、rman自动将standby数据库打开到mount状态,不过不会自动打开redo应用。
如果执行duplicate命令时指定了dorecover参数,则rman会在执行完第5步后,接着执行下列的操作:
7、在所有数据都restored之后,rman自动执行recovery,如果recovery过程需要归档文件,但是这些文件又不在本地盘,则rman会尝试从备份中获取。
8、rman执行recovery之前,你可以通过指定time,scn,logfile sequence来确定recovery的内容,如果什么都不指定,则rman一直recover到最后一个归档文件。
9、rman自动将standby数据库打开到mount状态,同样也不会自动打开redo应用。
三、方法及步骤
基本上,可以分成二类:
1、相同目录结构的创建
duplicate不同服务器相同目录结构创建standby的操作极为简单,你即不需要动用DB_FILE_NAME_CONVER/LOG_FILE_NAME_CONVERT之类参数,也不需要通过set newname之类命令,基本步骤如下:
1) 确保已设置standby服务器中所有相关的初始化参数。
2) 确认备份集中文件scn大于或等于控制文件中的scn。
3) 如果需要,可以通过set命令指定time,scn或log序号以执行不完全恢复。
例如:set until scn 152;
提示:注意如果有set,则set与duplicate必须在同一个run命令块中。
4) 如果没有配置自动分配通道的话,需要手工指定至少一条辅助通道。
5) 务必指定nofilenamecheck参数,我们之前"duplicate复制数据库"系列中就曾提到过,异机操作路径相同还必需指定NOFILENAMECHECK。因为此处oracle表现的很傻,它不知道你要恢复的路径是在另一台机器上,它只是认为要恢复到的路径怎么跟目标数据库表现的一样呢?会不会是要覆盖目标数据库啊,为了避免这种情形,于是它就报错。所以一旦异机恢复,并且路径相同,那么你必须通过指定NOFILENAMECHECK来避免oracle的自动识别。
例如脚本如下:
sql> duplicate target database for standby nofilenamecheck dorecover;
注意,dorecover并非是必须参数,如果你不指定的话,则duplicate修复数据文件到服务器,并自动将standby启动到mount状态,不过并不会执行恢复操作。
2、不同目录结构的创建
对于不同目录结构创建standby(与是否同一台服务器就基本无关了),你需要对数据文件和日志文件路径重新定义,那你的选择可就多多了哟:
a. 使用初始化参数重定义数据文件及日志文件
关于db_file_name_convert和log_file_name_convert两个初始化参数的本领和套路大家已经都很熟悉了,所以呢这里就不多做介绍。duplicate命令在此处执行的时候与相同目录结构执行也没什么不同,所以,你可以认为,这是不同路径下创建standby中,最简单的方式。
b. SET NEWNAME命令重定义数据文件
步骤如下:
l 确保已设置standby服务器中所有相关的初始化参数。
l 确认备份集中文件scn大于或等于控制文件中的scn。
l 如果需要,可以通过set命令指定time,scn或log序号以执行不完全恢复。
l 如果没有配置自动分配通道的话,需要手工指定至少一条辅助通道。
l 通过set newname命令为standby数据文件指定新路径
l 执行duplicate命令。
例如,脚本如下:
RUN
{
# Set new file names for the datafiles
SET NEWNAME FOR DATAFILE 1 TO '?/dbs/standby_data_01.f';
SET NEWNAME FOR DATAFILE 2 TO '?/dbs/standby_data_02.f';
. . .
DUPLICATE TARGET DATABASE FOR STANDBY DORECOVER;
}
c. CONFIGURE AUXNAME命令重定义数据文件
操作步骤皆与上同,不再详述,不过需要注意的是CONFIGURE AUXNAME命令的格式,并且configure命令不能在run块中执行,例如脚本如下:
# set auxiliary names for the datafiles
CONFIGURE AUXNAME FOR DATAFILE 1 TO '/oracle/auxfiles/aux_1.f';
CONFIGURE AUXNAME FOR DATAFILE 2 TO '/oracle/auxfiles/aux_2.f';
. . .
CONFIGURE AUXNAME FOR DATAFILE n TO '/oracle/auxfiles/aux_n.f';
DUPLICATE TARGET DATABASE FOR STANDBY;
最后,务必注意,configure auxname命令执行是一直生效的,因此duplicate执行完之后,推荐清除CONFIGURE AUXNAME。这样就不会对未来的类似操作造成影响。
例如:
CONFIGURE AUXNAME FOR DATAFILE 1 CLEAR;
CONFIGURE AUXNAME FOR DATAFILE 2 CLEAR;
. . .
CONFIGURE AUXNAME FOR DATAFILE n CLEAR;
步骤和方法介绍完了,下面实际操作一把~~~~~~~~~~~~~