實操:從Oracle到GaussDB的數據遷移

莫熙鍾,新炬網絡數據庫運維專家。精通Oracle、MySQL、PostgreSQL等數據庫運維技術,擁有Oracle OCP、MySQL OCP、GaussDB HCIP等認證,擁有豐富的數據庫系統架構轉型、分佈式改造、數據遷移經驗,擅長開源數據庫轉型技術支持,參與多個行業核心系統的Oracle到MySQL轉型項目。2019年開始學習和研究華為GaussDB數據庫運維技術,目前正在積極參與國產數據庫轉型改造項目和國產數據庫通用型自動化運維工具的研發等工作。

一、背景

最近某省運營商O域核心業務系統的數據庫計劃從Oracle遷移至GaussDB,數據庫服務器也從SUN小型機轉到華為TaishanARM服務器。本人有幸參與其中,主要負責Oracle到GaussDB的數據遷移環節。數據遷移前期使用Datasync工具進行導數測試,但由於導數效率無法滿足生產系統的停機要求,而華為這個時候正好推出新的遷移工具—SDR,於是利用SDR進行了一輪新的遷移測試。

1、環境信息

1)硬件配置信息

目標庫Taishan服務器硬件配置信息如下所示:

实操:从Oracle到GaussDB的数据迁移

源庫Sun小機硬件配置如下所示:

实操:从Oracle到GaussDB的数据迁移

2)軟件配置信息

Taishan服務器操作系統及數據庫軟件版本如下所示:

实操:从Oracle到GaussDB的数据迁移

源庫Sun小機操作系統及數據庫軟件版本如下所示:

实操:从Oracle到GaussDB的数据迁移

由於本次文章的重點不在於環境的搭建,所以操作系統及GaussDB的安裝過程就不細述。

2、SDR產品描述

GaussDB SDR(Swift Data Replicator)是一款基於日誌的實時CDC軟件,支持對多種關係型數據庫交易數據的實時捕獲、轉換與加載,主要應用於數據遷移、數據複製、異地容災、應急備份、雙業務中心、實時數倉/數據湖、查詢卸載等場景。主要特點有:實時、高效的數據同步、豐富的異構同步能力、無插件、非侵入、安全無干擾和全程可視化運維管理等。

二、SDR的環境準備

  • 支持源端為Oracle 9i及以上版本(測試使用的SDR版本只支持到11R2)

  • 支持目標端為GaussDB 100 V300R100

  • 持可選schema、可選表進行全量數據同步

  • 支持可配條件導出源庫數據,將滿足條件的數據導入目標庫

  • 支持多表併發同步,可配置併發個數

  • 支持單表數據的併發導出,可配置併發個數,不支持單表的併發導入

  • 支持自動同步表結構,自動進行數據類型映射,類型映射見下表

1)硬件要求

SDR目前只支持x86的64位操作系統,對硬件資源的要求主要取決於源端數據庫的數據變化量。

实操:从Oracle到GaussDB的数据迁移

表 2-1 資源要求

2)軟件要求

实操:从Oracle到GaussDB的数据迁移

注:本次遷移測試將SDR部署在一臺獨立的x86服務器上,通過數據庫業務端口訪問兩邊數據庫,由於大部分遷移操作都是平臺網頁進行,因此還建議準備一臺能直接訪問這臺x86服務7007/7008/7009端口的windows服務器。

1、SDR工具準備

1)創建安裝用戶和目錄(x86服務器上操作)

為SDR軟件創建一個新用戶,並創建一個安裝目錄/home/sdr:

su - root

groupaddsdr

useradd -g sdr -d /home/sdr -s /bin/shsdr

chown -R sdr:sdr /home/sdr/

2)切換到安裝用戶下,上傳安裝包

su - sdr

ls -l / home /sdr/

depend.tgz

GaussDB_SDR_8.0.RC1_RHEL_x86_64.tar.gz

licence.dat.tar.gz

3)解壓所有壓縮包

tar -xf depend.tgz

tar -xf GaussDB_SDR_8.0.RC1_RHEL_x86_64.tar.gz

tar -xf licence.dat.tar.gz

2、SDR工具安裝

1)設置SDR_HOME環境變量

su - sdr

