基于GoldenGate的災(zāi)備智能切控制方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種數(shù)據(jù)庫主備系統(tǒng)切換方法,尤其涉及一種基于GoldenGate的災(zāi)備智能切控制方法。
【背景技術(shù)】
[0002]在日常維護(hù)G0LDENGATE災(zāi)備系統(tǒng)時(shí)(兩端均是ORACLE數(shù)據(jù)庫),經(jīng)常要檢查生產(chǎn)系統(tǒng)(源端)與災(zāi)備系統(tǒng)(目標(biāo)端)之間的同步是否正常,數(shù)據(jù)同步是否一致,兩端均一致,才能保持業(yè)務(wù)高效地生產(chǎn)。通過對生產(chǎn)系統(tǒng)和災(zāi)備系統(tǒng)的切換、回切來驗(yàn)證是最具有說服力的,但往往人工進(jìn)行切換、回切,需要操作的時(shí)間比較長,長達(dá)30min以上,嚴(yán)重影響業(yè)務(wù)生產(chǎn)。
[0003]現(xiàn)有人工切換的主要問題如下:一、通過人工介入進(jìn)行操作,操作流程和步驟較多,而且容易出錯(cuò),進(jìn)行一次切換的時(shí)間較長;二、人工切換由于切換操作流程不當(dāng),或檢查不到位,容易出現(xiàn)數(shù)據(jù)丟失;三、一個(gè)庫存在多個(gè)實(shí)例時(shí)進(jìn)行切換,復(fù)雜性增加;四、切換完成后往往還有數(shù)據(jù)在源端修改,應(yīng)用程序停止得不夠徹底,使得生產(chǎn)系統(tǒng)與災(zāi)備系統(tǒng)之間的同步出現(xiàn)問題。
【發(fā)明內(nèi)容】
[0004]本發(fā)明所要解決的技術(shù)問題是提供一種基于GoldenGate的災(zāi)備智能切控制方法,不但安全可靠,有效避免數(shù)據(jù)丟失,并且能夠在短時(shí)間內(nèi)完成切換,大大縮短了業(yè)務(wù)停止生產(chǎn)的時(shí)間。
[0005]本發(fā)明為解決上述技術(shù)問題而采用的技術(shù)方案是提供一種基于GoldenGate的災(zāi)備智能切控制方法,包括如下步驟:S1:在源端和災(zāi)備目標(biāo)端的節(jié)點(diǎn)主機(jī)上分別部署GoldenGate軟件進(jìn)行數(shù)據(jù)同步備份;S2:每次切換前,在源端停止實(shí)時(shí)應(yīng)用集群監(jiān)聽,避免應(yīng)用系統(tǒng)再連接到實(shí)例中;S3:獲取源端和災(zāi)備目標(biāo)端的節(jié)點(diǎn)主機(jī)上各實(shí)例的SPID,并自動(dòng)生成KILL腳本停止各實(shí)例的SPID,斷開會(huì)話,保證實(shí)例中無活動(dòng)的業(yè)務(wù)進(jìn)程;S4:在源端節(jié)點(diǎn)主機(jī)上循環(huán)檢測抽取進(jìn)程,以判斷數(shù)據(jù)抽取是否全部完成,完成了則停止抽取進(jìn)程;S5:在源端節(jié)點(diǎn)主機(jī)循環(huán)檢測投遞進(jìn)程,以判斷數(shù)據(jù)投遞是否全部完成,完成了則停止投遞進(jìn)程;S6:在源端節(jié)點(diǎn)主機(jī)啟動(dòng)反向同步的復(fù)制進(jìn)程,并提前準(zhǔn)備好接收反向同步的數(shù)據(jù);S7:在目標(biāo)端節(jié)點(diǎn)主機(jī)循環(huán)檢測復(fù)制進(jìn)程,以判斷數(shù)據(jù)復(fù)制是否全部完成,完成了則停止正向同步的復(fù)制進(jìn)程,并從當(dāng)前時(shí)間開始取數(shù)啟動(dòng)反向同步的抽取進(jìn)程;S8:最后在目標(biāo)端節(jié)點(diǎn)主機(jī)上啟動(dòng)投遞進(jìn)程。
[0006]上述的基于GoldenGate的災(zāi)備智能切控制方法,其中,所述源端節(jié)點(diǎn)主機(jī)啟動(dòng)反向同步的復(fù)制進(jìn)程后,還啟動(dòng)AEXTCHK檢查進(jìn)程,以抽取GoldenGate同步以外產(chǎn)生的數(shù)據(jù),抽取出來的數(shù)據(jù)存放在本地,根據(jù)用戶需求再確定是否將數(shù)據(jù)同步到目標(biāo)端,避免數(shù)據(jù)丟失。
[0007]上述的基于GoldenGate的災(zāi)備智能切控制方法,其中,如果源端和災(zāi)備目標(biāo)端的節(jié)點(diǎn)主機(jī)上存在多個(gè)實(shí)例,則每次通過腳本執(zhí)行切換一個(gè)實(shí)例。
[0008]上述的基于GoldenGate的災(zāi)備智能切控制方法,其中,所述步驟SI中源端節(jié)點(diǎn)主機(jī)上的GoldenGate利用抽取進(jìn)程和數(shù)據(jù)庫日志獲得數(shù)據(jù)的增量變化,將增量數(shù)據(jù)轉(zhuǎn)化為GoldenGate格式并采用10:1的壓縮率對數(shù)據(jù)壓縮后,利用投遞進(jìn)程在容災(zāi)鏈路上直接通過TCP/IP網(wǎng)絡(luò)傳輸至災(zāi)備目標(biāo)端節(jié)點(diǎn)主機(jī);所述目標(biāo)端節(jié)點(diǎn)主機(jī)上的GoldenGate通過交易重組,分批加載加快數(shù)據(jù)投遞的速度和效率,在亞秒級實(shí)現(xiàn)增量數(shù)據(jù)的復(fù)制。
[0009]上述的基于GoldenGate的災(zāi)備智能切控制方法,其中,所述步驟S7中目標(biāo)端節(jié)點(diǎn)主機(jī)獲取災(zāi)備目標(biāo)端最后應(yīng)用的SCN號(hào),查詢該SCN號(hào)對應(yīng)的時(shí)間點(diǎn),并從該時(shí)間點(diǎn)開始取數(shù)啟動(dòng)反向同步的抽取進(jìn)程。
[0010]本發(fā)明對比現(xiàn)有技術(shù)有如下的有益效果:本發(fā)明提供的基于GoldenGate的災(zāi)備智能切控制方法,不但安全可靠,有效避免數(shù)據(jù)丟失,并且能夠在短時(shí)間內(nèi)完成切換,大大縮短了業(yè)務(wù)停止生產(chǎn)的時(shí)間,具有自動(dòng)化、智能化、完整性、一致性的特點(diǎn)。
【附圖說明】
[0011]圖1為本發(fā)明基于GoldenGate的災(zāi)備智能切控制流程示意圖;
[0012]圖2為本發(fā)明基于GoldenGate的多實(shí)例災(zāi)備智能切控制架構(gòu)示意圖。
【具體實(shí)施方式】
[0013]下面結(jié)合附圖和實(shí)施例對本發(fā)明作進(jìn)一步的描述。
[0014]圖1為本發(fā)明基于GoldenGate的災(zāi)備智能切控制流程示意圖。
[0015]請參見圖1,本發(fā)明提供的基于GoldenGate的災(zāi)備智能切控制方法,包括如下步驟:
[0016]S1:在源端和災(zāi)備目標(biāo)端的節(jié)點(diǎn)主機(jī)上分別部署GoldenGate軟件進(jìn)行數(shù)據(jù)同步備份;所述源端節(jié)點(diǎn)主機(jī)上的GoldenGate利用抽取進(jìn)程和數(shù)據(jù)庫日志獲得數(shù)據(jù)的增量變化,將增量數(shù)據(jù)轉(zhuǎn)化為GoldenGate格式并采用10:1的壓縮率對數(shù)據(jù)壓縮后,利用投遞進(jìn)程在容災(zāi)鏈路上直接通過TCP/IP網(wǎng)絡(luò)傳輸至災(zāi)備目標(biāo)端節(jié)點(diǎn)主機(jī);所述目標(biāo)端節(jié)點(diǎn)主機(jī)上的GoldenGate通過交易重組,分批加載加快數(shù)據(jù)投遞的速度和效率,在亞秒級實(shí)現(xiàn)增量數(shù)據(jù)的復(fù)制;
[0017]S2:每次切換前,在源端停止RAC (Real Applicat1n Clusters,實(shí)時(shí)應(yīng)用集群監(jiān)聽),避免應(yīng)用系統(tǒng)再連接到實(shí)例中;
[0018]S3:獲取源端和災(zāi)備目標(biāo)端的節(jié)點(diǎn)主機(jī)上各實(shí)例的SPID (System Process ID,即操作系統(tǒng)進(jìn)程ID),并自動(dòng)生成KILL腳本停止各實(shí)例的SPID,斷開會(huì)話,保證實(shí)例中無活動(dòng)的業(yè)務(wù)進(jìn)程;
[0019]S4:在源端節(jié)點(diǎn)主機(jī)上循環(huán)檢測抽取進(jìn)程,以判斷數(shù)據(jù)抽取是否全部完成,完成了則停止抽取進(jìn)程;
[0020]S5:在源端節(jié)點(diǎn)主機(jī)循環(huán)檢測投遞進(jìn)程,以判斷數(shù)據(jù)投遞是否全部完成,完成了則停止投遞進(jìn)程;
[0021]S6:在源端節(jié)點(diǎn)主機(jī)啟動(dòng)反向同步的復(fù)制進(jìn)程,并提前準(zhǔn)備好接收反向同步的數(shù)據(jù);為了避免數(shù)據(jù)丟失,還可在源端啟動(dòng)AEXTCHK檢查進(jìn)程,以獲取G0LDENGATE同步之外產(chǎn)生的數(shù)據(jù),目的為了在生產(chǎn)中其他操作產(chǎn)生的數(shù)據(jù)仍可獲取出來進(jìn)行同步;
[0022]S7:在目標(biāo)端節(jié)點(diǎn)主機(jī)循環(huán)檢測復(fù)制進(jìn)程,以判斷數(shù)據(jù)復(fù)制是否全部完成,完成了則停止正向同步的復(fù)制進(jìn)程,并從當(dāng)前時(shí)間開始取數(shù)啟動(dòng)反向同步的抽取進(jìn)程;目標(biāo)端節(jié)點(diǎn)主機(jī)可獲取災(zāi)備目標(biāo)端最后應(yīng)用的SCN號(hào)(System Change Number),查詢該SCN號(hào)對應(yīng)的時(shí)間點(diǎn),并從該時(shí)間點(diǎn)開始取數(shù)啟動(dòng)反向同步的抽取進(jìn)程;
[0023]S8:最后在目標(biāo)端節(jié)點(diǎn)主機(jī)上啟動(dòng)投遞進(jìn)程。
[0024]為確保生產(chǎn)與災(zāi)備系統(tǒng)切換能順利、快速地實(shí)現(xiàn),本發(fā)明可編寫一套智能切換腳本,部署在各個(gè)節(jié)點(diǎn)中,實(shí)現(xiàn)無縫切換。一套腳本包含8個(gè)腳本,簡介如下:
[0025]fetch_sess1n_spid.sh:多實(shí)例的RAC,獲取當(dāng)前節(jié)點(diǎn)的spid,并生成KILL腳本;
[0026]fetch_sess1n_spid_other_node.sh:獲取另一節(jié)點(diǎn)的 spid,并生成 KILL 腳本;
[0027]kill_sess1n_spid.sh:殺進(jìn)程腳本,包括當(dāng)前節(jié)點(diǎn)和另一節(jié)點(diǎn)(通過ssh信任訪問);
[0028]set_env.sh:設(shè)置環(huán)境變量,每個(gè)節(jié)點(diǎn)部署時(shí)設(shè)置;
[0029]stop_listener.sh:使用 srvctl 停止 RAC 監(jiān)聽;
[0030]stop_source_process.sh:檢測并停止抽取、投遞進(jìn)程,并啟動(dòng)AEXTCHK抽取進(jìn)程,以檢查是否存在G0LDENGATE同步之外的操作;
[0031]stop_target_process.sh:檢測并停止復(fù)制進(jìn)程;
[0032]switch_ogg_SZtoBJ.sh:主腳本,以上腳本均由此腳本調(diào)用。
[0033]具體的實(shí)施方法如下:
[0034]1.正反向同步進(jìn)程均配置好,反向進(jìn)程處于stop狀態(tài);
[0035]2.抽取進(jìn)程使用E開頭,抽取進(jìn)程的參數(shù)可參考如下:
[0036]EXTRACT xxxxxx
[0037]obey/opt/oracle/product/rdbms/11.2.0/ogg/gg_ddb2_param.0by
[0038]EXTTRAIL./dirdat/xxxxxx/ss
[0039]TRANL0G0PT10NS L0GRETENT10N DISABLED
[0040]TRANL0G0PT10NS BUFSIZE 2048000
[0041]TRANL0G0PT10NS DBLOGREADER, DBLOGREADERBUFSIZE 2048000
[0042]TRANL0G0PT10NS ALTARCHIVELOGDEST+D⑶DB2_2
[0043]TRANL0G0PT10NS EXCLUDEUSER G0LDENGATE
[0044]DDL INCLUDE MAPPED
[0045]DDLOPT1NS ADDTRANDATA
[0046]CACHEMGR CACHESIZE 8192MB
[0047]BR BRDIR/opt/oracle/ogg/ggddb, BRINTERVAL 4h
[0048]DISCARDFILE./dirrpt/xxxxxx.dsc, APPEND, MEGABYTES 100
[0049]DISCARDR0LL0VER AT 6:00
[0050]REP0RTC0UNT EVERY I HOURS, RATE
[0051]FETCH0PT