本文轉載自dbaplus社羣(dbaplus)
python
做者介紹
web
莫熙鍾,新炬網絡數據庫運維專家。精通Oracle、MySQL、PostgreSQL等數據庫運維技術,擁有Oracle OCP、MySQL OCP、GaussDB HCIP等認證,擁有豐富的數據庫系統架構轉型、分佈式改造、數據遷移經驗,擅長開源數據庫轉型技術支持,參與多個行業核心系統的Oracle到MySQL轉型項目。2019年開始學習和研究華爲GaussDB數據庫運維技術,目前正在積極參與國產數據庫轉型改造項目和國產數據庫通用型自動化運維工具的研發等工做。chrome
最近某省運營商O域核心業務系統的數據庫計劃從Oracle遷移至GaussDB,數據庫服務器也從SUN小型機轉到華爲TaishanARM服務器。本人有幸參與其中,主要負責Oracle到GaussDB的數據遷移環節。數據遷移前期使用Datasync工具進行導數測試,但因爲導數效率沒法知足生產系統的停機要求,而華爲這個時候正好推出新的遷移工具—SDR,因而利用SDR進行了一輪新的遷移測試。
數據庫
1)硬件配置信息
swift
目標庫Taishan服務器硬件配置信息以下所示:windows
源庫Sun小機硬件配置以下所示:瀏覽器
2)軟件配置信息安全
Taishan服務器操做系統及數據庫軟件版本以下所示:服務器
源庫Sun小機操做系統及數據庫軟件版本以下所示:微信
因爲本次文章的重點不在於環境的搭建,因此操做系統及GaussDB的安裝過程就不細述。
GaussDB SDR(Swift Data Replicator)是一款基於日誌的實時CDC軟件,支持對多種關係型數據庫交易數據的實時捕獲、轉換與加載,主要應用於數據遷移、數據複製、異地容災、應急備份、雙業務中心、實時數倉/數據湖、查詢卸載等場景。主要特色有:實時、高效的數據同步、豐富的異構同步能力、無插件、非侵入、安全無干擾和全程可視化運維管理等。
支持源端爲Oracle 9i及以上版本(測試使用的SDR版本只支持到11R2)
支持目標端爲GaussDB 100 V300R100
持可選schema、可選表進行全量數據同步
支持可配條件導出源庫數據,將知足條件的數據導入目標庫
支持多表併發同步,可配置併發個數
支持單表數據的併發導出,可配置併發個數,不支持單表的併發導入
支持自動同步表結構,自動進行數據類型映射,類型映射見下表
1)硬件要求
SDR目前只支持x86的64位操做系統,對硬件資源的要求主要取決於源端數據庫的數據變化量。
表 2-1 資源要求
2)軟件要求
注:本次遷移測試將SDR部署在一臺獨立的x86服務器上,經過數據庫業務端口訪問兩邊數據庫,因爲大部分遷移操做都是平臺網頁進行,所以還建議準備一臺能直接訪問這臺x86服務7007/7008/7009端口的windows服務器。
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
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管理界面須要經過瀏覽器進入,瀏覽器可選擇chrome或IE 9.0以上。網址爲x86服務器的IP,端口爲安裝時指定的端口,必須是HTTPS,如https://IP:port。初始賬號密碼admin/admin。
圖-1-登陸 SDR 控制檯
登陸後,須要先新建一個項目。
圖-2-建立項目
輸入項目名稱,並保存。
點擊進入項目後,會進入配置管理主界面。點擊左上角的「新建」按鈕,建立任務組。
圖 -3-新建任務組
輸入組名,和該組下進程的運行日誌保留時間,點擊「保存組」。
本次遷移測試是從Oracle到GaussDB,屬於異構數據庫遷移,能夠直接使用模板庫中的異構鏈路進行配置,直接點擊「異構鏈路」便可,以下圖所示:
圖 -4-異構鏈路配置
生成鏈路後,雙擊鏈路中的源庫組件,在彈出的對話框中進行源庫配置。(第一次配置後,能夠選擇做爲模板保存,以便後續使用)。
圖 -5-源庫數據庫配置
注:源數據庫類型爲Oracle時須要對導出的對象添加附加日誌,添加附加日誌的SQL能夠在「必要環境配置」中一鍵生成,並拿到源庫中執行。
配置完源庫信息後,接下來要配置捕獲進程,捕獲進程主要是用於從源庫中抽數,可配置須要遷移的schema和對象類型,以及抽數時間間隔,分配內存等參數,配置以下:
圖-6-捕獲配置
圖-7-配置捕獲進程的高級選項
注:源庫爲Oracle RAC時,須要把全部節點的信息都輸入進去,而且選擇「ENABLE」
配置好捕獲進程以後,接下來須要配置隊列信息。整個鏈路須要配置兩個隊列,一個是導出隊列,一個是導入隊列,能夠先按順序配置導出隊列。具體配置以下:
圖 -8-配置導出隊列
隊列配置完成後,須要配置ETL轉換環節。在配置好源庫信息後,ETL的大部份內容都會自動填充,直接使用默認配置就完事了。具體配置以下:
圖 -9- 配置ETL
接着是配置導入隊列,這裏很少敘述。配置以下:
圖 -10- 配置導入隊列
按鏈路順序,接下來是配置轉載進程,但在配置以前,會提示須要先配置好目標庫信息,因此只能先跳到最後的目標庫信息配置,完成後再返回來配置轉載進程信息。因此下面是配置目標GaussDB庫的信息(一樣,第一次配置時能夠選擇保存爲GaussDB庫的模板,方便後續使用。)
圖 -11- 配置目標庫信息
接下來終於能夠愉快地配置轉載進程信息了。轉載進程可配置的內容比較多,主要分爲:包含條件,排除條件和高級選項。
包含條件中可配置要導入的schema和對象類型,以及是否在目標庫替換schema_name。(本次測試進行了schema_name的轉換,測試結果順利。)
圖 -12- 配置裝載包含條件
接下來是配置排除條件,本次測試沒有添加排除條件,有須要的同窗可添加測試。
圖 -13- 配置裝載排除條件
下面是配置高級選項,下面截圖是全部默認設置,可按需進行調整。
圖 -14- 配置裝載高級選項
確認保存後,遷移所需的各項組件配置完成。
SDR工具自帶數據初始化的功能,點擊工具欄的「工具集 >存量數據同步」,彈出配置界面。可配置導出任務的併發數以及單表的併發數,需注意控制併發數大小,極端狀況可能會出現導出進程總數等於任務併發數 * 表內併發數。另外,「將數據導出爲字符串」的選項必須勾選,否則速度雖然會極大加快,可是導出導入失敗率也會大大提升。
圖 -15- 配置全量數據同步-導出條件配置
(注:開啓初始化以前,須要在目標環境手動建立用戶/權限/表空間等,建立命令跟Oracle基本一致。)
導出條件配置完並保存後,接下來配置導入條件配置。因爲目標庫沒有業務壓力,併發數可選擇大些,也可根據需求選擇是否「重建目標表」,「清空目標表」和「重建索引」等選項。
圖-16- 配置全量數據同步-導入條件配置
配置完成兵保存後,點擊「開始全同步」後即開始存量數據同步。
圖 -17-查看全量同步實時信息
等待導出導入完成後即存量數據的遷移工做。遷移過程存在的報錯信息能夠在「導出錯誤信息」和「導入錯誤信息」中直接查閱。若是報錯信息缺失或不足,能夠進入到x86服務器中安裝目錄的log目錄查看更詳細信息。
劃重點!!前面的全量遷移和下面要說的增量遷移是兩回事,若是按照前面步驟作徹底量數據遷移,要作增量遷移也須要把目標庫的數據全刪掉從新再來!
在使用增備前,須要先從源庫中獲取最新的scn號。在源端Oracle庫獲取最新的SCN號:
select current_scn from v$database;
CURRENT_SCN
------------------
16493654040783
須要提早按文「SDR全量遷移」配置異構鏈路,這裏不復述。配置完成後單獨開啓捕捉進程。在工做區選擇捕獲進程後,點擊「啓動」便可開啓。
圖-18- 開啓捕捉進程
此次存量備份須要把拿到的最新scn號輸入進去,以便把這個scn號的全部數據都同步到目標庫。
圖-19- 配置存量數據同步
等待存量備份完成後,單獨開啓轉換和裝載進程。以指定SCN方式啓動轉換進程,輸入的scn就是在一開始獲取到的最新SCN號。
圖-20- 指定scn啓動轉換進程
ETL啓動完成後如圖:
圖-21- 開啓轉換進程後
以指定SCN方式啓動裝載進程,輸入的scn就是在一開始獲取到的最新SCN號。
圖-22- 指定scn啓動裝載進程
轉載進程啓動完成後,狀態如圖:
圖-23- 開啓裝載進程後
都啓動完成後,在工做區選擇「列表」方式查看各進程狀態,都爲running則正常。
圖-24- 列表方式查看狀態
至此,增備啓動完成。
增備發起後,源庫對操做表的DML和DDL都會準實時同步到目標端,直到手動終止或報錯爲止。(部分DDL不支持,例如:add database,add datafile,role相關操做等等)
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金融科技領域,攜手阿里、騰訊、螞蟻金服、中國銀行、平安銀行、中郵消費金融、建設銀行、農業銀行、民生銀行、中國聯通大數據、浙江移動、新炬網絡等技術表明,展望雲時代下數據庫發展趨勢、破解運維轉型困局。
本文分享自微信公衆號 - 楊建榮的學習筆記(jianrong-notes)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。