export DIP_HOME=/opt/sdr

2)執行安裝

cd /home/sdr

./GaussDB_SDR_8.0.RC1_INSTALL

Creating directory SDR.pack

Verifying archive integrity... All good.

Uncompressing swift data replicator 100%

Swift Data Replicator installation!

©2019 Huawei Technologies Co., Ltd.

Swift Data Replicator software will install into directory [/home/sdr]

Please input Swift Data Replicator web server IP address: [127.0.0.1]

Please input Swift Data Replicator web server port: [7008]

Please input Swift Data Replicator manager server IP address: [127.0.0.1]

Please input Swift Data Replicator manager server port: [7009]

Please input Swift Data Replicator queue transfer server port: [7007]

Please input Swift Data Replicator admin server port: [7006]

Please input Swift Data Replicator kafka component port: [7005]

Please input Swift Data Replicator database IP address: [127.0.0.1]

Please input Swift Data Replicator database port: [1888]

Please set default Swift Data Replicator Share Memory Size:

[1]- 1GB

[2]- 4GB

[3]- 8GB

[4]-16GB

[5]-input other value(GB)

please choose 1,2,3,4: [1]4

Input value and choice list below, please confirm:

http IP address : 127.0.0.1

http port : 7008

Manager IP address : 127.0.0.1

Manager Port : 7009

Transfer Port : 7007

AdminServerPort : 7006

Kafka component Port : 7005

SDR Database IP : 127.0.0.1

SDR Database Port : 1888

Share memory size : 16G

Kafka Server Port : 7005

Press any key to begin install. ( Ctrl-c to interrupt )

Uncompressing bin.tgz...

Uncompressing dbpkg.tgz...

Uncompressing etc.tgz...

Uncompressing lib.tgz...

Uncompressing web.tgz...

Wait a few of minutes, installing database...

Checking parameters...

Checking user...

Checking old install...

Checking kernel parameters...

Checking dir...

Checking integrality of run file...

Decompressing run file...

Warning: Dialect Scripts not found! But still proceed installation

Setting user env...

Checking data dir and config file

Initiate db instance...

Creating database...

Changing file permission due to security audit...

Install successfully, for more detail information see /home/sdr/zengineinstall.log.

Refreshing config...

Creating db user...

Initialize data...

all done →順利安裝完成

3)配置depend

進入depend目錄。

cd /home/sdr/depend/

sh enable.sh

Enable success

4)加載 licence文件

cd /home/sdr

cp licence.dat etc/

ls etc/

dip_config.xml licence.dat odbcinst.ini version xlog.ini

5)啟動SDR組件

啟動組件前需要先加載環境變量

su - sdr

cd /home/sdr/

../env

(1)啟動後臺數據庫

cd /home/sdr/db/app/bin

python zctl.py -t start

(2)啟動其他組件

cd /home/sdr/

start_all

(3)啟動web服務

cd /home/sdr

start_web

至此,SDR所有安裝準備工作完成。

三、SDR配置

SDR管理界面需要通過瀏覽器進入,瀏覽器可選擇chrome或IE 9.0以上。網址為x86服務器的IP,端口為安裝時指定的端口,必須是HTTPS,如https://IP:port。初始帳號密碼admin/admin。

实操:从Oracle到GaussDB的数据迁移

圖-1-登錄 SDR 控制檯

登錄後,需要先新建一個項目。

实操:从Oracle到GaussDB的数据迁移

圖-2-創建項目

輸入項目名稱,並保存。

點擊進入項目後,會進入配置管理主界面。點擊左上角的“新建”按鈕,創建任務組。

实操:从Oracle到GaussDB的数据迁移

圖 -3-新建任務組

輸入組名,和該組下進程的運行日誌保留時間,點擊“保存組”。

本次遷移測試是從Oracle到GaussDB,屬於異構數據庫遷移,可以直接使用模板庫中的異構鏈路進行配置,直接點擊“異構鏈路”即可,如下圖所示:

实操:从Oracle到GaussDB的数据迁移

圖 -4-異構鏈路配置

生成鏈路後,雙擊鏈路中的源庫組件,在彈出的對話框中進行源庫配置。(第一次配置後,可以選擇作為模板保存,以便後續使用)。

