ORACLE RAC資料庫配置Dataguard環境(3)

junsansi發表於2010-05-06

三、角色切換

  將一套單例項資料庫轉換成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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章