博客 / 詳情

返回

技術分享 | Oracle 19C ADG 故障切換

本文為墨天輪數據庫管理服務團隊第149期技術分享,內容原創,作者為技術顧問達世德,如需轉載請聯繫小墨(VX:modb666)並註明來源。如需查看更多文章可關注【墨天輪】公眾號。


當ADG發生故障時的切換,我們稱之為高烈度切換。因為這個和你的生產系統是息息相關的。

模擬故障前建立保障(強制)還原點

查看主庫狀態

select database_role,protection_mode,open_mode from v$database;

查看數據庫的歸檔模式及是否啓用flashback database

archive log list;
select flashback_on from v$database;

創建保障(強制)還原點

create restore point orcl_rest_01 guarantee flashback database;

如果創建還原點有以下報錯的話:

SQL> create restore point orcl_rest_01 guarantee flashback database;
create restore point orcl_rest_01 guarantee flashback database
*
ERROR at line 1:
ORA-38784: Cannot create restore point 'ORCL_REST_01'.
ORA-38786: Recovery area is not enabled.

你需要創建一個數據庫恢復文件目錄:

創建數據庫文件恢復目錄

mkdir -p /u01/app/oracle/oradata/ORCL/dfa

指定數據庫文件恢復目錄的大小(最大空間使用量)

alter system set DB_RECOVERY_FILE_DEST_SIZE=5G scope=both;

在數據庫中指定數據庫文件恢復目錄的位置(用我們剛才創建出來的那個目錄)

alter system set db_recovery_file_dest='/u01/app/oracle/oradata/ORCL/dfa' scope=both;

再次查看一下狀態:

select flashback_on from v$database;
FLASHBACK_ON
------------------
RESTORE POINT ONLY

檢查備庫狀態

select database_role,protection_mode,open_mode from v$database;

從這裏開始試驗:

在主庫中我們直接使用shutdown abort來創造主庫意外崩潰:

shutdown abort

主庫執行如下操作,先保證主庫可已經入到mount:

startup mount

從oracle 11g開始有一個新特性叫flush redo,就是説如果主庫掛了,只要能mount,就可以將沒傳到備庫的online redo log信息刷到備庫去,

這樣就不會有數據丟失。

alter system flush redo to 'orclsd';   --這裏的是數據庫唯一名稱 

在備庫查看備庫是否有gap

所謂的GAP就是當redo data 傳送發生中斷時就會產生redo gap。當redo傳送恢復正常以後,redo transport service 會自動檢測redo gap併發送缺失的redo 到destination。解決redo gap的時間與gap 的數量和網絡有一定的關係。 Gap越少,網絡越好,解決gap就會越快。

select thread#, low_sequence#, high_sequence# from v$archive_gap;
#######################################################

如果有GAP就需要把查詢出來的歸檔日誌給發送到備庫上。

比如説:

select thread#, low_sequence#, high_sequence# from v$archive_gap;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
----------- ------------- --------------
1 8 11

主庫查詢確認一下

SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN 7 AND 11;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ORCL/arch/arcr_1_8.arc
/u01/app/oracle/oradata/ORCL/arch/arcr_1_9.arc
/u01/app/oracle/oradata/ORCL/arch/arcr_1_10.arc

THREAD根據SELECT * FROM V$ARCHIVE\_GAP;這條語句定義

  • DEST\_ID=1 你定義的第一個歸檔目錄本地的那個
  • BETWEEN後的值儘量用SELECT * FROM V$ARCHIVE\_GAP;得到的LOW\_SEQUENCE#的值-1
  • AND後的值就是SELECT * FROM V$ARCHIVE\_GAP;得到的HIGH\_SEQUENCE#的值

然後把找到的歸檔發送到備庫,並使用ALTER DATABASE REGISTER LOGFILE應用這些歸檔:

SQL> ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/oradata/ORCL/arch/arcr_1_8.arc';
SQL> ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/oradata/ORCL/arch/arcr_1_9.arc';
SQL> ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/oradata/ORCL/arch/arcr_1_10.arc';
###########################################################

備庫切換成主庫

在備庫上發生的:

取消和停止日誌應用

alter database recover managed standby database cancel;
alter database recover managed standby database finish;

注意:如果主庫和備庫之間的網絡中斷了,那麼備庫的RFS(remote file server)進程就會等待網絡的連接,直到TCP超時。此時需要加上force關鍵字 

alter database recover managed standby database finish force;(網絡沒有問題就不用執行了)

查看可切換狀態

select open_mode, switchover_status from v$database;
OPEN_MODE        SWITCHOVER_STATUS
-------------------- --------------------
READ ONLY        TO PRIMARY

切換成主庫

alter database commit to switchover to primary with session shutdown;
select open_mode, switchover_status from v$database;
OPEN_MODE        SWITCHOVER_STATUS
-------------------- --------------------
MOUNTED          NOT ALLOWED

嘗試關閉數據庫

shutdown immediate;

重新啓動數據庫

startup

檢查可切換狀態

select open_mode, switchover_status from v$database;
OPEN_MODE        SWITCHOVER_STATUS
-------------------- --------------------
READ WRITE       FAILED DESTINATION

恢復主庫

關閉主庫

shutdown immediate

重新開啓主庫到mount狀態

startup mount;

查看還原點信息

select flashback_on from v$database;
FLASHBACK_ON
------------------
RESTORE POINT ONLY

使用還原點閃回還原數據庫

flashback database to restore point orcl_rest_01;

還原成功後可以刪除該還原點,但是建議保留一會

drop restore point orcl_rest_01;

切換到物理備庫

alter database convert to physical standby;

關閉數據庫

shutdown immediate;

重新打開數據庫

startup

開啓實時日誌應用

alter database recover managed standby database using current logfile disconnect from session;

如果上一步你刪除了還原點這裏可以檢查是否刪除乾淨,沒有的話以後再説

select flashback_on from v$database;
FLASHBACK_ON
------------------
NO

檢查主庫狀態

select database_role,protection_mode,open_mode from v$database;
DATABASE_ROLE    PROTECTION_MODE      OPEN_MODE
---------------- -------------------- --------------------
PHYSICAL STANDBY MAXIMUM PERFORMANCE  READ ONLY WITH APPLY

最後別忘記再檢查一下備庫狀態

select database_role,protection_mode,open_mode from v$database;

墨天輪從樂知樂享的數據庫技術社區蓄勢出發,全面升級,提供多類型數據庫管理服務。墨天輪數據庫管理服務旨在為用户構建信賴可託付的數據庫環境,併為數據庫廠商提供中立的生態支持。
墨天輪數據庫服務官網:https://www.modb.pro/service

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.