從Oracle安全移植到國(guó)產(chǎn)達(dá)夢(mèng)數(shù)據(jù)庫的DBA實(shí)踐

  文章來源:杭州美創(chuàng)科技有限公司

隨著我國(guó)對(duì)信息安全和自主可控技術(shù)的日益重視,國(guó)產(chǎn)數(shù)據(jù)庫在黨政機(jī)關(guān)、軍隊(duì)和大型央企等行業(yè)中得到了快速應(yīng)用。達(dá)夢(mèng)數(shù)據(jù)庫(以下簡(jiǎn)稱DM)是國(guó)內(nèi)數(shù)據(jù)庫行業(yè)領(lǐng)軍企業(yè)——達(dá)夢(mèng)推出的一款自主可控的高性能數(shù)據(jù)庫產(chǎn)品。

如何降低從Oracle到DM數(shù)據(jù)庫移植的技術(shù)門檻,保障用戶現(xiàn)有業(yè)務(wù)系統(tǒng)投資,美創(chuàng)DBA團(tuán)隊(duì)對(duì)Oracle安全移植到DM數(shù)據(jù)庫的技術(shù)課題進(jìn)行了研究實(shí)踐。

從Oracle到DM的移植,主要包含以下工作

Ⅰ、分析待移植系統(tǒng),確定移植對(duì)象。

Ⅱ、通過數(shù)據(jù)遷移工具 DTS 完成常規(guī)數(shù)據(jù)庫對(duì)象及數(shù)據(jù)的遷移。

Ⅲ、通過人工完成 PL/SQL 的移植。

Ⅳ、移植完成后對(duì)移植的結(jié)果進(jìn)行校驗(yàn),確保移植的完整性和正確性。

Ⅴ、對(duì)應(yīng)用系統(tǒng)進(jìn)行測(cè)試和優(yōu)化。

具體移植攻略

1、待移植系統(tǒng)分析

1.1、信息采集,包括操作系統(tǒng)版本、數(shù)據(jù)庫版本、應(yīng)用開發(fā)平臺(tái)、應(yīng)用開發(fā)接口和需要移植的數(shù)據(jù)庫對(duì)象;

1.2、統(tǒng)計(jì)Oracle數(shù)據(jù)庫基礎(chǔ)信息;

1.3、統(tǒng)計(jì) Oracle 數(shù)據(jù)中的對(duì)象以及表數(shù)據(jù)量。

二、準(zhǔn)備移植環(huán)境

僅做移植兼容性測(cè)試。這里指的是用戶或者開發(fā)商對(duì)于移植可能性和技術(shù)工作量的一個(gè)評(píng)估和確認(rèn)工作,也就是嘗試性的移植,移植后可能并不會(huì)立刻進(jìn)行產(chǎn)品級(jí)的應(yīng)用功能、性能、穩(wěn)定性測(cè)試,在這種情況下,一般搭建最基礎(chǔ)的移植環(huán)境即可,用虛擬機(jī)和物理機(jī)服務(wù)器都可以進(jìn)行,且對(duì)配置無特別要求,滿足基本運(yùn)行條件即可;

為替換 Oracle 上線運(yùn)行進(jìn)行正式移植。在這種情況下,移植完成后,會(huì)對(duì)應(yīng)用進(jìn)行產(chǎn)品級(jí)全方位的功能點(diǎn)測(cè)試、性能測(cè)試、壓力測(cè)試以及穩(wěn)定性測(cè)試等集成測(cè)試。在這種情況下搭建移植環(huán)境,一定要優(yōu)先采用物理服務(wù)器搭建,并且對(duì)于物理服務(wù)器的相關(guān)硬件配置要提出要求。

2.1 DM 移植環(huán)境

2.1.1、選擇版本

版本優(yōu)先選擇完整安裝版本,避免數(shù)據(jù)庫客戶端和服務(wù)器端存在版本不匹配帶來的額外工作量,達(dá)夢(mèng)在不同平臺(tái)的不同版本上,安裝包都會(huì)有差異,一定要采用嚴(yán)格匹配的原則。

2.1.2、初始化參數(shù)

從 Oracle 移植到 DM 數(shù)據(jù)庫,初始化參數(shù)建議:

