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