“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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用impdp不當導致的資料丟失問題
- alter database datafile .... offline drop的問題Database
- alter database backup controlfile to trace的問題Database
- memory_target設定不當導致資料庫無法啟動的問題資料庫
- Sqlserver 2014 alwayson架構主節點執行alter table導致從節點的阻塞問題SQLServer架構
- 11g 最大保護模式 standby database網路故障導致主庫當機模式Database
- 搭建DG過程由於沒有口令檔案而導致rman連不上主庫
- PLSQL不規範的引數命名導致的問題SQL
- ODPS主備叢集雙向資料複製導致主備中心網路打爆問題
- xxl-job濫用netty導致的問題和解決方案Netty
- GoldenGate MSSQL Oracle的主鍵問題導致的錯誤GoSQLOracle
- Oracle監聽日誌過大導致的問題Oracle
- memlock過低導致的資料庫效能問題資料庫
- 忍不住問下alter system 和alter database的區別Database
- alter database datafile offline drop相關問題Database
- alter database recover to logical standby xxx 很長時間,為什麼Database
- 10gDG switchover 過程
- 資料庫統計資訊不更新導致的效能問題資料庫
- Oracle 12c因bug導致ORA-04031問題處理過程Oracle
- Alter system suspend/resume 導致的bug和特性
- 修復iOS 10不彈出是否允許xxx訪問資料導致app無法聯網的bugiOSAPP
- ANALYZE導致的阻塞問題分析
- MySQL Flush導致的等待問題MySql
- mysql5.6搭建主從過程中遇到主從server_uuid一致無法同步的問題MySqlServerUI
- Scala版本與Java版本不匹配導致的找不到主類問題Java
- MySQL主主複製(雙主複製)配置過程介紹MySql
- alter database和alter system和alter session的區別DatabaseSession
- MySQL Case-時間問題導致MySQL例項批次當機MySql
- ETL過程中資料精度不準確問題
- 一條sql語句導致的資料庫當機問題及分析SQL資料庫
- 一條sql語句“導致”的資料庫當機問題及分析SQL資料庫
- alter database in OracleDatabaseOracle
- alter database archivelog manual__導致oracle10g switch logfile不自動歸檔DatabaseHiveOracle
- backup database plus archivelog 不同寫法導致備份集位置不同問題DatabaseHive
- ORA-01034,修改主機名導致的資料庫問題資料庫
- IBM HA雙機光交鏈路問題導致的oracle資料庫exp備份問題IBMOracle資料庫
- 15、MySQL Case-時間問題導致MySQL例項批次當機MySql
- 克隆ORACLE軟體的導致的問題Oracle