Oracle Data Guard是Oracle HA架構體系的重要組成部分,也是Oracle MAA(Maximum Availability Architecture)的關鍵技術方案。藉助Data Guard的Switchover和Failover特性,我們可以實現營運系統高可用性需求,最大限度的降低計劃內和非計劃內宕機時間。
Data Guard建立在資料庫軟硬體、資料冗餘策略,通過搭建和主庫Primary Database資料相同、軟硬體獨立的物理(Physical)和邏輯(Logical)備庫Standby,並且藉助Redo Log傳遞應用確保資料同步。當單獨資料庫(通常為Primary)發生故障,不能繼續提供服務時,額外的Standby可以作為備用資料庫來支援應用,減少系統整體資料丟失和停機影響。
Switchover和Failover是Dataguard裡面一組有區別又有聯絡的概念,其本質都是Primary停止對外服務,由Standby支援對外資料服務,變為新的Primary。但是兩者從概念到操作上都有很大差異。
Switchover的核心是“Planned”,也就是計劃內的停機切換動作。我們的營運系統在運行過程中,經常有如裝置檢修、軟體升級補丁等維護操作。這個時候,如果是一些SLA要求很高的系統,停機時間視窗就是一個問題。特別是一些7*24的系統,業務部門是不會允許過長的停機時間。Switchover就是對Dataguard或者RAC環境下,臨時性的Primary點停機進行升級工作,由Standby變為Primary支援服務,最後再切換回來的過程。這個過程在Oracle中成為角色轉換role transition。由於是有準備、有計劃的操作,Switchover是平順的,不會引起資料的丟失。
Failover的核心則是“unplanned”,是和Switchover相對應,更貼近Data Guard的原始設計初衷。如果Primary出現故障,不能支援服務的時候。Standby可以在很短的時間內,自動或者手動的切換到Primary角色。之後由這個新的Primary支援服務。如果Primary可以修複好,則可能需要重新搭建DG或者Apply為新的Standby,之後切換回Primary角色。Failover由於涉及到Primary網站的故障類型程度,所以是可能出現資料丟失的。
進行Switchover和Failover的工具方法很多,最常用的有三個:SQL Command、Data Guard Broker和DB Grid Control。本文介紹如何使用SQL Command進行Switchover操作。
相關參考:
Oracle Data Guard 重要配置參數
基於同一主機配置 Oracle 11g Data Guard
探索Oracle之11g DataGuard
Oracle Data Guard (RAC+DG) 歸檔刪除策略及指令碼
Oracle Data Guard 的角色轉換
Oracle Data Guard的日誌FAL gap問題
Oracle 11g Data Guard Error 16143 Heartbeat failed to connect to standby 處理方法
1、環境介紹
我們選擇環境已經搭建好Dataguard,版本為11.2.0.4(Primary和Standby相同)。作業系統版本為Red Hat Linux 6.5。
SQL> select * from v$version;
BANNER
--------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
Primary資料庫unique名稱為ora11g。
SQL> select name, LOG_MODE, OPEN_MODE, database_role, SWITCHOVER_STATUS, db_unique_name from v$database;
NAME LOG_MODE OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS DB_UNIQUE_NAME
--------- ------------ -------------------- ---------------- -------------------- ------------------------------
ORA11G ARCHIVELOG READ WRITE PRIMARY SESSIONS ACTIVE ora11g
Standby資料庫名稱為ora11gsy,此時開啟即時資料同步應用。
SQL> alter database recover managed standby database using current logfile disconnect from session;
Database altered
SQL> select name, LOG_MODE, OPEN_MODE, database_role, SWITCHOVER_STATUS, db_unique_name from v$database;
NAME LOG_MODE OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS DB_UNIQUE_NAME
--------- ------------ -------------------- ---------------- -------------------- ------------------------------
ORA11G ARCHIVELOG READ ONLY WITH APPLY PHYSICAL STANDBY NOT ALLOWED ora11gsy
注意:此時standby的open mode為Read only with apply,這個是11g Active Data Guard的特性。傳統DG在進行Apply的過程中,是處在mount狀態的,不支援即時資料唯讀操作。11g支援在apply中開啟資料庫到唯讀狀態。
2、Switchover過程中Primary主庫操作
進行Switchover的過程分為三個步驟,一個是在Primary上停止工作,切換到Standby狀態,第二個是在選擇一個Standby執行個體,切換角色到Primary狀態,最後是將其他Standby的Apply過程啟動。
注意在上面我們查看Primary資料庫ora11g的v$database視圖,其中switchover_status取值是我們需要關注的,如果取值為session active或者to standby,我們是可以進行切換的。如果其他值,說明配置的log傳輸機制存在問題,需要解決調整。
--在ora11g上
SQL> alter database commit to switchover to physical standby with session shutdown;
Database altered
注意:如果swtichover_status狀態為session active,就需要在命令中加入with session shutdown子句。執行後,我們發現Primary ora11g已經關閉。
SQL> select status from v$instance;
select status from v$instance
*
ERROR at line 1:
ORA-03135: connection lost contact
Process ID: 2357
Session ID: 1 Serial number: 5
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
--執行個體進程消失
[oracle@SimpleLinux trace]$ ps -ef | grep pmon
oracle 2107 1 0 15:35 ? 00:00:01 ora_pmon_ora11gsy
oracle 2473 1848 1 16:03 pts/1 00:00:00 grep pmon
此時,alert log中也記錄了執行個體停止的情況。
ALTER DATABASE ADD STANDBY LOGFILE 'srl1.f' SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE 'srl2.f' SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE 'srl3.f' SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE 'srl4.f' SIZE 52428800;
Archivelog for thread 1 sequence 19 required for standby recovery
Switchover: Primary controlfile converted to standby controlfile succesfully.
Switchover: Complete - Database shutdown required
USER (ospid: 2365): terminating the instance
Instance terminated by USER, pid = 2365
Completed: alter database commit to switchover to physical standby with session shutdown
Shutting down instance (abort)
License high water mark = 6
Sun Apr 20 16:02:11 2014
Instance shutdown complete
在這個過程中,為了確保資料無損失,Primary一定將所有的日誌資訊傳遞到Standby上。此時,可以啟動Primary,到mount standby狀態。
[oracle@SimpleLinux trace]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.4.0 Production on Sun Apr 20 16:06:47 2014
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup nomount
ORACLE instance started.
Total System Global Area 372449280 bytes
Fixed Size 1364732 bytes
Variable Size 331353348 bytes
Database Buffers 33554432 bytes
Redo Buffers 6176768 bytes
SQL> alter database mount standby database;
Database altered.
注意:如果需要進行裝置維修或者停機操作,是可以不啟動Primary的。
更多詳情見請繼續閱讀下一頁的精彩內容: