ORACLE DG專題4--部署DG邏輯備庫

在創建邏輯備庫之前,必須得先創建物理備庫,關於如何創建物理備庫,請參閱前述文章(ORACLE DG專題3--手把手部署DG 物理備庫)。

重新設置主庫的歸檔參數

邏輯備庫和物理備庫不一樣,邏輯備庫在進行SQL應用時還會產生日誌,即邏輯備庫的在線重做日誌,因此邏輯備庫不但要對從主庫傳過來的Standby日誌進行歸檔,還必須得對備庫自己產生的在線日誌進行歸檔。

假定log_archive_dest_1指定standby日誌的歸檔路徑,log_archive_dest_3指定在線日誌的歸檔路徑。

雖然主庫並不需要配置兩個歸檔路徑,但爲了方便將來可能的角色轉換(switchover),一般建議在主庫中也做相應的配置。

首先,查看當前主庫的log_archive_dest_1:

SYS@JKKA> show parameter log_archive_dest_1

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1                   string      location=/data/oradata/jkka/archivelog 
                                                 valid_for=(all_logfiles,all_roles)
                                                 db_unique_name=jkka

需要把valid_for屬性修改爲只對在線日誌生效:

SQL> alter system set log_archive_dest_1='location=/data/oradata/jkka/archivelog valid_for=(online_logfiles,all_roles) db_unique_name=jkka';

System altered.

接着在OS上新建standby歸檔目錄,新增的log_archive_dest_3指向它:

SQL> alter system set log_archive_dest_3='location=/odata/fast_recovery_area/T24APDB/archstandby VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=T24APDB';
System altered.

SQL> alter system set log_archive_dest_state_3=enable;
System altered.

在主庫構建LogMiner字典

SQL> EXECUTE DBMS_LOGSTDBY.BUILD;
PL/SQL procedure successfully completed.

在物理備庫上停止日誌應用服務

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
Database altered.

把物理備庫轉換成邏輯備庫

SQL> ALTER DATABASE RECOVER TO LOGICAL STANDBY ADDBLG;
Database altered.

注意:上面的ADDBLG是新的邏輯備庫的db_name,它必須得跟主庫的db_name不一樣且字符長度不超過8個字符,這點和物理備庫不一樣。

上述語句執行成功後,會把備庫的db_name修改成新的名字ADDBLG,關閉備庫,重啓至mount狀態讓其生效:

SQL> shutdown immediate
SQL> startup mount

調整邏輯備庫參數

這一步和第一步類似,首先查看當前的log_archive_dest_1的配置:

 NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1                   string      location=/data/oradata/jkka/archivelog 
                                                 valid_for=(all_logfiles,all_roles)
                                                 db_unique_name=jkka2

需要把valid_for屬性修改爲只對在線日誌生效:

SQL> alter system set log_archive_dest_1='location=/data/oradata/jkka/archivelog valid_for=(online_logfiles,all_roles) db_unique_name=jkka2';
System altered.

log_archive_dest_2保持不變:

NAME                                 TYPE        VALUE
----------------------------------- ----------- ------------------------------
log_archive_dest_2                   string      service=jkkapri ASYNC
                                                 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=jkka

在OS上新建standby歸檔目錄,新增的log_archive_dest_3指向它:

SQL> alter system set log_archive_dest_3='location=/data/oradata/jkka/archstandby VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=jkka2';
System altered.

SQL> alter system set log_archive_dest_state_3=enable;
System altered.

以resetlogs方式打開邏輯備庫

SQL> alter database open resetlogs;
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

可能的報錯:

  • 切換成logical備時報錯

解決方案:暫時不知道報了什麼錯;

  • 切換邏輯備庫後,備庫無法mount,無法打開

原因:控制文件中記錄的數據庫名:NAME爲原來的名稱T24APDB,需要修改(nomount 狀態),猜測就是因爲上面的切換導致的

SQL> ALTER SYSTEM SET DB_NAME=ADDBLG scope=spfile;

然後重啓數據庫(shutdown、startup)

參考

 本文參閱了這篇文章:

[Oracle] Data Guard 系列(5) - 創建邏輯備庫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章