在建立邏輯備庫之前,必須得先建立物理備庫,關於如何建立物理備庫,請參考《Data Guard 系列 (4) - 在不停主庫的情況下建立物理備庫》。
1. 在物理備庫上停止日誌應用服務
SYS@jkka> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; Database altered.
2. 重新設定主庫為將來的角色轉換做準備(switchover)
邏輯備庫和物理備庫不一樣,在進行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屬性修改為只對線上日誌生效:
SYS@JKKA> 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指向它:
SYS@JKKA> alter system set log_archive_dest_3='location=/data/oradata/jkka/archstandby VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=jkka'; System altered. SYS@JKKA> alter system set log_archive_dest_state_3=enable; System altered.
3. 在主庫構建LogMiner字典
SYS@JKKA> EXECUTE DBMS_LOGSTDBY.BUILD;
PL/SQL procedure successfully completed.
4. 把物理備庫轉換成邏輯備庫
SYS@jkka> ALTER DATABASE RECOVER TO LOGICAL STANDBY jkka2;
Database altered.
注意:上面的jkka2是新的邏輯備庫的db_name,它必須得跟主庫的db_name不一樣,這點和物理備庫 不一樣。
上述語句執行成功後,會把備庫的db_name修改成新的名字jkka2,關閉備庫,重啟至mount狀態讓其 生效:
SQL> shutdown immediate
SQL> startup mount