(1)頁大小 PAGE_SIZE

Oracle 也叫塊大小(block),在 DM 數(shù)據(jù)庫中,頁大小可以為 4KB、8KB、16KB 或者 32KB,從 Oracle 移植到 DM,建議設(shè)置頁大小為 8KB,一旦創(chuàng)建好了數(shù)據(jù)庫,在該庫的整個(gè)生命周期內(nèi),頁大小都不能夠改變。除了每個(gè)字段的最大長(zhǎng)度限制外,每條記錄總長(zhǎng)度不能大于頁面大小的一半。如果系統(tǒng)中存在或者以后可能存在含有較長(zhǎng)的字符串類型的表,建議該參數(shù)設(shè)置為 16 或者 32。頁大小設(shè)置越大,最后數(shù)據(jù)文件的物理大小就會(huì)越大,系統(tǒng)運(yùn)行時(shí),每次從磁盤調(diào)入內(nèi)存的數(shù)據(jù)單位也就越大,所以此處要慎重。

(2)簇大小 EXTENT_SIZE

數(shù)據(jù)文件使用的簇大小,即每次分配新的段空間時(shí)連續(xù)的頁數(shù),只能是16頁或32頁,缺省使用 16 頁,從 Oracle 移植到 DM 使用默認(rèn)值就可。

(3)大小寫敏感 CASE_SENSITIVE

DM 為了兼容不同的數(shù)據(jù)庫,在初始化數(shù)據(jù)庫的時(shí)候有一個(gè)參數(shù)字符串比較大小寫敏感,用于確定數(shù)據(jù)庫對(duì)象及數(shù)據(jù)是否區(qū)分大小寫,默認(rèn)為區(qū)分,不可更改。Oracle 遷移過來的系統(tǒng),使用大小寫敏感,以便和原來系統(tǒng)匹配。

(4)字符集 CHARSET

建議采用默認(rèn)值 GB18030,如果需要國(guó)際字符可以采用Unicode,GB18030 數(shù)字字母占 1 個(gè)字節(jié),普通漢字占 2 個(gè)字節(jié),部分繁體及少數(shù)民族文字占 4 字節(jié),Unicode 在達(dá)夢(mèng)中采用 UTF-8 編碼格式,歐洲的字母字符占 1 到 2 個(gè)字節(jié), 亞洲的大部分字符占 3 個(gè)字節(jié),附加字符為 4 個(gè)字節(jié)。如果只存儲(chǔ)中文和字母數(shù)字,一般來說 GB18030 更節(jié)省空間一些。

2.1.3、合理配置 INI參數(shù)

COMPATIBLE_MODE 參數(shù),配置成兼容Oracle數(shù)據(jù)庫模式。

在 INI 參數(shù)的 compatibility部分,還有其它的一些參數(shù),在涉及到之前,盡量保持默認(rèn)值,在移植準(zhǔn)備的環(huán)節(jié),先只調(diào)整這個(gè)參數(shù)就可以了,其它參數(shù),在移植過程中,遇到了再具體分析。

2.1.4、創(chuàng)建用戶和表空間

移到系統(tǒng)管理員 SYSDBA 用戶下和 MAIN 表空間下。首先需要分析本次移植 Oracle 源庫需要移植的是哪一個(gè)或者哪幾個(gè)用戶的數(shù)據(jù),然后分別創(chuàng)建這些需要移植的用戶和對(duì)應(yīng)的表空間;大多數(shù)情況下,我們需要移植的 Oracle 實(shí)例中可能存在有大量的用戶,并不是所有的用戶對(duì)象都是需要我們移植的,所以在移植準(zhǔn)備階段,一定要溝通明確清楚。

2.2 Oracle 移植環(huán)境

