Decode360's Blog

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

  BlogJava :: 首页 :: 新随笔 :: 联系 ::  :: 管理 ::
  302 随笔 :: 26 文章 :: 82 评论 :: 0 Trackbacks
本文作者: junsansi     转载网址: http://www.5ienet.com/index.shtml
 
 
第四部分附章(2)RMAN备份来创建之实践  2008.01.28

    目标:通过rman 备份,在同一台服务器创建standby,primary 数据库名为jssweb,要创建的standby,db_unique_name 命名为jssrman,因为是在同一台服务器,所以需要对standby 的数据文件和日志文件路径做下重定义,这里我们选择通过初始化参数的形式重定义文件路径。
 
一、做好准备工作

1、创建standby 实例

    需要首先通过ORADIM 命令创建一个新的OracleService,非windows 环境可以跳过这一步。

    E:\ora10g>oradim -new -sid jssrman
    实例已创建。
    E:\ora10g>set oracle_sid=jssrman
    E:\ora10g>sqlplus "/ as sysdba"
    .............


    顺手配置一下监听,修改tnsname.ora 之类,此处不做演示。
 
2、创建standby 的初始化参数文件

    没必要完全重建,首先根据primary 的spfile 生成一个pfile 出来,然后比着改改就是了。例如:
 
    在primary 数据库执行,注意是primary 数据库:

    SQL> create pfile='E:\ora10g\product\10.2.0\db_1\database\INITjssrman.ora' from spfile;

 
    用任意文本编辑器打开INITjssrman.ora,注意修改相关的化参数,此例中主要修改下列属性:

    *.audit_file_dest='e:\ora10g\product\10.2.0\admin\jssrman\adump'
    *.background_dump_dest='e:\ora10g\product\10.2.0\admin\jssrman\bdump'
    *.control_files='E:\ora10g\oradata\jssrman\control01.ctl',

                    'E:\ora10g\oradata\jssrman\control02.ctl',

                    'E:\ora10g\oradata\jssrman\control03.ctl'
    *.core_dump_dest='e:\ora10g\product\10.2.0\admin\jssrman\cdump'
    *.DB_FILE_NAME_CONVERT='oradata\jssweb','oradata\jssrman'
    *.db_name='jssweb'
    *.DB_UNIQUE_NAME='jssrman'
    *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(jssweb,jsspdg,jssrman)'
    *.LOG_ARCHIVE_DEST_1='LOCATION=E:\ora10g\oradata\jssrman\VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=jssrman'
    *.LOG_ARCHIVE_DEST_STATE_1='ENABLE'
    *.LOG_FILE_NAME_CONVERT='oradata\jssweb','oradata\jssrman'
    *.standby_file_management='AUTO'
    *.user_dump_dest='e:\ora10g\product\10.2.0\admin\jssrman\udump'


    注意,由于此standby 数据库不考虑切换,因为不再配置fal_*,等相关初始化参数。
    然后通过该pfile 创建standby 的spfile,注意是在standby 数据库执行:

    SQL> create spfile from pfile='E:\ora10g\product\10.2.0\db_1\database\initjssrman.ora';

 
3、启动standby 到nomount 状态

    SQL> startup nomount
    ORACLE 例程已经启动。
    Total System Global Area 167772160 bytes
    .....................

 
4、创建standby 的密码文件

    注意保持密码与primary 数据库相同,非常重要。

    E:\ora10g>orapwd file=e:\ora10g\product\10.2.0\db_1\database\PWDjssrman.ora password=verysafeentries=30

 
 
二、进行创建工作

1、连接primary 和standby

    注意连接standby 的时候前面指定auxiliary

    E:\ora10g>set oracle_sid=jssweb
    E:\ora10g>rman target/auxiliary
sys/tfad04@jssrman
    恢复管理器: Release 10.2.0.3.0 - Production on 星期三1 月30 13:53:13 2008
    Copyright (c) 1982, 2005, Oracle. All rights reserved.
    已连接到目标数据库: JSSWEB (DBID=3408827880, 未打开)
    已连接到辅助数据库: JSSWEB (未装载)

 
