咨询热线:13883183259
返回 Oracle教程

第四部分 附章(1)RMAN备份来创建

如果你看过三思之前的几个笔记系列,那么对于rman想必已经非常熟悉,操作这个必然也不成问题,如果你还没有看过,建议你先回去看看,然后再回来操作必然也没有问题,如果你一定不准备看,没关系,只要你严格按照实践部分的步骤操作,我相信你一定也可以创建成功,操作应该也没有问题,不过如果这样你也觉着
没有问题,那么我要告诉你,可能就这是最大的问题:不知道做过什么,不知道该做什么,不知道为什么要做,一旦需求稍变,你甚至什么都不敢做。
    你什么都不用说,我知道,你还有问题,下面,我们先来看你下意识的第一个问题,为什么要用rman创建物理standby?Oracle告诉我们,有三点:
 RMAN创建standby是通过primary的备份,因此不会对primary有任何的影响
 RMAN自动重命名OMF的文件及路径结构。
 RMAN修复归档日志文件并执行恢复以尽可能保证standby与primary数据一致相同。
    当然,我们也应该知道,上述这些都是形容词,它只是为了强化意识,说到这里再多白话几句,第一条呢还说的过去(虽然你不用rman备份,使用其它方式的备份创建standby也不会对primary造成影响),第二条第三条就完全不靠谱了,并不是说它实现不了,恰恰相反,是它描述的太基础了,形容手法有问题,我举个例子,比如你在鱼缸里看到一条鱼,你会不会形容说哇这条鱼能够在水里游耶(死鱼才不会在水里游呢)~~所以鉴别能力很重要,虽然这点我做的还很不够,但是请首长们放心,我一定会努力的,我一定会加强的,我一定会坚持的 !!!
    回到这个问题上来,为什么要用rman来创建物理standby呢,在我看来如果说有优势那么就一点:简单!
    另外在这里三思更明确的指出,使用RMAN的duplicate命令只能直接创建物理standby,幸还是不幸?


一、准备工作
    注意,在做任何操作之前,需要确认以下几点:
 拥有至少一份通过rman创建的备份;
 已经在primary数据库设置了所有相关的初始化参数;
 已经创建了standby的初始化参数文件并配置了所有相关的初始化参数;
 已经配置了实例,NetService,Listener等;
 启动standby实例到nomount状态;
    然后:
    1、通过rman创建standby的控制文件
    创建standby的控制文件前面我们提到通过sql命令,使用非常简单,使用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,logfilesequence来确定recovery的内容,如果什么都不指定,则rman一直recover到最后一个归档文件。
    9、rman自动将standby数据库打开到mount状态,同样也不会自动打开redo应用。


三、方法及步骤
    基本上,可以分成二类:
    1、相同目录结构的创建
    duplicate不同服务器相同目录结构创建standby 的操作极为简单,你即不需要动用
DB_FILE_NAME_CONVER/LOG_FILE_NAME_CONVERT之类参数,也不需要通过setnewname之类命令,
    基本步骤如下:
    1) 确保已设置standby服务器中所有相关的初始化参数。
    2) 确认备份集中文件scn大于或等于控制文件中的scn。
    3) 如果需要,可以通过set命令指定time,scn或log序号以执行不完全恢复。
    例如:setuntilscn152;
    提示:注意如果有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. SETNEWNAME命令重定义数据文件
    步骤如下:
 确保已设置standby服务器中所有相关的初始化参数。
 确认备份集中文件scn大于或等于控制文件中的scn。
 如果需要,可以通过set命令指定time,scn或log序号以执行不完全恢复。
 如果没有配置自动分配通道的话,需要手工指定至少一条辅助通道。
 通过setnewname命令为standby数据文件指定新路径
 执行duplicate命令。
    例如,脚本如下:
    RUN
    {
    #Set new file names for the datafiles
    SET NEWNAME FOR DATAFILE1 TO '?/dbs/standby_data_01.f';
    SET NEWNAME FOR DATAFILE2 TO '?/dbs/standby_data_02.f';
    . . .
    DUPLICATE TARGET DATABASE FOR STANDBY DORECOVER;
    }
    c. CONFIGUREAUXNAME命令重定义数据文件
    操作步骤皆与上同,不再详述,不过需要注意的是CONFIGUREAUXNAME命令的格式,并且configure命令不能在run块中执行,例如脚本如下:
    #set auxiliary names for the datafiles
    CONFIGURE AUXNAME FOR DATAFILE1 TO '/oracle/auxfiles/aux_1.f';
    CONFIGURE AUXNAME FOR DATAFILE2 TO '/oracle/auxfiles/aux_2.f';
    . . .
    CONFIGURE AUXNAME FOR DATAFILEn TO '/oracle/auxfiles/aux_n.f';
    DUPLICATE TARGET DATABASE FOR STANDBY;
    最后,务必注意,configureauxname命令执行是一直生效的,因此duplicate执行完之后,推荐清除CONFIGUREAUXNAME。这样就不会对未来的类似操作造成影响。
    例如:
    CONFIGURE AUXNAME FOR DATAFILE1 CLEAR;
    CONFIGURE AUXNAME FOR DATAFILE2 CLEAR;
    . . .
    CONFIGURE AUXNAME FOR DATAFILEn CLEAR;
    步骤和方法介绍完了,下面实际操作一把~~~~~~~~~~~~~