摘 要:將兩個(gè)數(shù)據(jù)庫(kù)以最快的方式移植到較高的Linux平臺(tái)。數(shù)據(jù)采用可傳輸性表空間的方法進(jìn)行移植,其它對(duì)象采用數(shù)據(jù)泵不同功能選項(xiàng)進(jìn)行移植。
關(guān)鍵字:數(shù)據(jù)泵;順序;細(xì)節(jié)處理
中圖分類號(hào):TP311.1
近年來(lái),由于服務(wù)器平臺(tái)更新?lián)Q代較快,原來(lái)在設(shè)備型號(hào)較陳舊的一些數(shù)據(jù)庫(kù)平臺(tái)需要移植到性能較高的其它平臺(tái),數(shù)據(jù)庫(kù)移植也就有了較多需求。關(guān)于數(shù)據(jù)庫(kù)移植,現(xiàn)已有很多方法和經(jīng)驗(yàn)介紹,有針對(duì)全庫(kù)的rman移植,也有針對(duì)個(gè)別對(duì)象的數(shù)據(jù)泵移植。筆者由于工作需要,將兩個(gè)數(shù)據(jù)庫(kù)以最快的方式移植到較高的Linux平臺(tái),其中數(shù)據(jù)采用可傳輸性表空間的方法進(jìn)行移植,其它對(duì)象采用數(shù)據(jù)泵不同功能選項(xiàng)進(jìn)行移植。
1 兩個(gè)數(shù)據(jù)庫(kù)平臺(tái)介紹
源庫(kù):windows2003 oracle;版本:10.2.0.5.0;字節(jié)順序:little(字節(jié)順序一致很重要,省了轉(zhuǎn)換的麻煩)。
目標(biāo)庫(kù):windows2003 oracle;版本:10.2.0.5.7;字節(jié)順序:little(Select * from V$TRANSPORTABLE_PLATFORM ORDER BY PLATFORM_ID;)。
確認(rèn)字節(jié)順序一致很重要,省了轉(zhuǎn)換的麻煩,不在此贅述。
數(shù)據(jù)庫(kù)移植思路:根據(jù)源和目的兩個(gè)表空間的特點(diǎn),采用傳輸性表空間移植的方式,先對(duì)表空間DB01_A和DB01_B進(jìn)行移植,存儲(chǔ)過程、函數(shù)、視圖、db-link連接使用數(shù)據(jù)泵分類按序移植。
2 移植步驟
2.1 移植前的準(zhǔn)備檢查
(1)首先對(duì)源表空間的自包含集進(jìn)行檢查、清理。即需要移植的表空間不得包含依賴性的非本表空間的對(duì)象建立的關(guān)系。
Exec dbms_tts.transport_set_check(‘DB01_A’,TRUE,TRUE);
Select * from TRANSPORT_SET_VIOLATIONS;
Exec dbms_tts.transport_set_check(‘DB01_B’,TRUE,TRUE);
Select * from TRANSPORT_SET_VIOLATIONS;
對(duì)DB01_A和DB01_B不符合檢查標(biāo)準(zhǔn)的索引等對(duì)象刪除、清理。
(2)源、目的庫(kù)的用戶要?jiǎng)?chuàng)建一致。參考源數(shù)據(jù)庫(kù)在目標(biāo)庫(kù)建立了所有的普通用戶。移植后的用戶屬性、權(quán)限及默認(rèn)表空間待移植后重新賦權(quán)。執(zhí)行expdp的用戶要賦予exp_full_database的角色。
(3)目的庫(kù)的移植元文件使用目錄確認(rèn)。
元文件放到目標(biāo)庫(kù)DATA_PUMP_DIR參數(shù)指定的地方,具體確定方法為:
Select * from dba_directories;DATA_PUMP_DIR一般是默認(rèn)的目錄,路徑過長(zhǎng)。筆者新建一個(gè)目錄,并指定其為導(dǎo)入/出目錄。在系統(tǒng)跟即/目錄下創(chuàng)建yizhi,在sqlplus里制定/yizhi為導(dǎo)入導(dǎo)出目錄。
create or replace directory directory_name as ‘/yizhi’;
grant read,write on directory directory_name to system
如果使用其它普通用戶導(dǎo)入,還需賦予創(chuàng)建對(duì)話的權(quán)限;
Grant create session to username;
2.2 正式移植
(1)源庫(kù)關(guān)閉所有應(yīng)用、連接、計(jì)劃任務(wù),關(guān)閉監(jiān)聽程序。在關(guān)閉監(jiān)聽的情況下,在sqlplus里修改數(shù)據(jù)庫(kù)的屬性,read only。必須將數(shù)據(jù)庫(kù)的屬性修改為read only,數(shù)據(jù)庫(kù)元數(shù)據(jù)才能導(dǎo)出。上述舉措為了保持移植數(shù)據(jù)一致性。
alter tablespace DB01_A read only;
alter tablespace DB01_B read only;
(2)導(dǎo)出元數(shù)據(jù),指定可傳輸表空間參數(shù)TRANSPORT_TABLESPACES
expdp ‘sys/xxx@db01 as sysdba’ dumpfile= DB01_A.DMP directory=DATA_PUMP_DIR TRANSPORT_TABLESPACES=DB01_A;
expdp ‘sys/xxx@db01 as sysdba’ dumpfile= DB01_B.DMP directory=DATA_PUMP_DIR TRANSPORT_TABLESPACES=DB01_B;
經(jīng)實(shí)戰(zhàn)移植驗(yàn)證,550G的表空間DB01_A 導(dǎo)出成80M的元文件需4分鐘,80G的表空間DB01_B導(dǎo)出 70M的元文件需3分鐘。
(3)分類導(dǎo)出其它。
expdp system/super dumpfile=view.dmp directory=DATA_PUMP_DIR logfile=job.log full=Y include= VIEW(要注意加full=Y)
然后將參數(shù)VIEW分別改為FUCTION,DB_LINK,PROCEDURE
(4)傳輸元文件及物理數(shù)據(jù)文件。通過FTP或工具傳輸元文件及數(shù)據(jù)文件。這一步驟提前要安排好物理文件的存放及目的存放規(guī)劃。
(5)按順序?qū)氡砜臻g、視圖、db_link、存儲(chǔ)過程、JOB。這一步分類和順序很重要,因?yàn)閷?duì)象之間有相互的依賴關(guān)系。比如有的存儲(chǔ)過程里用到db_link鏈接,db_link如果未先建好,就會(huì)導(dǎo)致存儲(chǔ)過程導(dǎo)入的失敗。
Impdp system/oracle01 dumpfile=DB01_A.DMP directory=DIRECTORY_NAME
TRANSPORT_DATAFILES= /Ora_da1/DB01_A.ORA,……. /Ora_da1/DB01_A32.ORA
impdp system/oracle dumpfile=DB01_B.DMP directory=DIRECTORY_NAME
TRANSPORT_DATAFILES= /Ora_da1/DB01_B.ORA,……/Ora_da1/DB01_B7.ORA
表空間導(dǎo)入完成,打開表空間的可讀寫屬性(因?yàn)楹罄m(xù)導(dǎo)入的對(duì)象要用到數(shù)據(jù)表的讀寫)
alter tablespace DB01_A read write;alter tablespace DB01_B read write;
修改數(shù)據(jù)文件的文件屬主。chown oracle:oinstall 數(shù)據(jù)文件列表。然后檢查導(dǎo)入表空間的物理文件及邏輯文件狀態(tài)及可用性。
(6)分類按序移植具體主要為存儲(chǔ)過程,函數(shù)、視圖。此步驟并不是針對(duì)用戶來(lái)移植的,而是針對(duì)全部對(duì)象進(jìn)行的移植。
impdp system/super dumpfile=all.dmp directory=DIRECTORY_NAME include= VIEW
然后同上,將db_link, Function,PROCEDURE,JOB等指定為include參數(shù)值進(jìn)行導(dǎo)入。至此,數(shù)據(jù)庫(kù)所有應(yīng)用對(duì)象移植完畢,可以在新創(chuàng)建的數(shù)據(jù)庫(kù)環(huán)境空間里繼續(xù)分享源數(shù)據(jù)庫(kù)空間的數(shù)據(jù)及用戶方案。
3 采用傳輸性表空間的方法移植數(shù)據(jù)庫(kù)的特點(diǎn)及總結(jié)
通常采用傳輸性表空間的數(shù)據(jù)方法移植數(shù)據(jù)表空間的。本次采用expdp分別將數(shù)據(jù)庫(kù)各數(shù)據(jù)對(duì)象移至目標(biāo)平臺(tái)。關(guān)鍵點(diǎn)在參數(shù)、順序、細(xì)節(jié)的處理。數(shù)據(jù)庫(kù)同步的幾個(gè)關(guān)鍵點(diǎn):
(1)修改用戶權(quán)限。在表空間移植前,將原數(shù)據(jù)庫(kù)所有用戶在新目標(biāo)庫(kù)創(chuàng)建。待表空間、VIEW、function等移植后,就參照原數(shù)據(jù)庫(kù)用戶創(chuàng)建腳本將新庫(kù)數(shù)據(jù)庫(kù)用戶權(quán)限全部更新一遍。筆者采用利用源DDL腳本的方法賦權(quán)。(2)分類按序。當(dāng)導(dǎo)入發(fā)現(xiàn)有錯(cuò)誤提示時(shí),不要擔(dān)心,看一下提示便可了解邏輯關(guān)系,調(diào)整一下導(dǎo)入順序,問題便迎刃而解。(3)移植點(diǎn)和時(shí)間的把握。最初采用此方法,是因源庫(kù)沒有基于rman的數(shù)據(jù)庫(kù)備份。待筆者執(zhí)行起來(lái)發(fā)現(xiàn),對(duì)象及表空間的導(dǎo)出時(shí)間是非常短的,當(dāng)了解了整個(gè)操作步驟及過程后,整個(gè)數(shù)據(jù)庫(kù)移植占時(shí)最長(zhǎng)的就是物理數(shù)據(jù)文件傳輸過程,我們可以通過多種方式提高網(wǎng)絡(luò)傳輸速度以縮短數(shù)據(jù)庫(kù)移植用時(shí)。特別是針對(duì)只有數(shù)據(jù)表空間變化較多的數(shù)據(jù)庫(kù)而言,在進(jìn)行過一次測(cè)試移植后,完全可以快速順利進(jìn)行數(shù)據(jù)移植和同步。
上述實(shí)現(xiàn)過程相對(duì)于基于rman備份的數(shù)據(jù)庫(kù)移植,移植的步驟并不是簡(jiǎn)潔的,但經(jīng)實(shí)際操作發(fā)現(xiàn),確實(shí)比較靈活、方便和快捷的。
參考文獻(xiàn):
[1] 吳秀君.淺談Oracle數(shù)據(jù)庫(kù)SQL性能優(yōu)化[J].數(shù)字技術(shù)與應(yīng)用.2013(09).
[2]Oracle數(shù)據(jù)庫(kù)移植方案[J].中南民族大學(xué)學(xué)報(bào)(自然科學(xué)版),2005(03).
作者簡(jiǎn)介:張昆,女(1979.2-),德州人,研究生,工程師,研究方向:網(wǎng)絡(luò)通信、數(shù)據(jù)庫(kù)管理;張倩,女(1975.1—),漢族,德州人,研究生,副教授,研究方向:網(wǎng)絡(luò)搭建、數(shù)據(jù)庫(kù)管理。
作者單位:聯(lián)通德州市分公司 信息化服務(wù)中心,山東德州 253000;德州職業(yè)技術(shù)學(xué)院 教務(wù)處,山東德州 253034