2、创建standby 的控制文件。

    我们之前都操作过通过sql 命令创建standby 的控制文件,这次换一换,在rman 中创建standby 的控制文件。

    RMAN> copy current controlfile for standby to 'e:\ora10g\oradata\jssrman\control01.ctl';


    启动backup 于29-1 月-08
    使用目标数据库控制文件替代恢复目录
    分配的通道: ORA_DISK_1
    通道ORA_DISK_1: sid=157 devtype=DISK
    通道ORA_DISK_1: 启动数据文件副本
    复制备用控制文件
    输出文件名= E:\ORA10G\ORADATA\JSSRMAN\CONTROL01.CTL 标记= TAG20080129T150422 recid = 6 时间戳= 645289463
    通道ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:03
    完成backup 于29-1 月-08


    启动Control File and SPFILE Autobackup 于29-1 月-08
    段handle=D:\BACKUP\C-3408827880-20080129-00 comment=NONE
    完成Control File and SPFILE Autobackup 于29-1 月-08

 
3、生成standby 数据库

    由于我们此时的备份集是刚刚的,所以在执行duplicate 命令时并不需要指定dorecover 子句,而且我们采用了通过db_file_name_convert 等初始化参数的方式重定义数据文件和日志文件路径,因为执行的命令就非常简单,就这是我们前面说的,不同路径下创建standby 中,最简单的方式:

    RMAN> duplicate target database for standby;


    启动Duplicate Db 于30-1 月-08
    使用目标数据库控制文件替代恢复目录
    分配的通道: ORA_AUX_DISK_1
    通道ORA_AUX_DISK_1: sid=155 devtype=DISK

    内存脚本的内容:
    {
        restore clone standby controlfile;
        sql clone 'alter database mount standby database';
    }

    正在执行内存脚本

    启动restore 于30-1 月-08
    使用通道ORA_AUX_DISK_1

    通道ORA_AUX_DISK_1: 正在复原控制文件
    通道ORA_AUX_DISK_1: 已复制控制文件副本
    输出文件名=E:\ORA10G\ORADATA\JSSRMAN\CONTROL01.CTL
    输出文件名=E:\ORA10G\ORADATA\JSSRMAN\CONTROL01.CTL
    输出文件名=E:\ORA10G\ORADATA\JSSRMAN\CONTROL02.CTL
    输出文件名=E:\ORA10G\ORADATA\JSSRMAN\CONTROL03.CTL
    完成restore 于30-1 月-08


    sql 语句: alter database mount standby database
    释放的通道: ORA_AUX_DISK_1


    内存脚本的内容:
    {
        set newname for tempfile 1 to
    "E:\ORA10G\ORADATA\JSSRMAN\TEMP01.DBF";
        switch clone tempfile all;
        set newname for datafile 1 to
    "E:\ORA10G\ORADATA\JSSRMAN\SYSTEM01.DBF";
        set newname for datafile 2 to
    "E:\ORA10G\ORADATA\JSSRMAN\UNDOTBS01.DBF";
        set newname for datafile 3 to
    "E:\ORA10G\ORADATA\JSSRMAN\SYSAUX01.DBF";
        set newname for datafile 4 to
    "E:\ORA10G\ORADATA\JSSRMAN\USERS01.DBF";
        set newname for datafile 5 to
    "E:\ORA10G\ORADATA\JSSRMAN\TBSWEB01.DBF";
        restore
        check readonly
        clone database
        ;
    }


    正在执行内存脚本
    正在执行命令: SET NEWNAME
    临时文件1 在控制文件中已重命名为E:\ORA10G\ORADATA\JSSRMAN\TEMP01.DBF
    正在执行命令: SET NEWNAME
    正在执行命令: SET NEWNAME
    正在执行命令: SET NEWNAME
    正在执行命令: SET NEWNAME
    正在执行命令: SET NEWNAME
    启动restore 于30-1 月-08
    分配的通道: ORA_AUX_DISK_1
    通道ORA_AUX_DISK_1: sid=155 devtype=DISK


    通道ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
    通道ORA_AUX_DISK_1: 正在指定从备份集恢复的数据文件
    正将数据文件00001 恢复到E:\ORA10G\ORADATA\JSSRMAN\SYSTEM01.DBF
    正将数据文件00002 恢复到E:\ORA10G\ORADATA\JSSRMAN\UNDOTBS01.DBF
    正将数据文件00003 恢复到E:\ORA10G\ORADATA\JSSRMAN\SYSAUX01.DBF
    正将数据文件00004 恢复到E:\ORA10G\ORADATA\JSSRMAN\USERS01.DBF
    正将数据文件00005 恢复到E:\ORA10G\ORADATA\JSSRMAN\TBSWEB01.DBF
    通道ORA_AUX_DISK_1: 正在读取备份段D:\BACKUP\04J6V1SJ_1_1
    通道ORA_AUX_DISK_1: 已恢复备份段1
    段句柄= D:\BACKUP\04J6V1SJ_1_1 标记= TAG20080124T111011
    通道ORA_AUX_DISK_1: 恢复完成, 用时: 00:00:57
    完成restore 于30-1 月-08


    内存脚本的内容:
    {
        switch clone datafile all;
    }


    正在执行内存脚本
    数据文件1 已转换成数据文件副本
    输入数据文件副本recid=11 stamp=645372185 文件名=E:\ORA10G\ORADATA\JSSRMAN\SYSTEM01.DBF
    数据文件2 已转换成数据文件副本
    输入数据文件副本recid=12 stamp=645372185 文件名=E:\ORA10G\ORADATA\JSSRMAN\UNDOTBS01.DBF
    数据文件3 已转换成数据文件副本
    输入数据文件副本recid=13 stamp=645372186 文件名=E:\ORA10G\ORADATA\JSSRMAN\SYSAUX01.DBF
    数据文件4 已转换成数据文件副本
    输入数据文件副本recid=14 stamp=645372186 文件名=E:\ORA10G\ORADATA\JSSRMAN\USERS01.DBF
    数据文件5 已转换成数据文件副本
    输入数据文件副本recid=15 stamp=645372186 文件名=E:\ORA10G\ORADATA\JSSRMAN\TBSWEB01.DBF

    完成Duplicate Db 于30-1 月-08

 
