ORACLE RAC数据库配置Dataguard环境(3)

三、角色切换

  将一套单实例数据库转换成RAC,最快捷的方式是什么,假设条件允许,我觉着首选就应当是Dataguard的switchover,如果一切顺利,甚至只需要短短几分钟就能够完成转换的操作。由于环境所限,这里我们来实际演示一个案例,将一套RAC数据库切换为单实例,嘻嘻,仅做示例,这个会了,那单实例转换RAC也没啥问题的!

  进行切换前要对当前环境进行检查,一个是要确保切换的正确执行,再一个也要确保切换后数据库的Dataguard配置不会被破坏。有朋友可能会问,当前Dataguard跑的好好的,难道切换下角色就有可能导致Dataguard不正常吗?

  老实讲这太可能了,就像谈恋爱的俩人关系再好,要是有其中一人搬了家,新地址却没让另一半知道,那这两人的关系肯定就断了,起码是要中断一段时间(细心品味的话,这段描述也说明,即使准备不好导致Dataguard出现了一些问题也表怕,还是会有补救措施的,比如,赶紧找找相熟的打听打听新地址)。因此无论做什么样的切换,最起码也要保证双方还能互动吧,这里我们要做的检查,也正是确保不论角色怎么换,两方的紧(亲)密联系不会被中断。

  角色切换后,原Primary变成了Standby,而原Standby变成了新的Primary(假设该Dataguard配置为一主一备的前提下),因此这里首先检查两端log_archive_dest_n参数的设置,首先来看Primary数据库:

SQL> set sqlprompt "JSSDB> "

JSSDB> show parameter log_archive_dest

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

log_archive_dest                     string

log_archive_dest_1                   string      location=/data/oradata/jssdbn1

                                                 /archivelog

log_archive_dest_10                  string

log_archive_dest_2                   string      service=jssstd lgwr async vali

                                                 d_for=(online_logfiles,primary

                                                 _role) db_unique_name=jssstd

log_archive_dest_3                   string

log_archive_dest_4                   string

log_archive_dest_5                   string

log_archive_dest_6                   string

log_archive_dest_7                   string

log_archive_dest_8                   string

log_archive_dest_9                   string

log_archive_dest_state_1             string      enable

log_archive_dest_state_10            string      enable

log_archive_dest_state_2             string      enable

log_archive_dest_state_3             string      enable

log_archive_dest_state_4             string      enable

log_archive_dest_state_5             string      enable

log_archive_dest_state_6             string      enable

log_archive_dest_state_7             string      enable

log_archive_dest_state_8             string      enable

log_archive_dest_state_9             string      enable

JSSDB> show parameter fal;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

fal_client                           string

fal_server                           string

JSSDB> show parameter file_name_convert;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_file_name_convert                 string

log_file_name_convert                string

JSSDB> show parameter standby_file_management;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

standby_file_management              string      MANUAL

  再来看看Standby:

SQL> set sqlprompt "JSSSTD> "

JSSSTD> show parameter log_archive_dest

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

log_archive_dest                     string

log_archive_dest_1                   string      location=/data1/jssstd/arclog

                                                 valid_for=(all_logfiles,all_ro

                                                 les) db_unique_name=jssstd

log_archive_dest_10                  string

log_archive_dest_2                   string

log_archive_dest_3                   string

log_archive_dest_4                   string

log_archive_dest_5                   string

log_archive_dest_6                   string

log_archive_dest_7                   string

log_archive_dest_8                   string

log_archive_dest_9                   string

log_archive_dest_state_1             string      enable

log_archive_dest_state_10            string      enable

log_archive_dest_state_2             string      enable

log_archive_dest_state_3             string      enable

log_archive_dest_state_4             string      enable

log_archive_dest_state_5             string      enable

log_archive_dest_state_6             string      enable

log_archive_dest_state_7             string      enable

log_archive_dest_state_8             string      enable

log_archive_dest_state_9             string      enable

JSSSTD> show parameter fal 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

fal_client                           string      JSSSTD

fal_server                           string      jssdbn1, jssdbn2

