一步一步學DataGuard(14)邏輯standby之switchover

junsansi發表於2008-03-25

關於角色轉換的一些概念在物理standby章節的時候已經講了很多,在概念和操作方式上二者基本一致,不過如果你真正深刻理解了物理standby和邏輯standby,你會意識到,對於邏輯standby而言,不管是switchover還是failover,怎麼操作起來,都這麼怪怪的呢~~~

邏輯standby之switchover

要在primary和邏輯standby之間切換角色,一般是從操作primary開始。

提示:

如果primary或邏輯standby是rac結構,切記只保留一個例項啟動,其它例項全部shutdown。等角色轉換操作完成之後再啟動其它例項,角色轉換的操作會自動傳播到這些例項上,並不需要你再對這些例項單獨做處理。

一、 準備工作

1、檢查primary和邏輯standby的初始化引數設定,常規的檢查包括:

·確保fal_server,fal_client值設定正確

·確保log_archive_dest_n引數設定正確

更多可能涉及的初始化引數可以參考2.1中的第4小章

首先來看當前的primary資料庫:

JSSWEB> show parameter fal

NAME                                 TYPE        VALUE

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

fal_client                           string      jssweb

fal_server                           string      jsspdg

JSSWEB> show parameter name_convert

NAME                                 TYPE        VALUE

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

db_file_name_convert                 string      oradata\jsspdg, oradata\jssweb

log_file_name_convert                string      oradata\jsspdg, oradata\jssweb

JSSWEB> show parameter log_archive_dest

NAME                                 TYPE        VALUE

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

log_archive_dest                     string

log_archive_dest_1                   string      LOCATION=E:\ora10g\oradata\jss

                                                 web\arc  VALID_FOR=(ALL_LOGFIL

                                                 ES,ALL_ROLES) DB_UNIQUE_NAME=j

                                                 ssweb

log_archive_dest_2                   string      service=jsspdg

                                                 OPTIONAL LGWR SYNC AFFIRM VALI

                                                 D_FOR=(ONLINE_LOGFILES,PRIMARY

                                                 _ROLE) DB_UNIQUE_NAME=jsspdg

................

................

................

log_archive_dest_state_1             string      ENABLE

log_archive_dest_state_2             string      defer

由於此處primary的初始化引數並不合適,為了避免其轉換之後發生錯誤,我們需要提前做些修改:

JSSWEB> alter system set log_archive_dest_2='location=e:\ora10g\oradata\jssweb\std\ valid_for=(standby_logfiles,standby_role) db_unique_name

=jssweb';

系統已更改。

JSSWEB> alter system set log_archive_dest_1='location=e:\ora10g\oradata\jssweb\arc\ valid_for=(online_logfiles,all_roles) db_unique_name=jss

web';

系統已更改。

JSSWEB> alter system set log_archive_dest_state_2='enable';

系統已更改。

JSSWEB> alter system set fal_server='jssldg';

系統已更改。

--xx_file_name_convert這兩個引數無法動態修改,因此我們首先修改spfile,然後再重啟一下資料庫

JSSWEB> alter system set db_file_name_convert='oradata\jssldg','oradata\jssweb' scope=spfile;

系統已更改。

JSSWEB> alter system set log_file_name_convert='oradata\jssldg','oradata\jssweb' scope=spfile;

系統已更改。

JSSWEB> startup force

然後再看看待轉換的邏輯standby

JSSLDG> show parameter fal

NAME                                 TYPE        VALUE

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

fal_client                           string

fal_server                           string

JSSLDG> show parameter file_name

NAME                                 TYPE        VALUE

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

db_file_name_convert                 string      oradata\jssweb, oradata\jssldg

log_file_name_convert                string      oradata\jssweb, oradata\jssldg

JSSLDG> show parameter log_archive

NAME                                 TYPE        VALUE

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

log_archive_config                   string      DG_CONFIG=(jssweb,jsspdg,jssld

                                                 g)

log_archive_dest                     string

log_archive_dest_1                   string      location=E:\ora10g\oradata\jss

                                                 ldg\arc\ valid_for=(online_log

                                                 files,all_roles) db_unique_nam

                                                 e=jssldg

log_archive_dest_10                  string

log_archive_dest_2                   string      location=E:\ora10g\oradata\JSS

                                                 LDG\std\ valid_for=(standby_lo

                                                 gfiles,standby_role) db_unique

                                                 _name=JSSLDG

.......................

.......................

對於待轉換的邏輯standby中,某些初始化引數也可以不設定,不過走到這一步了,順手全設定一遍。

JSSLDG> alter system set fal_server='jssweb';

系統已更改。

JSSLDG> alter system set fal_client='jssldg';

系統已更改。

JSSLDG> alter system set log_archive_dest_3='service=jssweb lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=jssweb';

系統已更改。

2、檢查primary資料庫是否配置了standby redologs

JSSWEB> select * from v$standby_log;

未選定行

對於邏輯standby資料庫,standby redologs是必須的,因此我們需要為當前的primary建立幾個standby redologs。

JSSWEB> alter database add standby logfile group 4 ('e:\ora10g\oradata\jssweb\standbyrd01.log') size 20m;

資料庫已更改。

.....................

.......................

.........................

JSSWEB> alter database add standby logfile group 8 ('e:\ora10g\oradata\jssweb\standbyrd05.log') size 20m;

資料庫已更改。

二、 檢查primary資料庫狀態

在當前的primary資料庫查詢v$database檢視中的switchover_status列,檢視當前primary資料庫狀態。

JSSWEB> select switchover_status from v$database;

SWITCHOVER_STATUS

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

TO STANDBY

如果該查詢返回TO STANDBY 或SESSIONS ACTIVE則表示狀態正常,可以執行轉換操作,如果否的話,就需要你先檢查一下當前的dataguard配置,看看是否  

三、 準備轉換primary為邏輯standby

執行下列語句,將primary置為準備轉換的狀態:

JSSWEB>  alter database prepare to switchover to logical standby;

資料庫已更改。

檢視一下switchover_status的狀態,喲,果然變成準備ing啦~~

JSSWEB> select switchover_status from v$database;

SWITCHOVER_STATUS

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

PREPARING SWITCHOVER

四、 準備轉換邏輯standby為primary

我們一定要學習oracle這種邏輯,甭管想做什麼,都得先有個準備的過程~

JSSLDG>  alter database prepare to switchover to primary;

資料庫已更改。

JSSLDG> select switchover_status from v$database;

SWITCHOVER_STATUS

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

PREPARING SWITCHOVER

五、 再次檢查primary資料庫狀態

JSSWEB> select switchover_status from v$database;

SWITCHOVER_STATUS

字數受限,詳細請檢視:

一步一步學DataGuard(14)邏輯standby之switchover全文

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-217138/,如需轉載,請註明出處,否則將追究法律責任。

相關文章