4、重建standby 临时表空间数据文件
 
    提示:本步非必须,如果该standby 不会切换为primary 并且也不会有查询需求,就不必创建!
 
 
三、完成善后工作

    善后工作通常很不起眼但是很重要,
 
1、修改primary 数据库中的相关参数

    SQL> show parameter db_unique
    NAME                 TYPE        VALUE
    -------------------- ----------- ----------------
    db_unique_name       string      jssweb
    SQL> set sqlprompt Jssweb>


    Jssweb> alter system set log_archive_config='DG_CONFIG=(jssweb,jsspdg,jssrman)';
    系统已更改。
    Jssweb> alter system set log_archive_dest_3='SERVICE=jssrman lgwr async
    valid_for=(online_logfiles,primary_role) db_unique_name=jssrman';
    系统已更改。
    Jssweb> alter system set log_archive_dest_state_3=enable;
    系统已更改。

 
2、考虑到为保证切换后,dg 仍能正常运转,同时修改待切换的standby 数据库初始化参数

    SQL> show parameter db_unique
    NAME                 TYPE        VALUE
    -------------------- ----------- ----------------
    db_unique_name       string      jsspdg
    SQL> set sqlprompt Jsspdg>


    Jsspdg> alter system set log_archive_config='DG_CONFIG=(jssweb,jsspdg,jssrman)';
    系统已更改。
    Jsspdg> alter system set log_archive_dest_3='SERVICE=jssweb lgwr async
    valid_for=(online_logfiles,primary_role) db_unique_name=jssweb';
    系统已更改。
    Jsspdg> alter system set log_archive_dest_state_3=enable;
    系统已更改。

 
3、打开standby 的redo 应用

 

    SQL> show parameter db_unique
    NAME                 TYPE        VALUE
    -------------------- ----------- ----------------
    db_unique_name       string      jssrman
    SQL> set sqlprompt Jssrman>


    Jssrman> alter database recover managed standby database disconnect from session;
    数据库已更改。

 
4、Primary 切换日志,验证同步效果

    Jssweb> alter system switch logfile;
    系统已更改。


    Jssweb>select max(sequence#) from v$archived_log;
    MAX(SEQUENCE#)
    --------------
    787
    Jsspdg>select max(sequence#) from v$archived_log;
    MAX(SEQUENCE#)
    --------------
    787
    Jssrman>select max(sequence#) from v$archived_log;
    MAX(SEQUENCE#)
    --------------
    787

 
 
    与之前通过primary 物理备份相比,通过rman 的duplicate 命令创建standby,实际执行的步骤是不是更简单一些了呢,基本上你只需要记住duplicate 的用法就好了,其它工作rman 都自动帮你干。正象开篇中我说过的那样,为什么要选择通过rman 来创建standby 呢,因为简单:)




-The End-

posted on 2009-03-03 23:02 decode360-3 阅读(330) 评论(0)  编辑  收藏 所属分类: DBA

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


网站导航: