Decode360's Blog

业精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

  BlogJava :: 首页 :: 新随笔 :: 联系 ::  :: 管理 ::
  397 随笔 :: 33 文章 :: 29 评论 :: 0 Trackbacks
本文作者: junsansi     转载网址: http://www.5ienet.com/index.shtml
 
 
第四部分附章(1)RMAN备份来创建  2008.01.22

    如果你看过三思之前的几个笔记系列,那么对于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,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 命令重定义数据文件
 
    步骤如下:
    ● 确保已设置standby 服务器中所有相关的初始化参数。
    ● 确认备份集中文件scn 大于或等于控制文件中的scn。
    ● 如果需要,可以通过set 命令指定time,scn 或log 序号以执行不完全恢复。
    ● 如果没有配置自动分配通道的话,需要手工指定至少一条辅助通道。
    ● 通过set newname 命令为standby 数据文件指定新路径
    ● 执行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;

 
 
    步骤和方法介绍完了,下面实际操作一把~~~~~~~~~~~~~
 
 
 
posted on 2009-03-02 22:12 decode360 阅读(203) 评论(0)  编辑  收藏 所属分类: 10.DB_Tools

只有注册用户登录后才能发表评论。


网站导航: