Oracle 災(zāi)備切換,如何能做到又快又穩(wěn)齿拂?

年底了很多客戶(hù)都在借著銀監(jiān)的窗口進(jìn)行容災(zāi)切換演練驳规。這兩年有一個(gè)明顯的趨勢(shì),就是監(jiān)管對(duì)容災(zāi)的要求越來(lái)越高署海。早些年的容災(zāi)通常是擺設(shè)吗购,只需要解決有的問(wèn)題,至于能不能切過(guò)去砸狞,切過(guò)去能不能頂?shù)米∧砻悖瑳](méi)有考慮太多。如今不僅要確保能切過(guò)去刀森,并且還需要切過(guò)去運(yùn)行一天甚至是一周的時(shí)間踱启,對(duì)于切換時(shí)間同樣也有很高的要求。

雖然 DataGuard 是非常成熟的容災(zāi)技術(shù),但是受各種運(yùn)行環(huán)境的影響埠偿,仍然可能在切換過(guò)程中出現(xiàn)各種意外透罢,導(dǎo)致切換時(shí)間超時(shí)。今天我們就來(lái)梳理一下切換過(guò)程中的各種坑胚想,幫你理清楚整個(gè)的切換流程琐凭。

切換過(guò)程梳理

首先我們簡(jiǎn)單列舉出常規(guī)的災(zāi)備切換流程芽隆,便于更好的理解整個(gè)過(guò)程浊服。

1.停止業(yè)務(wù)系統(tǒng)的運(yùn)行

2.完成數(shù)據(jù)庫(kù)主備切換

3.修改數(shù)據(jù)庫(kù)DNS解析 (或者應(yīng)用修改連接串)

4.啟動(dòng)業(yè)務(wù)系統(tǒng),確認(rèn)連接到新主庫(kù)

上述的步驟中胚吁,1/3/4主要是網(wǎng)絡(luò)和業(yè)務(wù)系統(tǒng)的調(diào)整牙躺,不在這次討論的范圍。今天我們重點(diǎn)要討論的是第二步腕扶。

接著孽拷,我們從數(shù)據(jù)庫(kù)內(nèi)部對(duì)主備切換過(guò)程進(jìn)行一個(gè)細(xì)粒度的分解。

12c之前的切換過(guò)程是這樣的半抱,

a. 主庫(kù)發(fā)出切換備庫(kù)的命令后脓恕,發(fā)起一次日志切換(,這個(gè)日志中會(huì)包含日志結(jié)束的標(biāo)記)窿侈,如果命令中帶有with session shutdown炼幔,還會(huì)殺掉數(shù)據(jù)庫(kù)中的活動(dòng)會(huì)話

b. 備庫(kù)接收到歸檔日志后進(jìn)行Media Recovery,應(yīng)用到日志結(jié)束標(biāo)記后史简,完成日志同步

c. 主庫(kù)接收到備庫(kù)完成日志應(yīng)用后乃秀,將控制文件中的角色修改為Standby Database,然后以abort的方式關(guān)閉主庫(kù)

d. 備庫(kù)上發(fā)起切換主庫(kù)的命令圆兵,關(guān)閉MRP進(jìn)程跺讯,清理在線日志文件,將控制文件中的角色修改為Primary Database

e. 新的主庫(kù)上執(zhí)行open命令殉农,打開(kāi)數(shù)據(jù)庫(kù)對(duì)外提供服務(wù)

f. 后續(xù)再啟動(dòng)新的備庫(kù)刀脏,開(kāi)啟MRP日志應(yīng)用 (這個(gè)時(shí)候已經(jīng)不影響業(yè)務(wù)系統(tǒng)的使用)

在這個(gè)過(guò)程中,容易出意外的 a 和 e 兩步超凳,一個(gè)是原主庫(kù)的關(guān)閉愈污,一個(gè)是新主庫(kù)的啟動(dòng)。

影響原主庫(kù)關(guān)閉速度的原因

影響原主庫(kù)關(guān)閉速度主要有兩個(gè)原因聪建,

1.帶業(yè)務(wù)切換的場(chǎng)景中钙畔,數(shù)據(jù)庫(kù)中有大量的會(huì)話, 關(guān)閉數(shù)據(jù)庫(kù)時(shí)需要?dú)⒌暨@些會(huì)話金麸,這個(gè)過(guò)程消耗了很多的時(shí)間擎析。

? 為了規(guī)避這個(gè)問(wèn)題,我們可以先關(guān)閉或者部分關(guān)閉應(yīng)用;

2.關(guān)閉過(guò)程中遇到Bug

? 在12c的環(huán)境下進(jìn)行 DG 切換時(shí)揍魂,可能會(huì)遇到 SCM0 進(jìn)程長(zhǎng)時(shí)間無(wú)法關(guān)閉的問(wèn)題桨醋,解決方法是禁用 DLM 統(tǒng)計(jì)信息收集。

Active process 8968 user 'oracle' program 'oracle@db24pr02 (SCM0)', not in a wait

Active process 8968 user 'oracle' program 'oracle@db24pr02 (SCM0)', not in a wait

alter system set "_dlm_stats_collect" = 0 scope = spfile sid = '*’;

SCM0 (Slave DLM(Distributed Lock Management) Statistics Collection and Management)后臺(tái)進(jìn)程負(fù)責(zé)收集和管理全局入隊(duì)服務(wù)(GES)和全局緩存服務(wù)(GCS)的統(tǒng)計(jì)信息现斋;只有在數(shù)據(jù)庫(kù)中啟用了DLM統(tǒng)計(jì)信息收集 SCM0 才會(huì)存在喜最, 根據(jù)官方文檔描述,在12.2版本中即使收集了 DLM 統(tǒng)計(jì)信息庄蹋,use these stats service based affinity and cache warmup功能也是禁用的瞬内,只是為了后續(xù)版本準(zhǔn)備,所以在禁用該進(jìn)程不會(huì)對(duì)12CR2版本產(chǎn)生負(fù)面影響限书。

影響新主庫(kù)open速度的原因

不論備庫(kù)是 mount 狀態(tài)還是 open read only 狀態(tài)虫蝶,切換成主庫(kù)角色后,都會(huì)變成 mount 狀態(tài)倦西,需要執(zhí)行 open 命令打開(kāi)能真。

在 12C 的環(huán)境下打開(kāi)主庫(kù)時(shí),可能會(huì)遇到長(zhǎng)時(shí)間等待 "clear SRLs" 的問(wèn)題扰柠,導(dǎo)致主庫(kù)遲遲不能正常對(duì)外提供服務(wù)粉铐。

Sleep 80 seconds and then try to clear SRLs in 17 time(s)

......

Successfully onlined Undo Tablespace 2.

Undo initialization finished serial:0 start:363400623 end:363952914 diff:552291 ms (552.3 seconds)

這個(gè)問(wèn)題是因?yàn)橛|發(fā)Bug 23263748,因此建議在 12C 的環(huán)境中打上這個(gè)補(bǔ)丁卤档。

關(guān)于切換流程的優(yōu)化

12C 之前的切換步驟是這樣的蝙泼,

## 主庫(kù)切換成備庫(kù)

alter database commit to switchover to physical standby with session shutdown;

## 備庫(kù)切換成主庫(kù)

alter database commit to switchover to primary;

alter database open;

核心的步驟其實(shí)就兩條,但這里存在幾個(gè)問(wèn)題:

1.對(duì)于能夠正常切換成功裆装,沒(méi)有明確的判斷條件踱承。官方提供了 v$database.switchover_status字段,分別用Allow哨免、NotAllow和SessionActive來(lái)表示允許或者不允許切換茎活,以及是否還有活動(dòng)會(huì)話存在。但即使是Allow狀態(tài)琢唾,也仍然存在很多切換失敗的案例载荔;

2.切換命令需要分別連接到主備庫(kù)執(zhí)行,這也造成了一些不便采桃,尤其是現(xiàn)在很多客戶(hù)都用自動(dòng)化切換懒熙,會(huì)多出一次主機(jī)登錄的動(dòng)作;

3.主庫(kù)執(zhí)行切備庫(kù)的命令后普办,什么時(shí)候執(zhí)行備切主的命令工扎,需要自行判斷。尤其是自動(dòng)化場(chǎng)景中衔蹲,也會(huì)造成一定的麻煩肢娘。

所以12c之后對(duì)DG切換進(jìn)行了增強(qiáng),增加一個(gè)verify命令,驗(yàn)證成功則說(shuō)明具備主備切換條件橱健,驗(yàn)證失敗則需要進(jìn)一步分析失敗的原因而钞。正式切換的命令也只有一條,在主庫(kù)上執(zhí)行這條命令后拘荡,會(huì)自動(dòng)完成一系列的切換動(dòng)作臼节,不需要過(guò)多的干預(yù)。

## 校驗(yàn)ADG切換

alter database switchover to coredg verify;

## 正式切換

alter database switchover to coredg;

關(guān)于異常切換

以上我們所討論的都是正常的例行切換珊皿,災(zāi)備庫(kù)還有一個(gè)更重要的功能就是為了應(yīng)對(duì)異常情況或者極端場(chǎng)景网缝,比如主庫(kù)數(shù)據(jù)庫(kù)損壞或者主生產(chǎn)中心地震、火災(zāi)等亮隙,這時(shí)候需要在沒(méi)有主庫(kù)的情況下拉起備庫(kù)途凫,繼續(xù)對(duì)外提供服務(wù)垢夹。在這些場(chǎng)景下會(huì)面臨數(shù)據(jù)丟失的風(fēng)險(xiǎn)溢吻。

為了說(shuō)清楚這個(gè)問(wèn)題,我們簡(jiǎn)單介紹一下 DG 支持的三種保護(hù)模式果元。

雖然提供了3種保護(hù)模式促王,但絕大多數(shù)環(huán)境中為了不影響主庫(kù)的可用性和性能,DG 庫(kù)均配置為最大性能模式而晒,存在著理論上丟失數(shù)據(jù)的可能蝇狼。因此一旦涉及到有損切換,就不得不掂量下到底會(huì)丟多少數(shù)據(jù)倡怎。尤其是像金融行業(yè)迅耘,對(duì)于 RTO 和 RPO 都有著嚴(yán)格的要求,核心系統(tǒng)的 RPO 要求甚至是 0 监署。

為了滿(mǎn)足業(yè)務(wù)系統(tǒng) RPO 的要求颤专,同時(shí)又盡量減少對(duì)性能的影響,12C 引入了一個(gè)新的組件 Far Sync钠乏。相比于普通的 DG 庫(kù)栖秕,F(xiàn)ar Sync 實(shí)例有兩個(gè)特點(diǎn):

1.只有實(shí)例和控制文件,沒(méi)有數(shù)據(jù)文件晓避,節(jié)省了保存數(shù)據(jù)文件所需要的存儲(chǔ)開(kāi)銷(xiāo)簇捍;

2.輕量級(jí)的架構(gòu),可以將 Far Sync 實(shí)例部署在生產(chǎn)本地機(jī)房俏拱,配置為實(shí)時(shí)同步模式接收主庫(kù)的歸檔日志文件暑塑,異步分發(fā)到遠(yuǎn)程災(zāi)備節(jié)點(diǎn)。

部署了 Far Sync 的災(zāi)備環(huán)境中锅必,最大的好處是可以進(jìn)行無(wú)損的 Failover 切換事格。因?yàn)橹鲙?kù)的日志是實(shí)時(shí)同步到 Far Sync 實(shí)例的,所以在做 Failover 的時(shí)候并沒(méi)有數(shù)據(jù)損失,只是 RTO 的時(shí)間會(huì)增加一些分蓖。在一個(gè)正常傳輸?shù)木W(wǎng)絡(luò)環(huán)境中尔艇,這點(diǎn)時(shí)間幾乎可以忽略不計(jì)。

總結(jié)

這篇文檔中主要介紹了 DG 切換過(guò)程中可能遭遇的問(wèn)題么鹤,影響 DG 切換時(shí)效终娃;也對(duì)比了 12C 版本前后切換過(guò)程的差異,總體的趨勢(shì)是切換過(guò)程更加簡(jiǎn)便和智能蒸甜,不少的客戶(hù)已經(jīng)能夠在1分鐘內(nèi)完成例行的主備切換棠耕,對(duì)于強(qiáng)一致性要求的 Oracle 數(shù)據(jù)庫(kù)盅藻,能做到這個(gè)水平粮呢,已經(jīng)是非常的難能可貴羽氮;對(duì)于災(zāi)難切換溅固,給大家介紹了新的 Far Sync 架構(gòu)阳惹,能夠在對(duì)數(shù)據(jù)庫(kù)性能影響最小的情況下撼港,做到數(shù)據(jù)零丟失茫蛹,對(duì)于 RPO 要求為零的業(yè)務(wù)猖吴,是一個(gè)不錯(cuò)選擇憔恳。

最后瓤荔,大家在容災(zāi)切換過(guò)程中遇到哪些坑,也歡迎留言一起討論钥组。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末输硝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子程梦,更是在濱河造成了極大的恐慌点把,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屿附,死亡現(xiàn)場(chǎng)離奇詭異郎逃,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)拿撩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)衣厘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人压恒,你說(shuō)我怎么就攤上這事影暴。” “怎么了探赫?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵型宙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我伦吠,道長(zhǎng)妆兑,這世上最難降的妖魔是什么魂拦? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮搁嗓,結(jié)果婚禮上芯勘,老公的妹妹穿的比我還像新娘。我一直安慰自己腺逛,他們只是感情好荷愕,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著棍矛,像睡著了一般安疗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上够委,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天荐类,我揣著相機(jī)與錄音,去河邊找鬼茁帽。 笑死玉罐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脐雪。 我是一名探鬼主播厌小,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼战秋!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起讨韭,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤脂信,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后透硝,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體狰闪,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年濒生,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了埋泵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡罪治,死狀恐怖丽声,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情觉义,我是刑警寧澤雁社,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站晒骇,受9級(jí)特大地震影響霉撵,放射性物質(zhì)發(fā)生泄漏磺浙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一徒坡、第九天 我趴在偏房一處隱蔽的房頂上張望撕氧。 院中可真熱鬧,春花似錦喇完、人聲如沸呵曹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)奄喂。三九已至,卻和暖如春海洼,著一層夾襖步出監(jiān)牢的瞬間跨新,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工坏逢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留域帐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓是整,卻偏偏與公主長(zhǎng)得像肖揣,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子浮入,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容