实操:从Oracle到GaussDB的数据迁移

圖 -5-源庫數據庫配置

注:源數據庫類型為Oracle時需要對導出的對象添加附加日誌,添加附加日誌的SQL可以在“必要環境配置”中一鍵生成,並拿到源庫中執行。

配置完源庫信息後,接下來要配置捕獲進程,捕獲進程主要是用於從源庫中抽數,可配置需要遷移的schema和對象類型,以及抽數時間間隔,分配內存等參數,配置如下:

实操:从Oracle到GaussDB的数据迁移

圖-6-捕獲配置

实操:从Oracle到GaussDB的数据迁移

圖-7-配置捕獲進程的高級選項

注:源庫為Oracle RAC時,需要把所有節點的信息都輸入進去,並且選擇“ENABLE”

配置好捕獲進程之後,接下來需要配置隊列信息。整個鏈路需要配置兩個隊列,一個是導出隊列,一個是導入隊列,可以先按順序配置導出隊列。具體配置如下:

实操:从Oracle到GaussDB的数据迁移

圖 -8-配置導出隊列

隊列配置完成後,需要配置ETL轉換環節。在配置好源庫信息後,ETL的大部分內容都會自動填充,直接使用默認配置就完事了。具體配置如下:

实操:从Oracle到GaussDB的数据迁移

圖 -9- 配置ETL

接著是配置導入隊列,這裡不多敘述。配置如下:

实操:从Oracle到GaussDB的数据迁移

圖 -10- 配置導入隊列

按鏈路順序,接下來是配置轉載進程,但在配置之前,會提示需要先配置好目標庫信息,所以只能先跳到最後的目標庫信息配置,完成後再返回來配置轉載進程信息。所以下面是配置目標GaussDB庫的信息(同樣,第一次配置時可以選擇保存為GaussDB庫的模板,方便後續使用。)

实操:从Oracle到GaussDB的数据迁移

圖 -11- 配置目標庫信息

接下來終於可以愉快地配置轉載進程信息了。轉載進程可配置的內容比較多,主要分為:包含條件,排除條件和高級選項。

包含條件中可配置要導入的schema和對象類型,以及是否在目標庫替換schema_name。(本次測試進行了schema_name的轉換,測試結果順利。)

实操:从Oracle到GaussDB的数据迁移

圖 -12- 配置裝載包含條件

接下來是配置排除條件,本次測試沒有添加排除條件,有需要的同學可添加測試。

实操:从Oracle到GaussDB的数据迁移

圖 -13- 配置裝載排除條件

下面是配置高級選項,下面截圖是所有默認設置,可按需進行調整。

实操:从Oracle到GaussDB的数据迁移

圖 -14- 配置裝載高級選項

確認保存後,遷移所需的各項組件配置完成。

四、SDR全量遷移

SDR工具自帶數據初始化的功能,點擊工具欄的“工具集 >存量數據同步”,彈出配置界面。可配置導出任務的併發數以及單表的併發數,需注意控制併發數大小,極端情況可能會出現導出進程總數等於任務併發數 * 表內併發數。另外,“將數據導出為字符串”的選項必須勾選,不然速度雖然會極大加快,但是導出導入失敗率也會大大提高。

实操:从Oracle到GaussDB的数据迁移

圖 -15- 配置全量數據同步-導出條件配置

(注:開啟初始化之前,需要在目標環境手動創建用戶/權限/表空間等,創建命令跟Oracle基本一致。)

導出條件配置完並保存後,接下來配置導入條件配置。由於目標庫沒有業務壓力,併發數可選擇大些,也可根據需求選擇是否“重建目標表”,“清空目標表”和“重建索引”等選項。

实操:从Oracle到GaussDB的数据迁移

圖-16- 配置全量數據同步-導入條件配置

配置完成兵保存後,點擊“開始全同步”後即開始存量數據同步。

实操:从Oracle到GaussDB的数据迁移

圖 -17-查看全量同步實時信息

等待導出導入完成後即存量數據的遷移工作。遷移過程存在的報錯信息可以在“導出錯誤信息”和“導入錯誤信息”中直接查閱。如果報錯信息缺失或不足,可以進入到x86服務器中安裝目錄的log目錄查看更詳細信息。

