oracle11g dataguard完全手册3-failover active dataguard(完)
五、failover
????????? 一般情況下執(zhí)行failover都是主庫已經(jīng)game over。故障轉(zhuǎn)移將備庫轉(zhuǎn)換為主庫,但不把原主庫(有故障,無法正常工作)切換為備庫。當(dāng)故障轉(zhuǎn)移發(fā)生后,你必須重建主庫,或者使用閃回數(shù)據(jù)庫功能將主庫回退到故障發(fā)生前,然后轉(zhuǎn)換其為備庫并啟用日志應(yīng)用。
?? 執(zhí)行failover有幾個前提條件如下
?? 1.執(zhí)行failover的前提
???? (1)檢查歸檔文件是否連續(xù)
??查詢待轉(zhuǎn)換 standby 數(shù)據(jù)庫的 V$ARCHIVE_GAP 視圖,確認(rèn)歸檔文件是否連接:
??SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
??未選定行
??如果返回的有記錄, 按照列出的記錄號復(fù)制對應(yīng)的歸檔文件到待轉(zhuǎn)換的 standby 服務(wù)器。 這一步非常重
??要,必須確保所有已生成的歸檔文件均已存在于 standby 服務(wù)器,不然可能會數(shù)據(jù)不一致造成轉(zhuǎn)換時報錯。
??文件復(fù)制之后,通過下列命令將其加入數(shù)據(jù)字典:
??SQL>ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
???? (2)檢查歸檔文件是否完整
??分別在 primary/standby 執(zhí)行下列語句:
??SQL> select distinct thread#,max(sequence#) over(partition by thread#) a from v$archived_log;
??該語句取得當(dāng)前數(shù)據(jù)庫各線程已歸檔文件最大序號,如果 primary 與 standby 最大序號不相同,必須將
??多出的序號對應(yīng)的歸檔文件復(fù)制到待轉(zhuǎn)換的 standby 服務(wù)器。 不過既然是 failover, 有可能 primary 數(shù)據(jù)庫此
??時已經(jīng)無法打開,甚至無法訪問,那只好聽天由命了,但是如果可以到mounted,則可以傳輸歸檔日志。
??所以應(yīng)該在primary機(jī)器crashed之前做好準(zhǔn)備。
??加入此時結(jié)果是:
??THREAD#????????? A
??---------- ----------
??? 1???????? 87
?????????????? 從庫最大為87,主庫也執(zhí)行,如果也是87則ok,如果不一致需要scp 然后執(zhí)行register
????(3)如果當(dāng)前備庫是處于最大保護(hù)(maximum protection)模式,要進(jìn)行故障轉(zhuǎn)移,必須先修改為最大性能
???? (maximum performance)模式。修改方法:
????????????? SQL> alter database set standby database to maximize performance;
??? 2,。執(zhí)行切換
????? (1)在備庫停止日志應(yīng)用:
???????????????? SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
??????(2)結(jié)束應(yīng)用任何日志:
???????????????? SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
???????????????????? 或者:
???????????????? SQL> alter database recover managed standbydatabase finish force;
???????????????? FORCE 關(guān)鍵字將會停止當(dāng)前活動的 RFS 進(jìn)程,以便立刻執(zhí)行 failover。
????? (3)轉(zhuǎn)換備庫為主庫
??????????????? SQL> alter database commit to switchover to primary with session shutdown;
??????????????? SQL> alter database open;
??注意這個時候主庫已經(jīng)不在dataguard中了。
???? 3.使用閃回重建數(shù)據(jù)庫
??????? (1)獲得原備庫轉(zhuǎn)換為主庫時的 SCN。查詢現(xiàn)主庫102:
????????????????? SQL> SELECT to_char(STANDBY_BECAME_PRIMARY_SCN) from V$DATABASE;
??????? (2)在原主庫101上執(zhí)行:
???????????????????SQL> SHUTDOWN IMMEDIATE;
??? ??? SQL> STARTUP MOUNT;
??? ?SQL> FLASHBACK DATABASE TO SCN &standby_became_primary_scn;輸入之前查詢到的SCN號
??? 如果沒有開始閃回日志,最后一條命令會報錯 ORA-38726: Flashback database logging is not on.,
??? 無法進(jìn)行閃回。你就需要重新從新主庫復(fù)制數(shù)據(jù),重建原主庫為備庫。
????如果命令成功執(zhí)行,原主庫101就可以使用新主庫102的日志進(jìn)行恢復(fù)。將原主庫101轉(zhuǎn)換成物理備庫,并啟動日志應(yīng)用進(jìn)程:
???????????????? SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
???????????????? SQL> SHUTDOWN IMMEDIATE;
????????????????? SQL> STARTUP MOUNT;
????????????????? SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
????????????
???? 4.客戶端故障轉(zhuǎn)移
??????? 我很喜歡的一個功能是,當(dāng)主備切換或故障轉(zhuǎn)移發(fā)生后,客戶端能夠自動重連。在你的系統(tǒng)里,做下述實驗,看結(jié)果如何。
??????? orcl 是主庫,orcldg 是備庫。客戶端使用支持故障轉(zhuǎn)移的 orcl_RW 服務(wù)名。
?????????????? 首先,用 SYSTEM 用戶和 orcl_RW 服務(wù)名在 SQL*Plus 里登錄主庫:
????????? SQL> connect system@orcl_rw
????????? SQL> select db_unique_name from v$database;
?????????????? 查詢應(yīng)該返回主庫名 orcl。然后做一次主備切換,在將備庫轉(zhuǎn)換為主庫
??????? alter database commit to switchover to primary with session shutdown; 這一步時,主備庫均處于 MOUNT 狀態(tài)。
??????? 然后執(zhí)行查詢:
?????????SQL> select db_unique_name from v$database;
?????????????? 這時查詢應(yīng)該掛住,這是因為客戶端正在嘗試尋找主庫,但當(dāng)前又沒有可用的主庫。然后繼續(xù)完成主備切換。
??????????????? 當(dāng)主備切換完成后,客戶端應(yīng)該會重連并重新執(zhí)行查詢,查詢完成后成功返回結(jié)果 orcldg,因為現(xiàn)在主庫已經(jīng)切換為 orcldg,
??不再是orcl。
??
??????? 另一個很酷的測試方法是,執(zhí)行一個執(zhí)行時間非常長的查詢,當(dāng)查詢結(jié)果返回,屏幕一直滾動時開始主備切換。
??????? 你應(yīng)該會看到屏幕暫停滾動一段時間,當(dāng)切換完成后,又會繼續(xù)滾動。
???5.活動數(shù)據(jù)衛(wèi)士(active dataguard)
?????????????? 活動數(shù)據(jù)衛(wèi)士是 11g 的新功能,它允許你的物理備庫在應(yīng)用日志時處于只讀打開狀態(tài)。這明顯是一個很有用的功能。
??????? 能夠允許主庫有一個物理備庫作為備份,并能在保持備庫數(shù)據(jù)更新的同時讀取備庫,這是一個很好的功能。
??????? 調(diào)整備庫為“READ ONLY WITH APPLY”狀態(tài),這體現(xiàn)的便是Oracle 11g物理Active Data Guard功能中的“Active”真實含義。
??????? 在實際工作中,這個功能非常好用,經(jīng)常用于檢查實時數(shù)據(jù)同步情況。
??????? (1)查看備庫openmode
?????????????? sql>select open_mode from v$database;--MOUNTED
????????(2)取消備庫的自動恢復(fù)
???????????????? sql>alter database recover managed standby database cancel;
???????????????? sql>alter database open;
???????????????? sql>select open_mode from v$database; --這時候為READ ONLY
??????? (3)read only下備庫恢復(fù)
???????????????? sql>alter database recover managed standby database using current logfile disconnect;
???????????????? sql>select open_mode from v$database; --這時為READ ONLY WITH APPLY
??????? 6.11g standby的一些變化:
?????????? (1)standby數(shù)據(jù)庫可以直接執(zhí)行
?????????????? startup??? --就是read only打開數(shù)據(jù)庫
?????????????? startup mount? --就是mount standby數(shù)據(jù)庫
??
????????? (2)read only的情況下可以執(zhí)行managed recover standby命令。
????????????? SQL>startup
????????????? SQL>alter database recover managed standby database disconnect;
??????? 7.關(guān)于備份的引申
????????? 有了 Data Guard,你的 RMAN 備份在主庫或者備庫都可以執(zhí)行。但既然你已經(jīng)配置了物理備庫,你應(yīng)該減輕點主庫的負(fù)載。
?? 基本上,能在主庫執(zhí)行的標(biāo)準(zhǔn)的備份命令或腳本,也能在備庫執(zhí)行,但也有幾個值得注意地方。這些 Oracle 官方文檔都有,
?? 我只提幾個關(guān)鍵的事情:
???????????????? 你應(yīng)該使用恢復(fù)目錄(Recovery Catalog)。這是因為主庫需要知道備庫已經(jīng)存在了哪些備份文件。你不需要在恢復(fù)目錄中
?? 注冊備庫,恢復(fù)目錄能認(rèn)出它是備庫。
???????????????? 你不能備份備庫的控制文件,所以不要在主庫關(guān)掉所有的備份,至少需要在主庫備份控制文件和參數(shù)文件。
???????????????? 備份和恢復(fù)可以寫一整篇文章,我只是講下我是如何配置備份的,讓你能從這里開始,修改并形成自己的策略。
?? 測試下,確認(rèn)你能從你當(dāng)前實現(xiàn)的備份設(shè)置中恢復(fù)。在運行備份前,你需要配置一些基本的東西。
??(1)確認(rèn)開啟控制文件和 spfile 自動備份:
???? RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
??(2)根據(jù)你的需要設(shè)置備份文件保留策略:
???? RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;
??(3)如果一個文件已經(jīng)有備份,并且檢查點 SCN 相同,就不備份:
???? RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
??(4)只在主庫的歸檔日志已經(jīng)在備庫應(yīng)用(或者配置為已經(jīng)傳輸?shù)絺浞?#xff09;后才刪除:
???? RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
??(5)允許 RMAN 在主備間重新同步:
??? RMAN> CONFIGURE DB_UNIQUE_NAME P10AC CONNECT IDENTIFIER ‘JED’;
??? RMAN> CONFIGURE DB_UNIQUE_NAME P11AC CONNECT IDENTIFIER 'JED2';
??????????????? 在主庫我仍然備份歸檔日志。首先,在主備庫都備份歸檔提供了冗余。其次,當(dāng)發(fā)生需要恢復(fù)的事件(比如數(shù)據(jù)文件下線等)后,
??我在主庫已經(jīng)有歸檔了。我需要刪除過期的歸檔,以清理磁盤空間。
??在 Data Guard 環(huán)境下,不能使用標(biāo)準(zhǔn)的在單機(jī)刪除歸檔的命令,兩者有一點小區(qū)別。因為我們必須使用恢復(fù)目錄,
??我創(chuàng)建了一個全局腳本(global script):
??create global script dg_primary_arch
??{
????? backup archivelog all;
????? delete noprompt archivelog all completed before 'sysdate-.5';
????? delete noprompt backup of archivelog all completed before 'sysdate-2';
??}
?????????????? 在備庫我運行標(biāo)準(zhǔn)的全庫和歸檔備份,并刪除過期的備份集。在 Data Guard 環(huán)境下,將備份歸檔包含在備份全庫的命令里,
??????? 會經(jīng)常導(dǎo)致報錯 RMAN-08137: WARNING: archived log not deleted, needed for standby or upstream capture process。
??????? 為避免此報錯,你應(yīng)該將備份歸檔放在單獨的命令里。我還是創(chuàng)建一個全局腳本:
??create global script dg_standby_full
??{
????? backup database plus archivelog;
????? delete noprompt archivelog all completed before 'sysdate-1';
????? delete noprompt obsolete;
??}
????????????? 另外一個有用的技巧是,如果可能,使用共享文件系統(tǒng)進(jìn)行備份。這樣你在兩臺服務(wù)器上都可以訪問備份文件。
?????? 這樣,當(dāng)你需要恢復(fù)時,你不需要從另一臺服務(wù)器上復(fù)制文件了。但如果使用共享文件系統(tǒng)的話,你的歸檔備份雖然有兩份,
?????? 卻都放在一個文件系統(tǒng)里,如果硬盤出現(xiàn)故障,兩份備份都會丟失。
?????? 參考文檔:
?????? 1.《Oracle 11g Data Guard 物理備庫快速配置指南》
?????? 2.《三思筆記:一步一步學(xué)dataguard》
?????? 3.《Red_HatOracle11gDataGuard配置寶典》
?????? 4.其他網(wǎng)絡(luò)資料
轉(zhuǎn)載于:https://www.cnblogs.com/tippoint/archive/2013/04/25/3042981.html
總結(jié)
以上是生活随笔為你收集整理的oracle11g dataguard完全手册3-failover active dataguard(完)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: omnet++ : could not
- 下一篇: 【jQuery】用jQuery给文本框添