在從 Oracle 向 DM7 進(jìn)行移植準(zhǔn)備階段,也需要注意 Oracle 的移植環(huán)境:嚴(yán)禁在生產(chǎn)環(huán)境中直接遷移。因?yàn)橐浦彩紫仁且粋€(gè)測(cè)試的工作,所以移植應(yīng)該避免從Oracle生產(chǎn)環(huán)境數(shù)據(jù)庫中直接進(jìn)行移植,需要提前向應(yīng)用開發(fā)商提出需要搭建一個(gè)測(cè)試環(huán)境,準(zhǔn)備 Oracle 需要移植的環(huán)境和數(shù)據(jù)。直接從生產(chǎn)庫上進(jìn)行數(shù)據(jù)移植,有很多風(fēng)險(xiǎn)存在, 例如會(huì)影響生產(chǎn)庫的效率,引發(fā)崩潰的可能等等。推薦使用 pl/sql developer 工具進(jìn)行移植測(cè)試工作。

3、常規(guī)對(duì)象及數(shù)據(jù)遷移

常規(guī)對(duì)象指的是序列、表和視圖,都可以通過達(dá)夢(mèng)提供的數(shù)據(jù)遷移工具從 Oracle 完整的遷移到達(dá)夢(mèng)數(shù)據(jù)庫。

3.1 制定遷移計(jì)劃

3.1.1、選擇合理的遷移順序:先遷移序列、再遷移表、最后遷移視圖。

3.1.2、對(duì)于數(shù)據(jù)量大的表單獨(dú)遷移。

3.1.3、對(duì)于分區(qū)表如果數(shù)據(jù)量沒有超過 1 億建議遷移成普通表,在分區(qū)列上創(chuàng)建索引。

3.1.4、對(duì)于大字段較多的表,需要修改批量的行數(shù),以免造成遷移工具內(nèi)存溢出。

3.2 Oracle 移植環(huán)境

序列對(duì)象一般不依賴其他模式對(duì)象,而被其他如表、過程所依賴,所以一般遷移過程中, 最先遷移序列對(duì)象。遷移序列方法:

3.2.1、使用 DTS 工具遷移序列,此方法適用于批量遷移序列對(duì)象。DTS 工具使用方法可參考幫助-幫助主題。

3.2.2、從源 Oracle 中獲取序列定義,在目的庫手動(dòng)執(zhí)行序列創(chuàng)建,此方法適用于所需遷移對(duì)象較少,或者對(duì)方法一中遷移出錯(cuò)的序列單獨(dú)處理。

3.3 表對(duì)象遷移

3.3.1、一次性遷移

對(duì)于表比較少,數(shù)據(jù)量不大的系統(tǒng),可以通過 DTS 采取一次性遷移。

3.3.2、分批次遷移

對(duì)于表比較多,數(shù)據(jù)量大的系統(tǒng),建議先遷移小表再進(jìn)行大表的遷移,遷移時(shí)最好不用快速裝載功能。

3.4 視圖對(duì)象遷移

3.4.1、普通視圖對(duì)象遷移

(1)使用 DTS 工具遷移視圖,此方法適用于批量遷移視圖對(duì)象。DTS 工具使用方法可參考幫助-幫助主題。

(2)從源 Oracle 中獲取視圖定義,在目的庫手動(dòng)創(chuàng)建視圖,此方法適用于所需遷移對(duì)象較少,或者對(duì)方法一中遷移出錯(cuò)的視圖單獨(dú)處理。

3.4.2、物化視圖對(duì)象遷移

(1)使用 DTS 工具遷移物化視圖,此方法適用于批量遷移物化視圖對(duì)象。

(2)從源 Oracle 中獲取物化視圖定義,在目的庫手動(dòng)創(chuàng)建物化視圖,此方法適用于所需遷移對(duì)象較少,或者對(duì) a 方法中遷移出錯(cuò)的物化視圖單獨(dú)處理。

4、PL/SQL 移植

接下來對(duì)自定義類型、存儲(chǔ)過程、函數(shù)、觸發(fā)器進(jìn)行移植,可以使用達(dá)夢(mèng) DTS 工具進(jìn)行遷移。如果遇到大量錯(cuò)誤難以排查,也可以使用如下的方法進(jìn)行分步遷移,導(dǎo)出待移植對(duì)象的腳本:

方法一:使用 PL/SQL DEVELOPER 等工具導(dǎo)出自定義類型、存儲(chǔ)過程、函數(shù)、觸發(fā)器等 PL/SQL 腳本。