五、SDR增量遷移(正式遷移使用的步驟)

劃重點!!前面的全量遷移和下面要說的增量遷移是兩回事,如果按照前面步驟做完全量數據遷移,要做增量遷移也需要把目標庫的數據全刪掉重新再來!

在使用增備前,需要先從源庫中獲取最新的scn號。在源端Oracle庫獲取最新的SCN號:

select current_scn from v$database;

CURRENT_SCN

------------------

16493654040783

1、開啟捕捉進程

需要提前按文“SDR全量遷移”配置異構鏈路,這裡不復述。配置完成後單獨開啟捕捉進程。在工作區選擇捕獲進程後,點擊“啟動”即可開啟。

实操:从Oracle到GaussDB的数据迁移

圖-18- 開啟捕捉進程

2、啟動存量備份

這次存量備份需要把拿到的最新scn號輸入進去,以便把這個scn號的所有數據都同步到目標庫。

实操:从Oracle到GaussDB的数据迁移

圖-19- 配置存量數據同步

3、啟動增備

等待存量備份完成後,單獨開啟轉換和裝載進程。以指定SCN方式啟動轉換進程,輸入的scn就是在一開始獲取到的最新SCN號。

实操:从Oracle到GaussDB的数据迁移

圖-20- 指定scn啟動轉換進程

ETL啟動完成後如圖:

实操:从Oracle到GaussDB的数据迁移

圖-21- 開啟轉換進程後

以指定SCN方式啟動裝載進程,輸入的scn就是在一開始獲取到的最新SCN號。

圖-22- 指定scn啟動裝載進程

实操:从Oracle到GaussDB的数据迁移

圖-23- 開啟裝載進程後

都啟動完成後,在工作區選擇“列表”方式查看各進程狀態,都為running則正常。

实操:从Oracle到GaussDB的数据迁移

圖-24- 列表方式查看狀態

至此,增備啟動完成。

增備發起後,源庫對操作表的DML和DDL都會準實時同步到目標端,直到手動終止或報錯為止。(部分DDL不支持,例如:add database,add datafile,role相關操作等等)

4、遷移過程問題

1)選擇自動創建表的時候,分區表的分區信息(interval等)無法自動同步,導致導入GaussDB後分區表變回普通表

解決思路:在開始導數前,手動在目標環境創建所有分區表,在存量數據導入時不選擇“重建表”選項

2)導出時,一個表上同時有long和clob類型的字段會報錯

報錯信息:table[dcpp.aqua_explain_1483468080]include LOB and LONG column,unsupport

解決思路:在開始導數前,手動在目標環境創建所有報錯表,在存量數據導入時不選擇“重建表”選項

3)啟動存量數據同步時,即使是同樣的配置選項,點擊“開始全同步“後,經常出現同步進程無法正常啟動的問題

具體現象是:

  • 耗時:00H00M00S ,不開始計時

  • 源庫Oracle中,發起一個查詢全量表信息的SQL後,沒有繼續執行具體表的導出SQL,而是直接終結會話

  • 導出/導入報錯信息中,沒有任何信息

解決思路:多嘗試幾次,或者降低併發量。

六、小結

使用過程感覺SDR比較類似Oracle的OGG工具。工作流程可簡化為:指定scn導入此scn前所有數據進行初始化,初始化完成後根據此scn開始自動增量同步,直至手動結束同步。整個遷移過程只需要前期配置好同步進程,後期人工介入的時間就非常少(定期檢查同步進程狀態和日誌狀態還是必須的),而且因為數據一直在準實時同步,因此生產系統上的遷移時間就可以壓縮的非常短,可以預留更多的時間做數據校驗和其他操作。

>>>>

2020 Gdevops全球敏捷運維峰會將在北京開啟年度首站!重點圍繞數據庫、智慧運維、Fintech金融科技領域,攜手阿里、騰訊、螞蟻金服、中國銀行、平安銀行、中郵消費金融、建設銀行、農業銀行、民生銀行、中國聯通大數據、浙江移動、新炬網絡等技術代表,展望雲時代下數據庫發展趨勢、破解運維轉型困局。

实操:从Oracle到GaussDB的数据迁移


分享到:


相關文章: