金仓数据库 Oracle 至 KingbaseES 迁移最佳实践 (4. Oracle数据库移植实战)
4.?Oracle數據庫移植實戰
由于KingbaseES內部提供了大量的Oracle兼容特性,因此,在實際應用中,一般只需很少甚至不做任何修改,用戶便可把Oracle數據庫移植到KingbaseES環境中運行。不僅如此,用戶還可利用 KDTS-PLUS等多種工具簡化移植過程。
本節重點描述了在實際應用中移植一個Oracle數據庫系統的完整過程,以及其中的主要移植內容、常用移植方法和關鍵移植步驟。
本章節包含以下內容:
-
主要移植內容
-
關鍵移植步驟
4.1.?主要移植內容
在實際應用中,一個Oracle數據庫系統的移植主要包括如下內容。這些內容的遷移是存在先后順序的,若違反該順序,則可能導致遷移受阻。
4.1.1.?數據庫、用戶移植
數據庫是各種SQL和PL/SQL數據庫對象的存放容器,而用戶是這些對象的管理者和使用者。因此,在遷移數據庫對象之前,一般應先遷移數據庫、用戶。
那么,如何移植這些內容呢?應在目的數據庫KingbaseES上創建與源數據庫Oracle同名的數據庫、用戶,并授予新建用戶具有使用該數據庫和新建模式的所有或適當的權限。
另外,所創建數據庫的字符集應與Oracle數據庫字符集一致。如果KingbaseES已有同名數據庫,則登錄該數據庫后,則只需創建同名用戶。
4.1.2.?Oracle數據遷移
確定使用在線遷移還是離線遷移,根據不同需要制定不同給的遷移策略,使用KDTS-PLUS 和 KFS 完成數據庫遷移。
4.1.3.?應用程序移植
在完成數據庫對象遷移以后,才可開始遷移應用程序,主要原因是:在用程序中,可能會訪問和操作前面遷移的數據庫對象。
應用程序移植是指對Oracle API方式或嵌入式SQL方式的應用程序的移植。它主要包括接口驅動程序和連接方法的移植,以及Oracle擴展或私有的、且KingbaseES未兼容的API移植。通常,該項任務的工作量較少。
在實際應用中,通常應用程序移植與移植系統測試與調試交叉進行。
4.2.?關鍵移植步驟
作為一個典型的項目過程,Oracle數據庫移植應具有健全的項目團隊和全面細致的的項目執行過程。通常,移植一個Oracle數據庫主要包括以下步驟:
-
確定移植目標
-
評估移植任務
-
組建移植團隊
-
準備遷移環境
-
數據庫用戶遷移
-
數據遷移
-
應用代碼遷移
-
測試與調試移植系統
這些步驟指之間的關系是:前四個步驟是遷移前的準備工作,這些準備工作是確保后續Oracle移植順利進行的前提條件,而最后一步是保證最終移植系統正確性和可用性的關鍵步驟。
下面,分別對上述各個步驟進行詳細說明。
4.2.1.?確定移植目標
開始遷移前,應根據用戶的實際需求,確定移植目標。這些目標諸如:
-
遷移Oracle數據庫的規模。
-
遷移Oracle數據庫對象的種類和特征,如簡單和復雜遷移對象所占比例等。
-
遷移的難易程度,如是否遷移大對象,是否遷移大量約束等。
-
遷移的工期要求。
-
遷移中業務系統是否可以處于停止服務狀態。
-
對目標系統的技術指標要求,諸如平臺、版本、應用編程接口、工具、可用性、安全性和性能指標要求等。
明確移植目標以后,則可開始移植任務評估。
4.2.2.?評估移植任務
當計劃把一個Oracle數據庫系統移植到KingbaseES環境時,如果不做評估或評估不充分的話,那么整個移植工作會存在很多的潛在風險,額外增加移植工程師的工作量并且無法確認移植完成時間。因此,移植前對移植的可行性、工作量、難易程度和工作進度等進行充分評估是非常必要的。
通常,移植評估主要包括以下內容:
-
移植技術指標,如移植業務壓力和性能指標等。
-
移植數據規模,如移植各類數據庫對象的數量,PL/SQL程序的規模等。
-
移植中KingbaseES不支持功能的種類和數量。
-
移植的約束種類和數量。
-
移植過程中可能遇到的其他問題。
在Oracle移植中常用的評估模板如下表所示:
| 項目 | 描述 | 備注 |
| Oracle數據庫版本 | 8.1.7.4 | |
| 操作系統版本 | Winodws 2000/2003 Server | |
| 服務器型號 | 聯想/SUN | |
| CPU配置 | ||
| 內存(RAM) | ||
| 磁盤(Disk Profile) | ||
| 服務器個數(# of Servers) | 1或2 | |
| 用戶數/天(# Users/Day) | 幾十/天 | |
| 事務量/天(# Transactions / Day) | ||
| 當前數據庫大小 | 幾個GB | |
| 數據庫增長速率(#GB/month) | ||
| 目標用戶(Schema) | ||
| 應用方式(OLTP/OLAP) | OLTP | |
| 應用服務器(中間件) | 無 | |
| 客戶端應用類型 (C/S,B/S) | C/S | |
| 客戶端應用編程語言 | Delphi7 | |
| 客戶端應用連接接口 | ODAC/ADO | |
| 是否深入的SQL應用 | 無 | |
| 監控工具 | 無 | |
| 備份方式 | Exp/imp | |
| 其它工具(備份軟件等) | 無 | |
| 高可用要求 | 較高 | |
| 高可用配置方案 | VCS或單機 |
| 項目 | 描述 |
| 移植分析日期 | 20220105下午 |
| 移植分析人員 | ABC |
| KingbaseES版本 | |
| Oracle 版本 | 11.1.7.4 |
| Oracle Schema | |
| Oracle DB Size (GB) | 幾個GB |
| Oracle Schema Size (MB) | 幾個GB |
| 類型 | 小計 | 備注 |
| Function | 7 | 較少用 |
| Index | 有 | |
| LOB | 有 | 最大到幾十MB,主要是照片、word、視頻(較少) |
| Materialized View | 有>10 | |
| Pro*Cedure | 25 | |
| Sequence | 有>10 | |
| Table | 1660 | 約束較多 |
| Table Partition | 無 | |
| Trigger | <30 | |
| JOB | 無 | |
| Package | 無 | |
| Package Body | 無 | |
| Type | 無 | |
| View | >200 | |
| Synonym | >300 | |
| 對象共計 |
| 類型 | 小計 | 備注 |
| CHECK OR NOT NULL | ||
| FOREIGN KEY | ||
| PRIMARY KEY | ||
| UNIQUE KEY | ||
| OTHER | ||
| 約束共計 |
| 特性 | 小計 | 備注 |
| 數據壓縮 | 無 | |
| 索引組織表 | 無 | |
| 維度(Dimensions) | 無 | |
| 物化視圖 | 無 | |
| 存儲概要 | 無 | |
| 高級隊列 | 無 | |
| 空間數據管理 | 無 | |
| 全文搜索 | 有 | |
| 數據庫鏈接 | 無 | |
| 數據復制 | 無 | |
| RAC | 有 | |
| 邏輯standby | 無 | |
| 物理Standby | 無 | |
| 自動存儲管理ASM | 無 | |
| 自動工作負載信息庫AWR | 無 | |
| 共計 |
4.2.3.?組建移植團隊
任何一個高效、成功的項目都應具備一個健全和良好的團隊,Oracle數據庫移植也不例外。如果沒有這樣團隊互相配合和支持,那么Oracle數據庫移植將可能存在巨大的風險。所以,組建一個高效的移植團隊是非常必要的。
那么,移植團隊的組成人員應具備哪些條件呢?他們應至少具備以下的知識與技能:
-
熟悉Oracle和KingbaseES的SQL語言和PL/SQL語言特性,以及相關的KingbaseES Oracle兼容特性。
-
熟悉Oracle和KingbaseES的各種應用編程接口,以及相關的KingbaseES Oracle兼容特性。
-
熟悉Oracle和KingbaseES的相關客戶端工具,以及這些工具間的相同點和異同點。
由這些優秀人員組建的團隊是高效移植Oracle數據庫的可靠保障。
4.2.4.?準備遷移環境
在上述步驟完成以后,移植工程師應開始準備遷移環境了,這些準備工作諸如:
4.2.4.1.?部署目的數據庫服務器
部署目的數據庫服務器應遵循以下原則:
-
目的數據庫服務器的CPU、內存、網絡環境等硬件應盡量采用較高的配置。
-
如果移植的Oracle數據庫系統規模較大,如超過1GB,則建議把Oracle和KingbaseES部署在不同的物理機器上。
-
為確保遷移效率,應盡量把KingbaseES和Oracle服務器部署到同一局域網內。
4.2.4.2.?獲取并安裝必要的軟件
遷移前應獲取并安裝如下軟件:Oracle數據庫系統、KingbaseES數據庫系統、PL/SQL Developer、JDBC和ODBC驅動程序、C語言開發工具、OCI軟件、DCI軟件、TPC-C測試工具、LoadRunner等。
如果遷移數據規模較大,建議對安裝的KingbaseES數據庫服務器進行適當的優化,如增大shared_buffer大小、預先創建較大的日志文件,預先申請足夠的表空間數據庫文件等。
完成上述準備工作后,移植工程師便可開始Oracle數據庫移植工作了。
4.2.5.?數據庫、用戶遷移
數據庫、用戶遷移主要包括以下內容:
-
獲取源Oracle數據庫的IP地址、實例名、網絡服務端口號、用戶名/密碼等信息。
-
在目的KingbaseES數據庫上,使用 ksql 或 Kstudio 工具上執行如下操作:
-
創建與源Oracle用戶同名的用戶,例如創建與Oracle同名的scott用戶。
-
創建與源Oracle同名的數據庫,例如創建與Oracle同名的ORCL數據庫,它的屬主為scott。若同名數據庫存在,可以使用其他的數據庫名稱,若使用了新的數據庫名稱,則需要修改應用程序的連接串中的數據庫名稱。
-
4.2.6.?數據遷移
KingbaseES 數據遷移工具 KDTS-PLUS 動態加載待遷移的數據庫訪問接口,方便用戶定制和使用。
異構數據源之間的數據遷移:支持Oracle9i、10g、11g、12c、19c到KingbaseES V8.6 的數據前遷移。
KingbaseES 數據同步工具 KFS 支持同、異構數據源之間的數據遷移。
KingbaseES 數據同步工具 KFS 支持結構遷移、支持全量數據遷移、支持列名映射,支持數據遷移過濾,在配置數據任務時,可以對遷移的表配置where條件、通過匹配的where條件過濾需要遷移的數據。
數據庫遷移時需要按照用戶需求確定在線遷移還是離線遷移,若是離線遷移,使用 KDTS-PLUS 完成 Oracle的完整遷移;若是在線遷移,則首先需要使用 KDTS-PLUS 完成歷史狀態遷移,然后使用 KFS 完成數據的在線追平。
本節包括:
-
遷移前準備
-
離線遷移
-
在線遷移
-
多次遷移
4.2.6.1.?遷移前準備
在使用 KDTS-PLUS 遷移 Oracle 數據庫之前,應先做如下準備工作:
4.2.6.1.1.?獲取 Oracle數據庫的相關信息
遷移前,應獲取源數據庫Oracle服務名及遷移的數據規模信息。其中,前者用于PL/SQL Developer工具的登錄操作,后者用于估算數據遷移時間和設計遷移方案。
Oracle數據庫基本信息
獲取源Oracle數據庫的:
IP地址;
實例名;
網絡服務端口號;
用戶名/密碼。
在目標KingbaseES V8.6 上:
創建與源Oracle用戶(如scott)同名的用戶(scott);
創建與源Oracle(如ORCL)同名的數據庫(ORCL),屬主為scott;
創建與源Oracle(與用戶名相同t)同名的模式scott,屬主為scott。
2. 查詢Oracle數據庫編碼方式
select userenv('language') from dual;USERENV('LANGUAGE')SIMPLIFIED CHINESE_CHINA.ZHS16GBK 【Kingbase初始化設置編碼方式】--encoding=GBK(支持 GBK UNICODE ASCII)3. 查看表數據量大小
查看當前用戶在Oracle中的表大小,按從大到小排序(單位GB)
select segment_name,bytes/1024/1024/1024 from user_segments where segment_type='TABLE' order by bytes desc ; XFJXX 16.046875 XFRXX 7.779296875 PCK 7.4375 BLFSXX 5.0625 XFSXXX 2.3125 DFGZXX 1.3359375 FJB 0.53125 TSJXX 0.0781254. 檢查數據庫日期格式
時間的默認格式為:ISO, MDY
在配置文件中添加:datestyle ='ISO,YMD' 修改為年月日的格式(99會改為1999)
在某項目中遷移數據時遇到:服務器報錯,遷移工具中斷,遷移停滯
oracle數據庫中有日期"0099-09-30 00:00:00",遷移工具輸出為"99-09-30 00:00:00",KingbaseES中將99識別為月份報錯:ERROR: date/time field value out of range
--即使沒有報錯也會出現錯誤 set ora_date_sytle = true; CREATE TABLE T_DATE(COL DATE); INSERT INTO T_DATE VALUES('11-10-10 10:10:10'); SELECT * FROM T_DATE;COL ---------------------2010-11-10 10:10:10 (1 row)4.2.6.1.2.?配置KingbaseES的Oracle兼容開關
根據實際情況,應對目的數據庫KingbaseES進行適當的Oracle兼容配置。通常,應配置以下會話級兼容參數:
1)?nls_length_semantics:設定char類型字段默認單位是byte還是char。此外,標識符最大長度以此值為單位。如果它為char,則標識符最大長度為63個char,否則為63byte。
在KingbaseES系統參數?nls_length_semantics?缺省值是"CHAR",需要與待遷移的Oracle相同。
Oracle字符類型的 byte|char 屬性的默認值是由 Oracle 提供的數據庫參數*NLS_LENGTH_SEMANTICS*決定的,可通過下方語句進行查詢:
select value from nls_database_parameters where parameter = 'NLS_LENGTH_SEMANTICS'; VALUE BYTE如果未修改可能會出現:遷移char類型時,由于數據庫存儲的類型不同,導致遷移的數據存在多余空格的情況。
2)?search_path:模式搜索路徑。例如search_path為*$USER,SCOTT,PUBLIC*時,系統將首先搜索與登錄用戶同名的模式對象,然后搜索SCOTT模式對象,最后搜索PUBLIC模式對象。
3)?default_with_oids:OID偽列開關。KingbaseES的OID偽列可兼容Oracle的ROWID偽列。因此,如果Oracle移植對象有ROWID偽列,則建議用OID偽列替代。
4.2.6.1.3.?移植數據庫、用戶
在目的數據庫KingbaseES上創建與源數據庫Oracle同名的用戶、數據庫,并且授予新建用戶具有使用該數據庫和新建模式的所有或適當的權限。另外,所創建數據庫的字符集應與Oracle數據庫字符集一致。如果KingbaseES已有同名數據庫,則登錄該數據庫后,只需創建同名用戶。
4.2.6.1.4.?配置目的庫KingbaseES性能參數
為了提高遷移速度,應對目的庫KingbaseES進行性能優化配置。
例如:
1)? 根據遷移數據規模的大小,遷移前可預先創建適當大小的的數據和日志文件。
開始遷移之前根據待遷移數據庫的大小,保證KingbaseES數據目錄所在位置有足夠的空間。
2)根據KingbaseES服務器硬件配置的實際情況調整shared_buffers大小,默認是128M,建議調整為內存的1/4大小。
4.2.6.2.?離線遷移
在完成上述準備工作以后,用戶可使用KDTS-PLUS進行數據的離線遷移,KDTS-PLUS提供了兩種形態(BS、SHELL),用戶可根據需要進行選擇,以下章節將分別介紹BS、SHELL版本進行oracle遷移的具體步驟。
4.2.6.2.1.?BS遷移步驟
-
創建源數據庫連接
創建源庫數據庫連接。創建數據庫連接界面如下,填寫數據源信息,包括:?“連接名稱”、“數據庫類型”、“數據庫版本”、“服務器地址”、“端口”、“用戶名”、“密碼”、“數據庫”、“驅動”、“URL”、“連接參數”。
-
創建目標數據庫連接
創建目標數據庫連接。創建數據庫連接界面如下,填寫數據源信息,包括:?“連接名稱”、“數據庫類型”、“數據庫版本”、“服務器地址”、“端口”、“用戶名”、“密碼”、“數據庫”、“驅動”、“URL”、“連接參數”。
-
新建遷移任務
KDTS-PLUS采用向導頁的方式指導用戶新建遷移任務,簡單易用,用戶依次配置”選擇數據源“-選擇模式”-“選擇遷移對象”-“配置參數”,即可快速配置一個遷移任務。
選擇數據源
填寫自定義任務名稱(任務名稱不能重復),選擇“源數據庫”和“目標數據庫”,或者選擇“新建數據源”后使用。
選擇模式
根據您的數據遷移所需選擇對應模式(如需選擇模式在系統模式中可選中“包含系統模式”復選框)的表、視圖、序列、函數、存儲過程、程序包、同義詞。當模式較多時也可以通過左上方的查詢框進行檢索。 請您至少選擇一種模式,否則將收到錯誤提示,以至于不能完成新建任務。
在選擇模式的前提下如您未選擇“表”,即沒有遷移對象,則系統將認為您不需要遷移對象,將提示您直接跳過“選擇遷移對象”進入“配置參數”。
選擇遷移對象
通過已選模式選擇您需要遷移數據的表,模式較多時可在已選模式搜索框內輸入模式名關鍵字進行快速檢索。
可遷移此模式下全部表,也可以指定或排除部份表,當您選擇“包含指定表”或“排除指定表”時,請您通過“從列表選擇”、“從文件導入”或者在輸入框內輸入表名將數據添加到包含列表中,如您未添加數據,則會提示錯誤導致無法進行下一步并完成新建任務。
當您點擊“包含指定表”時也可選擇多種方式??芍苯釉谳斎肟騼忍顚懕砻?#xff0c;多個表用“,”分割,回車確認;“從列表選擇”可在模式中選擇指定表;如您要“從文件導入”,可點擊“下載導入模板”,根據導入模板規則填寫,然后從文件導入該模板。當您需要“排除指定表”時,同指定部份表相同操作,但結果相反。
從列表選擇表時,可選擇對應模式、檢索表名關鍵字、數據條數限制進行快速檢索對應的表。點擊“添加”按鈕后加入到已選列表,當您想要移除部份表時可以選擇對應的表點擊“移除”按鈕取消表。選擇完成后點擊確定。
配置參數
可以通過對參數的更改獲得預估的數據遷移結果。其中遷移配置包括“表默認處理方式”、“表排序依據”、“表數據讀取和寫入”、“大表拆分閾值依據”、“非對象設置”、“數據庫連接數設置”。數據類型配置包括“源數據類型”、“目標數據類型”、“長度限制”。
-
表默認處理方式:
包括兩個復選框項(“建表/重建表”、“導入數據”),遷移到KingBaseES數據庫是否需要建表或者重建表,以及是否只遷移表結構而不遷移數據的選擇,根據您的需求選擇合適的選項(默認是全選)。
-
表排序依據:
對遷移的表進行排序,可通過“按行數和大字段大小交替”、“行數”、“大小進行排序”(默認是按行數和大字段大小交替)。
-
表數據讀取和寫入:
對表數據的讀取和寫入制定規則,可操作項包括“源庫游標讀取記錄數”(默認是100)、“批量寫入目標庫記錄數”(默認是1000)、“每次批量提交大小”(默認是100MB)、“LOB字段預讀取大小”(默認是4000Byte)。
-
大表拆分閾值依據:
對大表進行拆分遷移,設置拆分界限。
-
非對象設置:
其中包含“主鍵”、“檢查約束”、“唯一約束”、“外鍵”、“索引”、“觸發器”、“自動轉換對象名”。您可以根據自己的需求選擇是否遷移這些非對象數據(默認是全選)。
-
數據庫連接數設置:
您可以限制遷移程序對源數據庫和目標數據庫的最大連接數(默認是100)。
-
執行遷移任務
可將此任務作為預遷移任務點擊“保存”,或者作為執行任務點擊“保存并遷移”。
-
遷移完成:
遷移結束“狀態”欄顯示“完成”,則遷移任務成功。
-
遷移失敗:
遷移結束“狀態”欄顯示“失敗”,則遷移任務失敗。失敗后可點擊詳情查看日志有助于解決問題。
-
查看遷移報告及問題處理
遷移完成后,需要確認執行結果,包括遷移數據量,是否有錯誤發生,可以通過遷移日志和遷移結果進行查看。
“遷移日志”打印遷移任務執行后的日志,具體可分為“系統日志”、“Error日志”、“Info日志”。
“遷移結果”功能的工作區包括“任務執行批次”、“遷移對象”、“總數”、“成功數”、“失敗數”、“略過數”、“操作”。您可以查看歷史遷移任務執行的每次記錄,以及每次遷移的對象、成功數、失敗數、查看失敗任務的錯誤日志。
4.2.6.2.2.?SHELL遷移步驟
-
目錄說明
-
bin: 啟動腳本
-
conf: 配置文件
-
doc: 幫助文檔
-
drivers: 數據庫連接驅動(注意不同版本驅動的存放目錄差別,詳見readme.md)
-
jdk: jdk
-
kdms: kdms程序
-
lib: 程序包
-
logs: 日志
-
result: 遷移報告
-
JDK安裝
下載與KDTS-PLUS安裝服務器相匹配的JDK(需要匹配操作系統和CPU架構,如Liunx/AArch64、Linux/x64、Windows/x64等),版本選擇JDK 15或更高。下載地址:?Archived OpenJDK GA Releases
將下載的JDK解壓到kdts-plus/jdk目錄下
注意:
a、請使用解壓版本的JDK,以免安裝JDK影響服務器上的其它應用。
b、不要把當前的JDK加入系統環境變量,以免影響服務器上的其他應用。
c、如果需要使用服務器上已有的JDK,配置bin/startup.sh(Windows平臺為startup.bat)中的JAVA_PATH即可。
-
配置數據庫連接信息
-
進入kdts-plus/conf目錄下,打開application.yml文件,根據源庫類型設置當前激活的源庫配置(active: oracle),如下所示:
在正確設置application.yml中的active項后,打開對應配置文件(kdts-oracle.yml),按實際運行環境進行配置即可。
-
配置源端數據庫連接信息、目標數據庫連接信息
編輯conf/kdts-oracle.yml文件,編輯源端和目標端連接信息,包括url、driver-class-name、username、password信息,如下圖所示:
-
配置要遷移的源庫模式,數據庫對象,涉及到的參數見下圖:
-
遷移配置參數說明
編輯conf/kdts-oracle.yml文件有多個配置參數,可靈活使用。以下列舉常用的配置參數。
-
fetch-size:
源數據庫游標讀取記錄數,在一定范圍內增加該值可提升讀取效率,但會增加內存開銷。
-
table-with-large-object-fetch-size:
源數據庫含大對象數據表的游標讀取記錄數,此參數針對有大對象字段的表。
-
large-table-split-threshold-rows:
大表拆分閾值行數(當表的行數超過此值時,將對表進行拆分,每塊的記錄數為此值和表總記錄數除以“拆分最大塊數”中的最大值)。
-
large-table-split-threshold-size:
大表拆分閾值大小(單位為M),當表的數據大小(普通字段+大對象字段)超過此值時,將對表進行拆分。
-
large-table-split-condition-file:
大表拆分條件定義文件,優先于按行數和大小拆分。
-
table-data-filter-condition-file:
表數據過濾條件定義文件。
-
use-kdms:
是否使用kdms做轉換(視圖、函數、存儲過程、包、觸發器)。
-
kdms-url:
kdms訪問地址,前提是use-kdms: true
-
write-batch-size:
目標數據庫表數據批量提交記錄數.
-
write-batch-size-big-lob:
目標數據庫表數據批量提交記錄數,特指大對象數據。
-
-
drop-existing-object:
是否默認刪除目標庫中已存在的對象(如表、視圖等)。
-
truncate-table:
是否默認清空目標庫中已存在的表數據。
-
rename-object:
目標數據庫對象重命名,除表名、列名外的其他對象: pk、fk、constraint、unique constraint、index 等。
-
-
-
線程相關設置
線程相關設置可根據實際服務器配置按比例調整,如果與目標數據庫運行在同一服務器上,應將絕大部分資源分配給數據庫。
進入 kdts-plus/conf目錄下,打開:kb-thread-config.xml,如下圖所示:
數據遷移屬于IO密集型操作,涉及網絡絡IO和磁盤IO的交互,一旦發生IO,線程就會處于等待狀態,當IO結束,數據準備好后,線程才會繼續執行。為提升數據遷移的效率可以多設置?些線程池中線程的數量,避免任務等待,線程可以去做更多的遷移任務,提高并發處理效率。但不是線程數設置的越高,效率就越高,線程上下文切換是有代價的。 對于對于IO密集型線程數的設置公式為:線程數 = CPU核心數/(1-阻塞系數) ,其中阻塞系數一般為0.8~0.9之間,取0.9則:
雙核CPU: 2/(1-0.9) = 20
64核2路CPU: 64*2/(1-0.9) = 1280
-
啟動腳本
-
進入 kdts-plus/bin 目錄下,編輯: startup.sh
-
檢查JDK的路徑是否正確
JAVA_PATH=${BASE_PATH}"/jdk"
-
設置JVM內存
根據當前服務器的配置,調整JVM參數
JAVA_OPT="-server?-Dfile.encoding=UTF-8?-Dconfig.path=${CONFIG_DIR}?-Xmx16g?-Xms16g"?主要是:?-Xmx16g?-Xms16g?參數
-
啟動運行腳本
進入 kdts-plus/bin目錄,執行: ./startup.sh
-
-
查看遷移報告及問題處理
可以在運行日志(kdts_info.log)中查看到遷移整個過程的信息,包括任務啟動、遷移進程、結果匯總
可查看result下的遷移結果(在形如“result/2021-12-02_15-15-15/Sehcma1”目錄下)
-
index.html--報告主頁面
-
detail_XXX.html--XXX詳細信息(如表結構、表數據、表主鍵等)
-
FailedScript--失敗腳本目錄
-
IgnoredScript--略過腳本目錄
-
SuccessScript--成功腳本目錄
在遷移過程中一旦某個對象創建失敗,KDTS-PLUS會將該對象的創建sql保留到本次遷移任務文件夾下的FailedScript目錄下*.sql文件,用戶可以手動修改后通過ksql或者KStudio工具手動執行。
4.2.6.3.?在線遷移
在線遷移時,首先需要使用KDTS-PLUS完成歷史數據搬遷,之后使用KFS 進行在線數據追平。
異構數據庫數據同步在保障客戶業務不停機的前提下,需要一個中間數據庫(與源端數據庫版本相同的單實例數據庫)做媒介遷移存量數據。操作的過程分兩部分。
先將存量數據遷移至中間數據庫上,然后KFS loader進行初始數據搬遷或通過ETL進行初始數據搬遷至異構數據庫(目標數據庫)中。
待上一步操作完成,從指定斷點開始啟動KFS源端,正常啟動目標端的KFS程序(在已經有KFS運行的情況下,可能需要重置KFS)。
注意:在遷移源庫存量數據時避免做以下操作:
運行大型批處理操作會降低復制速率。
備份時執行DDL操作將導致DML和DDL之間存在鎖問題
4.2.6.3.1.?源端數據庫備份
1.獲取當前數據庫一致性scn號
alter system checkpoint global; select checkpoint_change# from v$database;假設獲取的值為200725471,該scn號將用作啟動KFS起始的scn號。2. 創建備份目錄(需要sysdba權限)
create directory dump_dir as 'd:/dump_dir'; grant read,write on directory dump_dir to kfs_user;3.完整備份數據庫
在單實例oracle數據庫服務器上執行(導出用戶kfs_user的內容): expdp kfs_user/123456 schemas=kfs_user directory=dump_dir flashback_scn=200725471 dumpfile=DBNAME_20220511.dump
4.2.6.3.2.?存量數據遷移
1.在中間庫中創建備份目錄(需要sysdba權限)
create directory dump_dir as 'E:/dump_dir'; grant read,write on directory dump_dir to kfs_user;2.將源端備份的數據文件拷貝至E:/dump_dir目錄下
3.將備份的數據還原至中間庫
impdp kfs_user_new/123456 directory= dump_dir remap_schema=kfs_user:kfs_user_new table_exists_action=replace dumpfile= DBNAME_20220511.dump
4.使用數據遷移工具(KDTS-PLUS)將中間庫的數據搬遷至目標數據庫。
4.2.6.3.3.?啟動KFS完成數據追平
注意:若KFS之前已經部署運行,則源端和目標端需要先執行重置命令fsrepctl –service XXX reset -all –y,確認中間表、kufl文件等被清除。
KFS部署參考《Kingbase FlySync 安裝部署手冊.pdf》
源端操作:
先啟動KFS到offline狀態,replicator start offline。再使用ONLINE命令,將源端的KFS完全啟起來,執行ONLINE命令時需要指定-from-event參數,參數值為備份數據庫時查詢的scn值(見步驟2)。 實例如下:
replicator start offline
fsrepctl -service oracle online -from-event ora:200725471: 200725471
目標端操作:
啟動目標端KFS,等待數據追平.
追平的判斷方法:
[hes@h1-105 ~]$ fsrepctl services Processing services command... NAME VALUE ---- ----- appliedLastSeqno: 3 //若源端無新數據產生,則源端和目標端相同 appliedLatency : 0.297 //若源端無新數據產生,延遲時間為0 role : master serviceName : postgresql serviceType : local started : true state : ONLINE Finished services command...4.2.6.4.?多次遷移
若項目開發過程中,需要定期從一個指定的源數據庫遷移到目的數據庫中, 那么根據遷移時源數據庫和應用的狀態,決定離線遷移還是在線遷移。
同時,由于是多次遷移,需要考慮每次遷移時數據庫對象的定義是否需要遷移, 若不需要,則只遷移數據就可以,使用 KDTS-PLUS 和 KFS 都支持只遷移數據; 若每次遷移時需要遷移對象定義,則
1)對于定義發生變更的表,選擇遷移定義和數據。可使用 KDTS-PLUS的“遷移部分表”功能完成,詳細步驟可參考?KDTS 遷移工具使用指南?。
2)對于定義沒有發生變更的表,只同步數據即可??墒褂?KDTS-PLUS的“按條件遷移”功能完成,詳細步驟可參考?KDTS 遷移工具使用指南?。
4.2.7.?應用代碼遷移
4.2.7.1.?服務器應用代碼遷移
數據移植后,需要遷移應用系統中用到的服務器應用代碼,例如 PLSQL。
KDTS-PLUS 已經完成了存儲過程,函數,包等 PLSQL對象的遷移, 只需要關注應用代碼中用到的匿名塊的代碼的遷移。KingbaseES 的 plsql 語言和Oracle的plsql高度兼容, 需要關注如下2點:
package中Oracle 允許存在同名同參數的存儲過程和函數,KingbaseES 不支持,需要重命名為不同名字。
KingbaseES 不支持 Object type的方法的連續調用,例如不支持 方法1.方法2.方法3, 需要改寫為
4.2.7.2.?客戶端應用代碼遷移
在應用編程接口方面,KingbaseES與Oracle兼容程度較高,所以,一般情況下,應用程序遷移比較容易。應用程序遷移通常應和移植系統測試同時進行。這樣可及時修改測試過程中發現的問題。
如何在一個應用程序中訪問和操縱數據庫呢?通常,可采用API方式:
該方式通過數據庫廠商提供的各種標準應用編程接口在應用程序中與數據庫進行交互。常用的應用編程接口如JDBC和ODBC等。目前,大多數數據庫廠商均提供很多標準的數據庫API及其驅動程序。
在實際應用中,應首先加載驅動程序。加載成功后,利用API函數與數據庫交互并完成對數據庫數據的操作。
4.2.7.2.1.?ODBC
對于使用ODBC的應用程序,應創建與Oracle同名的KingbaseES ODBC數據源,然后修改應用程序中連接數據庫的用戶名、密碼等。此外,在Windows系統下對于OLEDB、ADO和NDP,則不需創建數據源。
Windows數據源配置
圖 4.2.42?Windows平臺ODBC數據源配置1
圖 4.2.43?Windows平臺ODBC數據源配置2
圖 4.2.44?Windows平臺ODBC數據源配置3
圖 4.2.45?Windows平臺ODBC數據源配置4
具體配置參數解釋請參考 《KingbaseES客戶端編程接口指南-ODBC》 。
2. Linux數據源配置
首先檢查 ODBC Driver 是否已經安裝。在系統中找到 odbcinst.ini 文件,和/usr/bin/odbcinst 對應的 odbcinst.ini 在 /etc 目錄下,和 /usr/local/bin/odbcinst 對應的 odbcinst.ini 在 /usr/local/etc 目錄下。在odbcinst.ini 文件中查找 [KingbaseES 8 ODBC Driver] 這一項。
如果沒有,則參考增加如下內容:
[KingbaseES 8 ODBC Driver]Description = KingbaseES 8 ODBC Driver for LinuxDriver = /opt/Kingbase/Odbc/lib/kdbodbcw.so增加odbc.ini文件,內容如下:[kingbase]Description = KingbaseESDriver = KingbaseES 8 ODBC DriverServername = 127.0.0.1Port = 54321Username = SYSTEMPassword = MANAGERDatabase = TEST具體配置參數解釋請參考 《KingbaseES客戶端編程接口指南-ODBC》
4.2.7.2.2.?移植Oracle OCI應用程序
KingbaseES V8.6 支持OCI的大部分常用接口。
具體參見手冊 《KingbaseES客戶端編程接口指南-DCI》。
4.2.7.3.?其它應用框架
其它應用框架的使用,請參照客戶端編程開發框架的使用指南。如無說明,請及時聯系KingbaseES支持工程師。
4.2.8.?測試與調試移植系統
任何一個成熟的應用系統如果代碼、尤其是關鍵代碼變動后,則應進行全面細致的測試。類似的,更換新的后臺數據庫系統以后,也應對移植后的數據庫系統進行全面的功能和性能測試。
4.2.8.1.?功能測試和排錯
功能測試是指對移植數據庫系統的每一個模塊和功能進行全面的系統回歸測試,用以確保新系統各個功能的正確性。
因此,完成數據庫對象和應用程序遷移后,應對移植系統進行全面的功能測試,并對測出問題及時分析、排查和修改。對那些很難定位的問題,請及時聯系KingbaseES支持工程師。
4.2.8.2.?性能測試和調優
移植系統性能測試和調優是在完成移植系統功能測試后和系統上線前,在實際或模擬生產數據上,對移植系統進行的性能測試和調優。
移植系統性能測試和調優的主要步驟如下:
-
構造測試數據:若條件允許的話,建議構造與實際生產數據規模相同的數據,并模擬構造未來一年、兩年、五年或更長生命周期的數據進行測試。
-
部署測試軟硬件環境:根據測試數據規模的大小,配置適當的測試軟硬件環境。
-
性能測試:既可采用手動方式,也可利用TPCC測試工具、LoadRunner等工具對移植系統進行自動測試。
-
性能調優:對未達到性能指標的功能模塊及其SQL語句進行優化并給出相關建議。
通常,性能測試效果與測試數據規模、軟硬件配置等因素密切相關。因此,建議性能測試時,測試數據規模、軟硬件配置應盡量與將來的實際生產環境一致。必要時,在未來一年、兩年、五年等不同模擬數據規模場景下,應分別測試移植系統的性能指標,用以保證移植系統未來仍能具有良好的性能表現。
總結
以上是生活随笔為你收集整理的金仓数据库 Oracle 至 KingbaseES 迁移最佳实践 (4. Oracle数据库移植实战)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(591):source面板介绍
- 下一篇: 数据库习题及答案