方法二:在 sqlplus 中使用 Oracle 自帶的包導(dǎo)出自定義類型、存儲(chǔ)過程、函數(shù)、觸發(fā)器等。

同理,其他類型如 TYPE, PACKAGE,PACKAGEBODY 等也可以用這種方法導(dǎo)出。

5、移植后收尾工作

5.1、更新統(tǒng)計(jì)信息

數(shù)據(jù)核對(duì)完成無問題后,應(yīng)進(jìn)行一次全庫的統(tǒng)計(jì)信息更新工作。更新統(tǒng)計(jì)信息的目的在于大批量遷移數(shù)據(jù)后,可能會(huì)導(dǎo)致數(shù)據(jù)庫優(yōu)化器根據(jù)錯(cuò)誤的統(tǒng)計(jì)信息得到錯(cuò)誤的查詢計(jì)劃,嚴(yán)重影響查詢性能。

5.2、數(shù)據(jù)備份

再對(duì)數(shù)據(jù)更新完統(tǒng)計(jì)信息后,在數(shù)據(jù)量不大,磁盤空間足夠的情況下應(yīng)進(jìn)行一次數(shù)據(jù)備份工作。數(shù)據(jù)備份有兩種方式:正常停止數(shù)據(jù)庫后,拷貝備份 data 文件夾;或者開啟歸檔日志后,進(jìn)行物理備份。

5.3、整理對(duì)象腳本

整理所有數(shù)據(jù)庫對(duì)象腳本,這是為了對(duì)項(xiàng)目移植情況進(jìn)行記錄和備份,方便再次進(jìn)行數(shù)據(jù)遷移。備份的數(shù)據(jù)庫對(duì)象腳本包括:序列定義及當(dāng)前值,表定義,索引定義,視圖定義,函數(shù)定義,存儲(chǔ)過程定義,包及包體定義、自定義類型和同義詞定義。

6、系統(tǒng)測(cè)試與優(yōu)化

數(shù)據(jù)庫和應(yīng)用系統(tǒng)移植完畢后開啟 sql 日志,對(duì)系統(tǒng)進(jìn)行全面測(cè)試,排除移植過程中錯(cuò)誤的地方,對(duì)慢的 sql 語句進(jìn)行優(yōu)化。

在功能測(cè)試和性能測(cè)試的時(shí)候可以開啟 SQL 日志,然后通過日志分析工具從執(zhí)行時(shí)間和執(zhí)行次數(shù)兩個(gè)維度對(duì) SQL 日志進(jìn)行分析,生產(chǎn)分析結(jié)果,然后根據(jù)分析結(jié)果對(duì)系統(tǒng)性能進(jìn)行優(yōu)化。

結(jié)語

在數(shù)據(jù)庫國(guó)產(chǎn)化進(jìn)程中,大量Oracle數(shù)據(jù)庫向國(guó)產(chǎn)數(shù)據(jù)庫移植是一個(gè)長(zhǎng)期、復(fù)雜的過程,需要管理、業(yè)務(wù)和運(yùn)維各方的充分協(xié)作。美創(chuàng)DBA團(tuán)隊(duì)對(duì)Oracle到國(guó)產(chǎn)數(shù)據(jù)庫的移植場(chǎng)景進(jìn)行了充分探索和實(shí)踐,可以結(jié)合客戶實(shí)際環(huán)境和個(gè)性化需求提供安全、高效的移植服務(wù),并確保數(shù)據(jù)庫移植后生產(chǎn)業(yè)務(wù)系統(tǒng)的持續(xù)穩(wěn)定運(yùn)行。

極客網(wǎng)企業(yè)會(huì)員

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。

2019-09-27
從Oracle安全移植到國(guó)產(chǎn)達(dá)夢(mèng)數(shù)據(jù)庫的DBA實(shí)踐
  文章來源:杭州美創(chuàng)科技有限公司隨著我國(guó)對(duì)信息安全和自主可控技術(shù)的日益重視,國(guó)產(chǎn)數(shù)據(jù)庫在黨政機(jī)關(guān)、軍隊(duì)和大型央企等行業(yè)中得到了快速應(yīng)用。

長(zhǎng)按掃碼 閱讀全文