JSSSTD> show parameter file_name_convert

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_file_name_convert                 string      +ASMDISK1/jssdb/datafile, /dat

                                                 a1/jssstd, +ASMDISK1/jssdb/tem

                                                 pfile, /data1/jssstd

log_file_name_convert                string      +ASMDISK1/jssdb/onlinelog, /da

                                                 ta1/jssstd

JSSSTD> show parameter standby_file_management

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

standby_file_management              string      AUTO

  其实根本不用看,肯定不合格,因为前面就没配过,从上述返回信息可以看出,Standby没有任何向Primary发送归档的设置,Primary端也没有fal相关的设置,像*_file_name_convert这类参数也未设置,另外standby redo等也不用看了,前面也根本未创建(不过对于测试环境,这个问题倒也不影响),接下来就是要改这些初始化参数,操作如下:

JSSDB> alter system set fal_server=jssstd;

System altered.

JSSDB> alter system set fal_client=jssdb;

System altered.

JSSDB> alter system set db_file_name_convert=¨/data1/jssstd¨,¨+ASMDISK1/jssdb¨ scope=spfile;

System altered.

JSSDB> alter system set log_file_name_convert=¨/data1/jssstd¨,¨+ASMDISK1/jssdb¨ scope=spfile;

System altered.

JSSSTD> alter system set log_archive_dest_2=¨service=jssdb lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=jssdb¨;

System altered.

  参数修改完毕,接下来开始进行角色转换。就本例而言,需要先到Primary端关闭其它实例仅保留一台实例,然后执行下列语句:

JSSDB> alter database commit to switchover to physical standby with session shutdown;

Database altered.

  with session shutdown 子句专门用来处理,执行转换操作时仍有用户在连接的情况,如果附加了该子句,Primary数据库执行switchover,就会自动断开仍在连接该实例的无关会话。

  重启原Primary,重启过后原Primary就是在以Standby身份运行了:

JSSDB> shutdown immediate

ORA-01507: database not mounted

ORACLE instance shut down.

JSSDB> startup mount

ORACLE instance started.

Total System Global Area  285212672 bytes

Fixed Size                  2083368 bytes

Variable Size             176162264 bytes

Database Buffers          100663296 bytes

Redo Buffers                6303744 bytes

Database mounted.

JSSDB> select DATABASE_ROLE,open_mode from v$database;

DATABASE_ROLE    OPEN_MODE

---------------- ----------

PHYSICAL STANDBY MOUNTED

  转到原Standby端操作:

JSSSTD> alter database commit to switchover to primary;

Database altered.

  注意,此时Standby要确保已启动REDO应用,否则转换时有可能失败。

  重新启动原Standby:

JSSSTD> shutdown immediate

ORA-01507: database not mounted

ORACLE instance shut down.

JSSSTD> startup

ORACLE instance started.

Total System Global Area  285212672 bytes

Fixed Size                  2083368 bytes

Variable Size              88081880 bytes

Database Buffers          188743680 bytes

Redo Buffers                6303744 bytes

Database mounted.

Database opened.

JSSSTD> select DATABASE_ROLE,open_mode from v$database;

DATABASE_ROLE    OPEN_MODE

---------------- ----------

PRIMARY          READ WRITE

  新的Primary诞生了,切换下日志,看看Standby端的接收是否正常:

JSSSTD> select thread#,max(sequence#) from v$archived_log group by thread#;

   THREAD# MAX(SEQUENCE#)

---------- --------------

         1            311

         2            144

JSSSTD> alter system switch logfile;

System altered.

JSSSTD> select thread#,max(sequence#) from v$archived_log group by thread#;

   THREAD# MAX(SEQUENCE#)

---------- --------------

         1            312

         2            144

  由于新的Primary只有一个实例,因此其实我们只需要关注thread#1生成的日志即可,转到新的Standby看看:

JSSDB> select thread#,max(sequence#) from v$archived_log group by thread#;

   THREAD# MAX(SEQUENCE#)

---------- --------------

         1            312

         2            144

  成功接收,角色转换基本成功鸟!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7607759/viewspace-662027/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7607759/viewspace-662027/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值