盛哥學習 Data Guard 第四篇《物理standby之failover 丟棄切換》
一、switchover和failover
所謂switchover是針對failover而言的,它是一種無損切換,切換的過程中不會丟失資料。可以平滑的使主備互換並且2個庫都可以正常使用。
切換過程:主庫->切換->備庫->檢查狀態->原備庫->切換->主庫->再檢查狀態
應用場合:主庫需要調整升級,主庫效能不佳,這時可以切換後用新主庫對外提供服務
是否丟失資料:不會丟失資料
所謂failover,它是一種丟棄切換,直接把備庫切換成主庫,原主庫自動丟棄,也就是不在屬於DG架構的一部分了。
切換過程:備庫->切換->主庫->檢查狀態,原主庫脫離DG架構
應用場合:當主庫發生嚴重故障不可逆轉的時候可以使用failover,例如 我們熟悉紐約雙子塔911事件,如果你的主庫在那裡,呵呵那麼你就不要在猶豫了,failover是你最佳之選擇 come on
是否丟失資料:極有可能丟失資料,我們的目標就是損失降到最低
如果在failure之前是maximum protection or maximum availability模式,會丟失資料
挽救措施:重建主庫 使用原來備份恢復主庫
Failover Role Transition 之前準備工作(標準流程,一般自己建的庫最瞭解就可以skip)
1. 如果備庫是maximum protection 必須先修改成maximum performance之後才能切換
修改語句: Alter database set standby database to maximize performance;
注:切換之後你可以在改回maximum protection mode
2. 如果主庫與備庫之間有日誌傳輸的話,如上語句修改備庫從maximum protection->maximum performance不會成功的。因為failover操作會刪除原主庫的DG配置,這也是為了保護主庫操作
二、實操failover丟棄切換
需要知道的事情
1.failover操作之後,會自動丟棄原主庫不在是DG一部分
2.如果你有多個備庫,其他備庫也會自動脫離DG,也不需要做shutdown 和 restart 動作。當有了新主庫之後可以根據需要重新建立所有備庫
3.我們推薦使用命令列的方式進行failover操作
4.不能在備庫接收日誌情況下進行failover操作
6.在進行切換之前檢查歸檔日誌號不能有缺口gap
5.如果你的備庫是在maximum protection mode or maximum availability mode並且使用LGWR方式傳送日誌,那麼歸檔日誌號是不會有缺口的必須是連續的,這時可以直接停止接收日誌,馬上進行failover切換
進入操作環節
(1)檢查備庫歸檔日誌號是否都是連續的,不能有缺口,否則需要補救
SYS@OEL> select database_role,switchover_status,open_mode from v$database;
DATABASE_ROLE SWITCHOVER_STATUS OPEN_MODE
---------------- -------------------- ---------- -------------------- ----------- --
PHYSICAL STANDBY NOT ALLOWED READ ONLY
備庫現在是read only狀態,我們調整到mounted
SYS@OEL> alter database recover managed standby database disconnect from session parallel 2;
SYS@OEL> select database_role,switchover_status,open_mode from v$database;
DATABASE_ROLE SWITCHOVER_STATUS OPEN_MODE
---------------- -------------------- -------------------------- ------------------
PHYSICAL STANDBY SESSIONS ACTIVE MOUNTED
我們在read only狀態可以直接應用日誌,OEL資料庫自動調整到mounted狀態
可以檢查V$ARCHIVE_GAP檢視歸檔日誌號有沒有缺口
SYS@OEL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
no rows selected
備庫歸檔日誌號是連續的。不用在複製歸檔日誌了
Example:
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- -------------- ------------- --------------
1 90 92
如果得到這個結果,說明缺少90、91、92號歸檔日誌,可以從主庫->copy->備庫,必須保證歸檔日誌齊全,否則會在failover時導致資料丟失
載入copy歸檔日誌資訊至控制檔案
ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
對比主備庫歸檔日誌列表的完整性
SYS@LEO> select sequence#,ARCHIVED,APPLIED from v$archived_log; 主庫歸檔日誌列表
SEQUENCE# ARC APP
---------- --- ---
10 YES YES
11 YES NO
11 YES YES
12 YES NO
12 YES YES
SYS@OEL> select sequence#,ARCHIVED,APPLIED from v$archived_log; 備庫歸檔日誌列表
10 YES YES
11 YES YES
12 YES YES
(2)終止了RFS程式,以便停止接收redo日誌,終止日誌應用
OEL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
Database altered.
我們來看看後臺是怎麼做的
SKIP STANDBY LOGFILE option no longer needed for RECOVERFINISH. Option ignored
跳過備庫redo日誌,不在需要恢復
Thu Jun 7 20:09:43 2012
Terminal Incomplete Recovery: request posted (OEL)
Thu Jun 7 20:09:46 2012
Terminal Recovery timestamp is '06/07/2012 20:09:46' 終止恢復時間
Terminal Recovery: applying standby redo logs. 終止redo日誌應用
Terminal Recovery: thread 1 seq# 13 redo required 在13號歸檔日誌終止
Terminal Recovery: End-Of-Redo log allocation
MRP: Validating standby redo logfile 4
Thu Jun 7 20:09:46 2012
Media Recovery Log /u01/app/oracle/oradata/OEL/file1/redo4_1.rdo
Terminal Recovery: log 4 reserved for thread 1 sequence 13 redo4_1 對應的是13號歸檔日誌
Identified End-Of-Redo for thread 1 sequence 13
Force關鍵字:終止了RFS程式,以便停止接收日誌
Finish關鍵字:後面還可以跟隨 FORCE WAIT NOWAIT
(3)備庫執行failover丟棄切換
SYS@OEL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
Database altered.
檢視alert_OEL.log日誌
ALTER DATABASE SWITCHOVER TO PRIMARY (OEL)
Thu Jun 7 20:37:39 2012
If media recovery active, switchover will wait 900 seconds
如果存在日誌應用會等待900秒,實際上可能更長
Standby terminal recovery start SCN: 166513
SwitchOver after complete recovery through change 166514 啟動所有線上日誌組
Online log /u01/app/oracle/oradata/OEL/file1/redo01.log: Thread 1 Group 1 was previously cleared
Online log /u01/app/oracle/oradata/OEL/file2/redo1_2.log: Thread 1 Group 1 was previously cleared
Online log /u01/app/oracle/oradata/OEL/file1/redo02.log: Thread 1 Group 2 was previously cleared
Online log /u01/app/oracle/oradata/OEL/file2/redo2_2.log: Thread 1 Group 2 was previously cleared
Online log /u01/app/oracle/oradata/OEL/file1/redo03.log: Thread 1 Group 3 was previously cleared
Online log /u01/app/oracle/oradata/OEL/file2/redo3_2.log: Thread 1 Group 3 was previously cleared
Standby became primary SCN: 166512
備庫變成了主庫
Switchover: Complete - Database shutdown required (OEL)
此時資料庫是一個不確定的狀態,需要重啟來恢復
SYS@OEL> select status from v$instance;
STATUS
------------
STARTED
注意:a.此時OEL資料庫已經不能在接收原主庫日誌了
b.如果你有其他備用資料庫,failover過程中,standby logfile內容會自動歸檔並應用到其他備用資料庫
c.沒有必要關閉並重啟任何其他備庫,因為已經不屬於DG的一部分了
SYS@LEO> select database_role,switchover_status,open_mode from v$database;
DATABASE_ROLE SWITCHOVER_STATUS OPEN_MODE
---------------- -------------------- --------------- -------------------- ---------
PRIMARY NOT ALLOWED READ WRITE 我們看到切換狀態已經變成:不允許了
(4)重新啟動新主庫
在failover之後OEL是read only 的話,必須shutdown immediate –> startup 重啟資料庫
在failover之後OEL是mounted 的話,可以直接open開啟
SYS@OEL> shutdown immediate
SYS@OEL> startup
(5)檢查資料庫狀態
SYS@OEL> select log_mode from v$database; 並且還是歸檔模式
LOG_MODE
------------
ARCHIVELOG
SYS@OEL> select database_role,switchover_status,open_mode from v$database;
DATABASE_ROLE SWITCHOVER_STATUS OPEN_MODE
---------------- -------------------- ---------------- -------------------- -------
PRIMARY NOT ALLOWED READ WRITE
此時OEL庫已經切換成主庫了,並且不屬於DG一部分了,還是read write狀態可以正常對外服務
(6)backup 新主庫
為什麼要備份新主庫,這是一個安全措施,現在沒有完整資料庫備份,發生故障時也就沒有了恢復源了,DBA 第一黃金定律:有備無患
(7)恢復原主庫
慣例往往都是發生嚴重事故後進行failover切換,絕大多數主庫已經不能在使用了,那麼我們用什麼方法可以恢復主庫呢?
第一,flashback database to restore the failed primary database
第二,利用現有OEL庫重新建立LEO庫為備庫
第三,使用RMAN恢復原主庫
小結:failover時一定要想好了主庫能否再恢復,資料能否再找回來。
一定要檢查日誌號的連線性,否則切換不能成功。
必須停掉日誌接收和應用後在切換
深刻理解failover和switchover含義與區別
Leonarding
2012.6.7
於天津&summer
Blog:http://space.itpub.net/26686207
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26686207/viewspace-732195/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 盛哥學習 Data Guard 第三篇《物理standby之switchover 無損切換》
- DATA GUARD物理STANDBY的FAILOVER切換AI
- 盛哥學習 Data Guard 第二篇《物理standby準備和建立》
- DATA GUARD物理STANDBY的 SWITCHOVER切換
- DATA GUARD物理STANDBY的 SWITCHOVER切換[zt]
- 【DataGuard】物理Data Guard之Failover轉換AI
- dataguard之物理standby庫failover 切換AI
- Data Guard學習之物理standby建立步驟
- 物理Standby角色切換作業failoverAI
- DATA GUARD物理備庫的SWITCHOVER切換
- 盛哥學習 Data Guard 第一篇《先了解大概》
- Data Guard 之RMAN備份線上搭建物理standby
- dataguard之物理standby 日誌切換
- Oracle 12c Data guard 物理備庫應急切換(failover)流程OracleAI
- Oracle 11g Data guard 物理備庫應急切換(failover)流程OracleAI
- oracle 9iDATA GUARD物理STANDBY的 SWITCHOVER切換步驟Oracle
- DataGuard---->物理StandBy的角色切換之switchover
- Oracle Data Guard快速啟動故障切換 - fast-start failover(FSFO)OracleASTAI
- Oracle 11g RAC Data Guard 物理standby 建立Oracle
- RAC環境STANDBY的FAILOVER切換AI
- Data Guard主備庫切換
- 管理物理STANDBY資料庫——DATA GUARD概念和管理資料庫
- 建立物理STANDBY資料庫——DATA GUARD概念和管理資料庫
- 物理data guard備standby庫的時候報錯。
- 【DATAGUARD】物理dg的failover切換(六)AI
- Oracle 12c Data guard 物理主備庫正常切換(switchover)流程Oracle
- Oracle 11g Data guard 物理主備庫正常切換(switchover)流程Oracle
- 10g Data Guard physical standby的主備庫角色轉換測試(switchover & failover)AI
- 【DataGuard】Oracle 11g物理Data Guard之Snapshot Standby資料庫功能Oracle資料庫
- 【新炬網路名師大講堂】Data Guard–物理主備庫切換
- Data Guard物理備庫read/write後,切換回備庫狀態
- Oracle Data Guard Failover(activate)OracleAI
- In Data Guard,choose switchover or failover?AI
- data guard failover on solaris 10AI
- RAC環境LOGICAL STANDBY的FAILOVER切換AI
- DG物理standby,failover步驟AI
- DG物理standby,Failover之後原primary重回DGAI
- 【轉】【DataGuard】Oracle 11g物理Data Guard之Snapshot Standby資料庫功能Oracle資料庫