“alter database switchover to xx“過程不當導致的primary-primary 雙主問題
關於切換時primary-primary 雙主問題,看起來是因為使用“alter database switchover to xx” 執行切換時的流程上缺陷問題:
首先在以往傳統的switchover切換方式下,切換的流程是這樣的:
假如當前A庫(primary),B庫(standby)
1. 在A庫(primary)庫上,執行切換語句"alter database commit to switchover to physical standby with session shutdown"。此時主庫A在最後一個redo檔案頭中的EOR(End-of-redo)置為YES,表示其是當前作為主庫的最後一個日誌。
--dump出最後一個歸檔檔案頭:
ALTER SYSTEM DUMP LOGFILE '/home/oracle/archive/1_59_1047029376.dbf' RBA MIN 1 1 RBA MAX 1 1;
DUMP OF REDO FROM FILE '/home/oracle/archive/1_59_1047029376.dbf'
Container ID: 0
Container UID: 0
Opcodes *.*
Container ID: 0
Container UID: 0
RBAs: 0x000001.00000001.0000 thru 0x000001.00000001.0000
SCNs: scn: 0x0000000000000000 thru scn: 0xffffffffffffffff
……..
Largest LWN: 0 blocks
End-of-redo stream : Yes <<<<<<<<<<<
Unprotected mode
2. A庫將這個日誌傳送到B(standby)庫上。
3. B庫接收到這個日誌後並應用到EOR(End-of-redo)時,才將v$database.switchover_status從"not allowed" 切換為 "to primary" 為 "sessions active". 此時B standby庫便可以開始進行切換為主庫。
4. 原standby庫b庫在沒有接收到EOR前,v$database.switchover_status時not allowed,代表不會出現 primary-primary情況出現。
當在19c下使用alter database switchover to xx的方法切換,其流程如下:
假如依然如同以上A庫(primary),B庫(standby),
1. 此時我在A庫上執行alter database switchover to B;命令,將主庫切換到B庫;
2. 開始切換後,A庫會傳送角色轉換的指令到B庫(standby),此時,B庫角色提升為primary,B庫例項重新啟動到MOUNT狀態下:
OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
-------------------- ---------------- --------------------
MOUNTED PRIMARY NOT ALLOWED
3. A庫則被shutdown abort掉,重新啟動A庫並啟動應用日誌時,此時的switchover_status狀態變為to primary:
啟動到mount狀態:
OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
-------------------- ---------------- --------------------
MOUNTED PHYSICAL STANDBY RECOVERY NEEDED
啟動日誌應用:
OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
-------------------- ---------------- --------------------
MOUNTED PHYSICAL STANDBY TO PRIMARY
4.檢視alert日誌發現時A庫recover了65號歸檔,這個歸檔其實A庫做primary庫時的最後一個歸檔。
2021-09-24T17:48:32.739450+08:00
TT02 (PID:40943): LOG_FILE_NAME_CONVERT is not defined, stop clearing ORLs
2021-09-24T17:48:32.870791+08:00
PR00 (PID:40937): Media Recovery Log /home/oracle/archive/1_65_1047029376.dbf
2021-09-24T17:48:32.941701+08:00
PR00 (PID:40937): Resetting standby activation ID 0 (0x0)
2021-09-24T17:48:32.944149+08:00
對這個歸檔的檔案頭dump出來時發現其EOR是YES.如上面的機制所說,這也是為何此時A庫的狀態可以為to primary的原因:
DUMP OF REDO FROM FILE '/home/oracle/archive/1_65_1047029376.dbf'
Container ID: 0
Container UID: 0
Opcodes *.*
Container ID: 0
Container UID: 0
RBAs: 0x000001.00000001.0000 thru 0x000001.00000001.0000
SCNs: scn: 0x0000000000000000 thru scn: 0xffffffffffffffff
Times: creation thru eternity
FILE HEADER:
Compatibility Vsn = 318767104=0x13000000
Db ID=2146799166=0x7ff58e3e, Db Name='ORCL193'
Activation ID=2183894505=0x822b95e9
Control Seq=1084123756=0x409e6a6c, File size=409600=0x64000
File Number=3, Blksiz=512, File Type=2 LOG
…….
End-of-redo stream : Yes<<<<<<<<<<
Unprotected mode
Miscellaneous flags: 0x88000a9
Miscellaneous second flags: 0x0
Thread internal enable indicator: thr: 0, seq: 0 scn: 0x0000000000000000
此時,你剛好再去將B庫提升為主庫,便出現primary-primary 雙主的情況了。
5.這應該是一種流程上的缺陷,因為在原standby庫B庫提升為primary後,應該先將其open起來,再到新的standby庫啟動應用日誌,此時新的standby庫應用到新主庫的日誌,switchover_status的狀態便變回not allowed:
2021-09-24T18:35:31.461468+08:00
PR00 (PID:40937): Media Recovery Log /home/oracle/archive/1_66_1047029376.dbf
PR00 (PID:40937): Media Recovery Waiting for T-1.S-67 (in transit)
OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
-------------------- ---------------- --------------------
MOUNTED PHYSICAL STANDBY NOT ALLOWED
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29863023/viewspace-2849184/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 序列值導致的主鍵衝突問題Oracle
- ODPS主備叢集雙向資料複製導致主備中心網路打爆問題
- Oracle 12c因bug導致ORA-04031問題處理過程Oracle
- 【YashanDB知識庫】EXP導致主機卡死問題
- alter database disable thread 2Databasethread
- mysql5.6搭建主從過程中遇到主從server_uuid一致無法同步的問題MySqlServerUI
- ANALYZE導致的阻塞問題分析
- logback配置不當導致頻繁類載入
- Scala版本與Java版本不匹配導致的找不到主類問題Java
- MySQL Case-時間問題導致MySQL例項批次當機MySql
- 15、MySQL Case-時間問題導致MySQL例項批次當機MySql
- 敏捷轉型過程中避不開的4個問題敏捷
- ETL過程中資料精度不準確問題
- 分散式鎖導致的超賣問題分散式
- MySQL8.0 view導致的效能問題MySqlView
- CAS導致的ABA問題及解決
- golang slice使用不慎導致的問題Golang
- 關於Android中使用BottomNavigationView切換橫屏導致返回主頁的問題AndroidNavigationView
- 一次FGC導致CPU飆高的排查過程GC
- 記一次鎖使用不當導致Dubbo執行緒阻塞問題執行緒
- shell 中的 set -e 導致的退出問題
- 記一次Windows 系統更新導致雙系統無法啟動的修復過程Windows
- 記錄一次因 mysql 欄位取名不規範導致的問題MySql
- alicdn邊緣節點不穩定導致頁面崩潰問題
- Oracle日常問題-臨時表過多導致exp速度慢Oracle
- thrift使用過程中的問題
- Runtime PM 處理不當導致的 external abort on non-linefetch 案例分享
- str_replace導致的注入問題彙總
- [20191204]sqlplus特殊定義導致的問題.txtSQL
- 關於 Laravel mix 導致 Bootstrap 失效的問題Laravelboot
- repmgr 叢集雙主問題處理
- ORA-279 signalled during: alter database recover logfileDatabase
- 解決 allure.dynamic.parameter 不生效問題 或者 allure 報告中因為引數導致排版的問題
- 【檔案上傳繞過】路徑拼接問題導致上傳漏洞
- database 空值問題Database
- 爬蟲過程中遇到的問題爬蟲
- 【爬坑】.Net編譯環境導致的問題編譯
- vue的scope導致樣式修改不了問題Vue