Oracle 11g Active Dataguard Switchover實驗
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操作。
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的。
3、Switchover過程中Standby備庫操作
此時standby狀態。
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 SESSIONS ACTIVE ora11gsy
首先檢查standby上是否將所有的Redo Log順利應用,是否存在apply gap。
SQL> select sequence#, applied from v$archived_log;
SEQUENCE# APPLIED
---------- ---------
17 YES
18 YES
19 YES
14 rows selected
使用命令進行切換。
SQL> alter database commit to switchover to primary;
alter database commit to switchover to primary
ORA-01093: ALTER DATABASE CLOSE 僅允許在沒有連線會話時使用
SQL> alter database commit to switchover to primary with session shutdown;
Database altered
此時,standby資料庫狀態為:
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 MOUNTED PRIMARY NOT ALLOWED ora11gsy
SQL> conn / as sysdba
Connected.
SQL> select status from v$instance;
STATUS
------------
MOUNTED
啟動standby資料庫ora11gsy,並且檢查redo log傳遞情況。
SQL> alter database open;
Database altered.
SQL> select sequence# ,name, STANDBY_DEST, APPLIED from v$archived_log;
SEQUENCE# NAME STANDBY_DEST APPLIED
---------- -------------------------------------------------------------------------------- ------------ ---------
(篇幅原因,有省略……)
20 /u01/app/fast_recovery_area/ORA11GSY/archivelog/2014_04_20/o1_mf_1_20_9o70fq3g_. NO NO
20 ora11g YES NO
21 /u01/app/fast_recovery_area/ORA11GSY/archivelog/2014_04_20/o1_mf_1_21_9o70fvr7_. NO NO
21 ora11g YES NO
18 rows selected
注意:由於新standby端ora11g啟動狀態(mount),所以可以看到日誌傳遞,只是沒有應用。
4、效果檢查和測試
此時,我們檢查原來的Primary,也就是ora11g的資料庫狀態。
SQL> select status from v$instance;
STATUS
------------
MOUNTED
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 MOUNTED PHYSICAL STANDBY RECOVERY NEEDED ora11g
已經接受資料,只是沒有開啟應用。
SQL> alter database recover managed standby database using current logfile disconnect from session;
Database altered
此時,檢查ora11gsy的狀態,發現傳遞日誌已經應用。
SQL> select sequence# ,name, STANDBY_DEST, APPLIED from v$archived_log;
SEQUENCE# NAME STANDBY_DEST APPLIED
---------- -------------------------------------------------------------------------------- ------------ ---------
(篇幅原因,有省略…..)
20 ora11g YES YES
21 /u01/app/fast_recovery_area/ORA11GSY/archivelog/2014_04_20/o1_mf_1_21_9o70fvr7_. NO NO
21 ora11g YES YES
18 rows selected
下面進行一個資料同步測試,判斷switchover成功。我們在ora11gsy上建立資料表。
SQL> conn scott/tiger@ora11gsy
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
Connected as scott
SQL> create table t as select * from dba_objects;
Table created
SQL> select count(*) from t;
COUNT(*)
----------
86033
在primary端,啟動進入read only apply過程。
SQL> conn sys/oracle@ora11g as sysdba
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
Connected as SYS
SQL> alter database recover managed standby database cancel;
Database altered
SQL> alter database open;
Database altered
SQL> alter database recover managed standby database using current logfile disconnect from session;
Database altered
SQL> select count(*) from scott.t;
COUNT(*)
----------
86033
同步成功,進行switchover成功。
5、結論
進行Dataguard switchover和failover是非常常見的運維需求,在實際場景下,我們儘可能選擇穩妥完全的策略進行操作。Dataguard Broker存在一定的配置工作量,而DB Grid Control又是一個收費產品,所以SQL命令還是我們比較好的選擇。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1351122/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle DataGuard 主備切換 (switchover) oracle11gOracle
- Oracle之11g DataGuardOracle
- Oracle 11g dg switchover切換操作流程Oracle
- Oracle 11g dataguard 配置簡約步驟Oracle
- ORACLE 11G DATAGUARD 日誌中斷處理方案Oracle
- Oracle dataguard failover 實戰OracleAI
- Oracle:DG 的 switchoverOracle
- DataGuard---->物理StandBy的角色切換之switchover
- Oracle 19C CBD Active DataGuard Standby passwd file 注意事項 ORA-01017Oracle
- 【DATAGUARD】Oracle Dataguard物理備庫切換最佳實踐(sqlplus)OracleSQL
- 【DG】DataGuard健康檢查 for 11g
- 【DATAGUARD】Oracle Dataguard nologging 塊修復Oracle
- Trigger引起的active dataguard 報error ORA-16191Error
- Oracle 11g RAC DG備庫gv$dataguard_stats apply lag值較大OracleAPP
- oracle dataguard broker 配置Oracle
- 【DATAGUARD】Oracle Dataguard體系架構詳解Oracle架構
- Oracle 11.2.0.4 physical dataguard和snapshot dataguard切換Oracle
- 【DATAGUARD】Oracle19c dataguard新特性及部署Oracle
- Oracle 單機配置DataGuardOracle
- oracle 19c dataguard silent install (oracle 19c dataguard 靜默安裝)Oracle
- Oracle 11.2 DataGuard RAC To RAC搭建Oracle
- 【Dataguard】Oracle多租戶環境對Dataguard的影響Oracle
- 關於11G DataGuard 日誌傳輸的案例
- ORACLE 11g的密碼錯誤延時驗證Oracle密碼
- Oracle Dataguard故障轉移(failover)操作OracleAI
- 7 Oracle DataGuard 命令列參考Oracle命令列
- oracle11g dataguard切換Oracle
- 【11g 庫異地恢復】實驗
- 【DATAGUARD】Dataguard遠端同步配置最佳實踐
- 【DATAGUARD】Oracle19c Data Guard BrokerOracle
- Oracle 11.2.0.4 Dataguard兩則故障處理Oracle
- 【DATAGUARD】Oracle21c Dataguard建立注意事項及主要引數介紹Oracle
- Oracle實驗(04):floatOracle
- benchmark 壓測Oracle 11gOracle
- sysbench壓測Oracle 11gOracle
- Oracle 11G 安裝文件Oracle
- Oracle資料庫(DataGuard)遷移方案(下)Oracle資料庫
- Oracle資料庫(DataGuard)遷移方案(上)Oracle資料庫
- Oracle資料庫(DataGuard)遷移方案(中)Oracle資料庫