DATAGUARD實際的應用場景
本文主要討論以下幾個問題
1、線上建立DATAGUARD備庫
2、使用日RMAN異機恢復來保護DATAGUARD切換可能出現的問題。
3、切換和失敗切換
首先檢視DATAGUARD中引數哪些是靜態,哪些是動態的,動態的可以再不停機的情況下直接修改
先看一下主庫需要設定的引數,然後我們在資料庫中查一下
DB_UNIQUE_NAME=testdg1
LOG_ARCHIVE_CONFIG='DG_CONFIG=(testdg1,tsetdg2)'
LOG_ARCHIVE_DEST_1='LOCATION=/oradata/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=testdg1'
LOG_ARCHIVE_DEST_2='SERVICE=testdg2 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=testdg2'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=2
STANDBY_FILE_MANAGEMENT='AUTO'
FAL_SERVER=testdg2
FAL_CLIENT=testdg1
select NAME,VALUE,ISSYS_MODIFIABLE
from v$parameter2
where upper(name) in ('DB_UNIQUE_NAME',
'LOG_ARCHIVE_CONFIG',
'LOG_ARCHIVE_DEST_2',
'LOG_ARCHIVE_DEST_1',
'LOG_ARCHIVE_DEST_STATE_1',
'LOG_ARCHIVE_DEST_STATE_2',
'REMOTE_LOGIN_PASSWORDFILE',
'LOG_ARCHIVE_FORMAT',
'LOG_ARCHIVE_MAX_PROCESSES',
'FAL_SERVER',
'FAL_CLIENT',
'STANDBY_FILE_MANAGEMENT');
NAME VALUE ISSYS_MODIFIABLE
-------------------------------- ------------------------------------ ----------------
log_archive_config IMMEDIATE
log_archive_dest_1 LOCATION=/home/oracle/archive IMMEDIATE
log_archive_dest_2 IMMEDIATE
log_archive_dest_state_1 enable IMMEDIATE
log_archive_dest_state_2 enable IMMEDIATE
log_archive_max_processes 2 IMMEDIATE
log_archive_format %t_%s_%r.dbf FALSE
fal_client IMMEDIATE
fal_server IMMEDIATE
remote_login_passwordfile EXCLUSIVE FALSE
db_unique_name test FALSE
可以看到如果要動態的配置DATAGUARD,remote_login_passwordfile引數不能設定NONE,db_unique_name 也必須提前設定好
其他的引數都可以透過動態進行修改
alter system set db_unique_name='testdg1' scope=spfile;
然後重啟資料庫,如果在規劃時就確定這個資料庫以後可能是要做DATAGUARD,可以提前設定好這個引數。
這樣其實主庫環境就準備好了,我們配置的是最大效能模式LGWR ASYNC模式。
1、設定主庫FORCE LOGGING屬性
ALTER DATABASE FORCE LOGGING;
2、複製主庫的SPFILE到備庫,並且在備庫使用spfile建立pfile,修改pfile引數檔案加入或者更改
DB_UNIQUE_NAME=testdg2
LOG_ARCHIVE_CONFIG='DG_CONFIG=(testdg1,testdg2)'
LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=testdg2'
LOG_ARCHIVE_DEST_2='SERVICE=testdg1 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=testdg1'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=2
STANDBY_FILE_MANAGEMENT='AUTO'
FAL_SERVER=testdg1
FAL_CLIENT=testdg2
3、進行NET配置,主庫備庫均進行配置,備庫的LSTENER可以先啟動,保證都能TSNPING通
主庫:
testdg2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.171)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testdg2)
)
)
備庫:
testdg1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.170)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testdg1)
)
)
4、主庫進行RMAN備份,然後備份STANDBY CONTROLFILE,隨後傳輸密碼檔案,備份檔案,STANDBY控制檔案到備庫
ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/boston.ctl';
5、恢復控制檔案,然後恢復資料檔案
[oracle@dg2 test]$ scp /home/oracle/boston.ctl control01.ctl
[oracle@dg2 test]$ scp /home/oracle/boston.ctl control02.ctl
[oracle@dg2 test]$ scp /home/oracle/boston.ctl control03.ctl
然後mount下恢復資料檔案
6、在備庫建立STANDBY LOGFILE 組為LOGFILE +1
alter database add standby logfile group 4 '/oracle/app/oracle/oradata/test/sredo04.log' size 50m;
alter database add standby logfile group 5 '/oracle/app/oracle/oradata/test/sredo05.log' size 50m;
alter database add standby logfile group 6 '/oracle/app/oracle/oradata/test/sredo06.log' size 50m;
alter database add standby logfile group 7 '/oracle/app/oracle/oradata/test/sredo07.log' size 50m;
到這裡備庫就算做完了。以下輸主庫
7、接下來我們來動態更改主庫的引數。
DB_UNIQUE_NAME=testdg1 --已經更改
LOG_ARCHIVE_CONFIG='DG_CONFIG=(testdg1,testdg2)' --需要更改
LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=testdg1' -需要更改
LOG_ARCHIVE_DEST_2='SERVICE=testdg2 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=testdg2' -需要更改
LOG_ARCHIVE_DEST_STATE_1=ENABLE -可以更改
LOG_ARCHIVE_DEST_STATE_2=ENABLE -可以更改
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE --已經更改
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc --不能更改
LOG_ARCHIVE_MAX_PROCESSES=2 --可以更改
STANDBY_FILE_MANAGEMENT='AUTO' --必須修改
FAL_SERVER=testdg2 --需要更改
FAL_CLIENT=testdg1 --需要更改
alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(testdg1,testdg2)' scope=both;
alter system set LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=testdg1' scope=both;
alter system set LOG_ARCHIVE_DEST_2='SERVICE=testdg2 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=testdg2' scope=both;
alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE scope=both;
alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE scope=both;
alter system set LOG_ARCHIVE_MAX_PROCESSES=2 scope=both;
alter system set FAL_SERVER=testdg2 scope=both;
alter system set FAL_CLIENT=testdg1 scope=both;
alter system set STANDBY_FILE_MANAGEMENT='AUTO' scope=both;
8、確認配置成功
在主庫進行一次日誌切換來啟用LSN和RFS程式,主庫日誌如下:
******************************************************************
LGWR: Setting 'active' archival for destination LOG_ARCHIVE_DEST_2
******************************************************************
Wed Mar 12 01:22:22 CST 2014
Thread 1 advanced to log sequence 6 (LGWR switch)
Current log# 3 seq# 6 mem# 0: /oracle/app/oracle/oradata/test/redo03.log
Wed Mar 12 01:22:22 CST 2014
LNS: Standby redo logfile selected for thread 1 sequence 6 for destination LOG_ARCHIVE_DEST_2
Wed Mar 12 01:22:22 CST 2014
ARC1: Standby redo logfile selected for thread 1 sequence 5 for destination LOG_ARCHIVE_DEST_2
9、開啟日誌應用,當然也可以開啟實時日誌應用如下:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
10、最後在主庫也建立相應多的standby logfile
alter database add standby logfile group 4 '/oracle/app/oracle/oradata/test/sredo04.log' size 50m;
alter database add standby logfile group 5 '/oracle/app/oracle/oradata/test/sredo05.log' size 50m;
alter database add standby logfile group 6 '/oracle/app/oracle/oradata/test/sredo06.log' size 50m;
alter database add standby logfile group 7 '/oracle/app/oracle/oradata/test/sredo07.log' size 50m;
11、只讀方式開啟
當備資料庫當前執行重做應用時開啟以用於只讀訪問:
1. 取消重做應用:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
2.開啟資料庫以用於只讀訪問:
SQL> ALTER DATABASE OPEN;
如果重新
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
恢復到正常模式
12、一些檢視
訪問V$MANAGED_STANDBY固定檢視
訪問V$ARCHIVE_DEST_STATUS固定檢視
訪問V$ARCHIVED_LOG固定檢視
訪問V$LOG_HISTORY固定檢視
訪問V$DATAGUARD_STATUS固定檢視
13、切換
首先檢查 備庫
SQL> select name,value from v$dataguard_stats;
NAME VALUE
-------------------------------- ----------------------------------------------------------------
transport lag +00 00:00:00
apply lag +00 00:00:00
apply finish time +00 00:00:00.000
estimated startup time 13
transport lag +00 00:00:00
apply lag +00 00:00:00
apply finish time +00 00:00:00.000
都為0
1、主庫執行
SELECT SWITCHOVER_STATUS FROM V$DATABASE
如果是SESSIONS ACTIVE和to standby
執行
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
2、關閉主庫
shutdown immediate
如果關閉報錯可以不理會,檢視一下程式是否存在
ps -ef|grep LGWR
如果不存在即可
3、啟動主庫到MOUNT
startup mount
4、在備庫執行
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
如果是SESSIONS ACTIVE和to primary
執行
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
5、關閉備庫
shutdown immediate
如果關閉報錯可以不理會,檢視一下程式是否存在
ps -ef|grep LGWR
如果不存在即可
6、啟動備庫
startup
7、源主庫執行,啟動日誌應用程式
alter database open;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
這樣完成了主庫備庫互相切換
最後檢查新的備庫及源主庫
SQL> select name,value from v$dataguard_stats;
NAME VALUE
-------------------------------- ----------------------------------------------------------------
transport lag +00 00:00:00
apply lag +00 00:00:00
apply finish time +00 00:00:00.000
estimated startup time 13
transport lag +00 00:00:00
apply lag +00 00:00:00
apply finish time +00 00:00:00.000
都為0
如果切換有問題請參考
Oracle Data Guard
Concepts and Administration
10gRelease 2 (10.2)
B14239-04
14、使用RMAN來保護可能在切換中的問題。
雖然說切換失敗也有辦法來進行回退,至少官方有文件說明,但是為了保障切換萬無一失,我們可以簡單的
是有RMAN異機來進行連續的恢復,如果有問題也不會導致資料丟失,比如典型的應用可能是我們進行伺服器修理
從而保證業務的連續性。
簡單的在主庫進行RMAN備份包含控制檔案然後複製到異機,進行restore,
保證應用已經停止沒有資料更改後進行日誌切換,然後複製可能的歸檔日誌到恢復端
這裡可能需要進行CATALOG ,我們使用CATALOG START WITH進行註冊就行了
我這裡記錄的SEQ是39
所以恢復為recover database until logseq 40 (<40)
然後模擬的我們進行一次切換,切換步驟參考上面,如果切換有問題我們就用我們異機恢復的資料庫,
如果沒有問題,我們就可以關閉主資料庫進行修理了。
一旦修理完成,我們想切換回主機,我們就需要再次上面的步驟
首先停止應用來確定,沒有資料修改,然後我們進行幾次切換保證所有的修改都進入了歸檔。
最後複製這些日誌到異機。這裡可能的需要進行一次CATALOG;
然後recover database until logseq
然後我們進行切換回主機即可,即使有問題也可以使用異機進行恢復
15、進行失敗切換
先確認是否有日誌GAP先確認是否有日誌GAP
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
對於使用ARCHIVE進行傳輸的模式,需要複製當前日誌檔案到目標端,並且進行註冊
ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
(需要測試)
需要根據ALTER日誌來判斷最後的當前日誌檔案。
保證任何可能的斷點都不存在
然後再備庫進行
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;來關閉RFS接收程式
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE; 確實資料沒有丟失
(如果此兩步有問題不能修復直接ACTIVE 備庫,這代表有資料丟失
ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;)
檢視
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
程式轉換
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
SHUTDOWN IMMEDIATE;
STARTUP 來啟動資料庫
實際上failover分為2種:
1、主庫還可以到mount
2、主庫不能到mount
1、如果主庫可以到mount
--確認gap情況
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
--保證備庫的mrp程式啟動
--ALTER SYSTEM FLUSH REDO TO 'target_db_name';
這一步保證了所有的redo傳輸到備庫,注意如果備庫mrp程式沒有啟動當前日誌將不能傳輸。
--ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;關閉備庫mrp程式
--ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;保證備庫接收的日誌應用完成
--確認可以進行切換了
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
---------------------------
TO PRIMARY
--ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;進行切換
--ALTER DATABASE OPEN;啟動資料庫
2、主庫不能到mount
主庫不能到mount自然就不能ALTER SYSTEM FLUSH REDO TO
那麼這一步我們需要手動完成
---確認gap
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
--將任何差值的archive log複製到備庫進行註冊
ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
--檢視mrp程式是否應用了這些註冊的歸檔
select * from v$managed_standby;
--關鍵一步需要恢復current_log
這一步是為了保證最小的日誌丟失,檢視alert日誌,來找到current log,傳輸到備庫,可以重新命名為
歸檔的格式
然後 recover standby database(until cancel);
--完成了這一步只能進行active備庫了
ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;
--alter database open;
當然任何錯誤的情況下都可以activate physical standby database啟用備庫。
作者微訊號:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26870952/viewspace-2121127/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Redis實際應用場景Redis
- 閉包實際場景應用
- nodejs實際應用場景NodeJS
- 代理IP的三個實際應用場景
- Google Guava 在實際場景中的應用封裝GoGuava封裝
- 【實操】小程式的應用場景分析——線下場景應用
- 廣泛被應用的雲專線實際應用場景有哪些?——VecloudCloud
- Python 基礎 2-2 列表的實際應用場景Python
- [Elasticsearch] ES 的Mapping 設計在實際場景中應用ElasticsearchAPP
- FRAM的應用場景
- Numpy的應用場景
- redis的應用場景Redis
- Vuex 的應用場景Vue
- python應用場景有哪些?實際就業薪資如何?Python就業
- 八個Docker的真實應用場景Docker
- 八個 Docker 的真實應用場景Docker
- 8個Docker的真實應用場景Docker
- 【docker專欄1】docker解決的實際問題及應用場景Docker
- MySQL 日期函式、時間函式在實際場景中的應用MySql函式
- DataGuard實時應用
- SAP BTP MTA 應用的應用場景
- ES 應用場景
- Zookeeper應用場景
- 3.4 應用場景
- DDD應用場景
- Canvas的實際應用場景1-生成一張主題分享圖片Canvas
- AR擴增實境可應用的場景
- Rails框架在實時場景下的應用AI框架
- 理解 Fragment 的應用場景Fragment
- Flutter - IOT領域應用場景實戰Flutter
- JavaScript模板引擎的應用場景及實現原理JavaScript
- Nginx應用場景配置Nginx
- snapshot應用場景
- BFC的概念與應用場景
- ThottleStop 軟體的應用場景
- 商品API的應用場景分析API
- Docker 的應用場景在哪裡Docker
- redis實用場景Redis