Oracle到PostgreSQL的不停機(jī)數(shù)據(jù)庫(kù)遷移的流程步驟
1970 年,數(shù)據(jù)庫(kù)之父 Edgar Frank Codd 發(fā)表了“數(shù)據(jù)的關(guān)系模型”論文,該論文為往后的關(guān)系型數(shù)據(jù)庫(kù)的發(fā)展奠定了基礎(chǔ)。1979 年,基于關(guān)系模型理論的數(shù)據(jù)庫(kù)產(chǎn)品 Oracle 2 首次亮相,并在過(guò)去的三四十年時(shí)間里,橫掃全球數(shù)據(jù)庫(kù)市場(chǎng)。
時(shí)間到了 1989 年,Oracle 進(jìn)軍中國(guó)市場(chǎng),場(chǎng)面幾乎也是 Oracle 一家獨(dú)大,大部分大型企業(yè)都被 Oracle 占領(lǐng)。Oracle 功能強(qiáng)大,運(yùn)行穩(wěn)定的背后,是其高額的授權(quán)費(fèi)用。盡管如此,由于 Oracle 的黏性實(shí)在太強(qiáng),在沒(méi)有替代方案的情況下,接下來(lái)的相當(dāng)長(zhǎng)一段年月里,企業(yè)也都只能乖乖掏錢。
時(shí)至今日,情況已經(jīng)發(fā)生了翻天覆地的變化,替代方案層出不窮,PostgreSQL 作為其中的一員,除了兼具多樣功能和強(qiáng)大性能之外,還具備非常優(yōu)秀的可擴(kuò)展性,可以較好地兼容 Oracle,企業(yè)也可以從長(zhǎng)期活躍的開(kāi)源社區(qū)中得到豐富的資源和技術(shù)支持,最重要的是,PostgreSQL 是開(kāi)源軟件,無(wú)需支付高昂的授權(quán)費(fèi)用,這可以為企業(yè)省下不小的支出。因此,Oracle 到 PostgreSQL 的遷移成了眾多企業(yè)的首選。
然而,Oracle 到 PostgreSQL 的遷移并不是說(shuō)遷就能遷的,有很多不得不解決的問(wèn)題。
Oracle 遷移到 PostgreSQL 不得不解決的問(wèn)題
業(yè)務(wù)的可用性:遷移必須在不影響業(yè)務(wù)的前提下進(jìn)行,換句話說(shuō),遷移時(shí)不能停機(jī),那需要考慮的事情就非常多了:存量和增量數(shù)據(jù)如何完整遷移?如何處理遷移時(shí)的性能波動(dòng)?如何實(shí)現(xiàn)應(yīng)用程序的平滑切換?等等。
表的初始化:在同步數(shù)據(jù)之前,需要手動(dòng)在 PostgreSQL 端創(chuàng)建和源端一致的表結(jié)構(gòu),然后才能從源端接收數(shù)據(jù)。當(dāng)源端有大量表且表結(jié)構(gòu)很復(fù)雜的情況下,工作量非常大。
數(shù)據(jù)結(jié)構(gòu)的映射:兩者數(shù)據(jù)結(jié)構(gòu)不同,怎么確保數(shù)據(jù)從源端同步過(guò)來(lái)后的完整性?除非你對(duì)兩者的數(shù)據(jù)模型的理解非常極致,且保證絕對(duì)不出錯(cuò),才能達(dá)到理想的結(jié)果。
源端 DDL 語(yǔ)句的聯(lián)動(dòng):如何保證源端的數(shù)據(jù)結(jié)構(gòu)發(fā)生變化時(shí),同步鏈路不中斷?那就需要實(shí)時(shí)捕獲源端 Oracle 的 DDL 變更,并及時(shí)在目標(biāo)端的 PostgreSQL 中同步執(zhí)行。
這些問(wèn)題如果可以順利解決,遷移工作將會(huì)相當(dāng)絲滑。那么如何解決呢?方法自然是有的。對(duì)于上述 4 個(gè)問(wèn)題,NineData 有絕對(duì)的發(fā)言權(quán),我們先來(lái)看看它是如何解決這些問(wèn)題的:
遷移過(guò)程不停機(jī):在不影響源端業(yè)務(wù)的情況下,進(jìn)行全量和增量數(shù)據(jù)的遷移,保證源和目標(biāo)的一致性,并在遷移完成后實(shí)施無(wú)縫切換。
結(jié)構(gòu)復(fù)制:基于目標(biāo)端數(shù)據(jù)源的特性,自動(dòng)高效地完成表的創(chuàng)建、數(shù)據(jù)結(jié)構(gòu)的映射等工作。
復(fù)制性能:基于動(dòng)態(tài)攢批、并行復(fù)制、Stream Load 等技術(shù),復(fù)制性能輕松達(dá)到 200 MB/S。
DDL 捕獲與執(zhí)行:實(shí)時(shí)檢測(cè)源端中的 DDL 操作,并同步在目標(biāo)端中執(zhí)行,保證其他業(yè)務(wù)變更能夠穩(wěn)定地進(jìn)行。
輕松解決且非常愉快,下面來(lái)看看怎么操作。
步驟一:錄入源和目標(biāo)數(shù)據(jù)源
登錄 NineData 控制臺(tái),單擊數(shù)據(jù)源管理>數(shù)據(jù)源,然后在頁(yè)面中單擊創(chuàng)建數(shù)據(jù)源,選擇需要錄入的數(shù)據(jù)源。
根據(jù)頁(yè)面提示進(jìn)行配置,然后單擊創(chuàng)建數(shù)據(jù)源完成創(chuàng)建。
步驟二:配置同步鏈路
登錄 NineData 控制臺(tái),單擊數(shù)據(jù)復(fù)制>數(shù)據(jù)復(fù)制,然后單擊創(chuàng)建復(fù)制。
根據(jù)頁(yè)面提示配置復(fù)制任務(wù),由于我們需要不停機(jī)遷移,需要在復(fù)制類型處勾選增量復(fù)制。
配置完成后啟動(dòng)任務(wù),針對(duì)您配置的所有遷移對(duì)象,NineData 會(huì)先對(duì)所有的存量數(shù)據(jù)進(jìn)行全量遷移,接下來(lái)就是實(shí)時(shí)同步 Oracle 中新增的增量數(shù)據(jù),所有新寫入的數(shù)據(jù)都將一條不漏地同步到 PostgreSQL,每當(dāng)目標(biāo)端的增量數(shù)據(jù)追平源端時(shí),任務(wù)面板中會(huì)顯示延遲 0 秒,如下圖所示。
步驟三(可選):校驗(yàn)?zāi)繕?biāo)端同步數(shù)據(jù)的完整性
除了同步功能以外,NineData 還提供了同步后源端和目標(biāo)端同步數(shù)據(jù)的對(duì)比功能,以確保目標(biāo)端數(shù)據(jù)的完整性。
登錄 NineData 控制臺(tái),單擊數(shù)據(jù)復(fù)制>數(shù)據(jù)復(fù)制,然后單擊步驟二中創(chuàng)建的復(fù)制任務(wù) ID。
單擊數(shù)據(jù)對(duì)比頁(yè)簽,并單擊開(kāi)啟數(shù)據(jù)對(duì)比(如果步驟二的任務(wù)配置中已勾選開(kāi)啟數(shù)據(jù)一致性對(duì)比,則此處直接展示對(duì)比結(jié)果)。
提示
開(kāi)啟后,系統(tǒng)將自動(dòng)對(duì)比源端和目標(biāo)端的同步對(duì)象,并給出對(duì)比結(jié)果。
您可以在一段時(shí)間后,單擊頁(yè)面中的重新對(duì)比,校驗(yàn)最新增量數(shù)據(jù)的結(jié)果。
步驟四(可選):配置任務(wù)異常告警
由于是增量遷移任務(wù),您可能需要系統(tǒng)實(shí)時(shí)監(jiān)控任務(wù)狀態(tài),在任務(wù)有異常時(shí)即刻通知您。
登錄 NineData 控制臺(tái),單擊數(shù)據(jù)復(fù)制>數(shù)據(jù)復(fù)制,然后單擊步驟二中創(chuàng)建的復(fù)制任務(wù) ID。
單擊右上角的配置告警。
輸入策略名稱,單擊保存配置即可。您可以直接使用內(nèi)置的默認(rèn)規(guī)則,在任務(wù)運(yùn)行失敗,或復(fù)制延遲大于等于 10 分鐘的時(shí)候,發(fā)送短信提醒您。您也可以自定義創(chuàng)建規(guī)則,根據(jù)您的需求來(lái)進(jìn)行通知。
最后
在 NineData 將所有數(shù)據(jù)遷移到 PostgreSQL 之后(延遲為 0),最后一步是在業(yè)務(wù)低峰期,將業(yè)務(wù)流量切換至 PostgreSQL,即可完成整個(gè) Oracle 到 PostgreSQL 的遷移。這個(gè)切換過(guò)程是非常關(guān)鍵,需要謹(jǐn)慎規(guī)劃執(zhí)行。
以上就是Oracle到PostgreSQL的不停機(jī)數(shù)據(jù)庫(kù)遷移的流程步驟的詳細(xì)內(nèi)容,更多關(guān)于Oracle到PostgreSQL數(shù)據(jù)庫(kù)遷移的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
關(guān)于sql腳本導(dǎo)入Oracle時(shí)重復(fù)生成check約束的問(wèn)題解決
這篇文章主要給大家介紹了關(guān)于sql腳本導(dǎo)入Oracle時(shí)重復(fù)生成check約束的問(wèn)題解決方法,文中給出了詳細(xì)的檢查步驟,對(duì)大家理解和解決這個(gè)問(wèn)題具有很好的幫助,需要的朋友們下面來(lái)一起看看吧。2017-05-05oracle數(shù)據(jù)庫(kù)實(shí)現(xiàn)獲取時(shí)間戳的無(wú)參函數(shù)
這篇文章主要介紹了oracle數(shù)據(jù)庫(kù)實(shí)現(xiàn)獲取時(shí)間戳的無(wú)參函數(shù)的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08Oracle創(chuàng)建和管理分區(qū)索引的操作方法
創(chuàng)建和管理分區(qū)索引(Partitioned Index)是數(shù)據(jù)庫(kù)管理中的重要任務(wù),特別是在處理大規(guī)模數(shù)據(jù)集時(shí),以下是如何在Oracle數(shù)據(jù)庫(kù)中創(chuàng)建和管理分區(qū)索引的詳細(xì)步驟和示例代碼,感興趣的朋友一起看看吧2024-08-08檢查Oracle數(shù)據(jù)庫(kù)版本的7種方法匯總
在Oracle數(shù)據(jù)庫(kù)的發(fā)展中,數(shù)據(jù)庫(kù)一直處于不斷升級(jí)狀態(tài),下面這篇文章主要給大家介紹了關(guān)于檢查Oracle數(shù)據(jù)庫(kù)版本的7種方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10Oracle Table Demo語(yǔ)句應(yīng)用介紹
在開(kāi)發(fā)過(guò)程中可能會(huì)用到oracle table demo 操作語(yǔ)句,本文將以此進(jìn)行介紹,需要的朋友可以參考下2012-11-11Oracle計(jì)算年齡的實(shí)用方法總結(jié)
這篇文章主要給大家介紹了關(guān)于Oracle計(jì)算年齡的相關(guān)資料,在我們?nèi)粘?shí)際業(yè)務(wù)中,可能需要根據(jù)某人出生日期、身份證號(hào)碼來(lái)實(shí)時(shí)計(jì)算年齡,需要的朋友可以參考下2023-09-09使用sqlplus連接Oracle數(shù)據(jù)庫(kù)問(wèn)題
這篇文章主要介紹了使用sqlplus連接Oracle數(shù)據(jù)庫(kù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12