劉 偉,付媛媛,劉德珞,劉 迪,劉金平,譚振江
(吉林師范大學(xué) 計(jì)算機(jī)學(xué)院,吉林 四平 136000)
在Oracle數(shù)據(jù)庫(kù)的管理中,經(jīng)常需要進(jìn)行大量數(shù)據(jù)的遷移,如數(shù)據(jù)庫(kù)版本的變遷,操作系統(tǒng)平臺(tái)的變更,硬件系統(tǒng)的升級(jí)等,都有可能進(jìn)行數(shù)據(jù)移動(dòng).移動(dòng)數(shù)據(jù)的規(guī)模包括表級(jí)別、模式級(jí)別、表空間級(jí)別和數(shù)據(jù)庫(kù)級(jí)別[1-2].
表空間是Oracle數(shù)據(jù)庫(kù)的最大邏輯單元,數(shù)據(jù)庫(kù)的所有對(duì)象都被邏輯劃分在不同表空間中[3].表空間級(jí)的數(shù)據(jù)移動(dòng)最早在Oracle 8中采用,可實(shí)現(xiàn)數(shù)據(jù)庫(kù)間以表空間為單位的數(shù)據(jù)移動(dòng).在數(shù)據(jù)遷出時(shí),只需導(dǎo)出對(duì)象的元數(shù)據(jù)[4-5],不必包含大量物理數(shù)據(jù),物理數(shù)據(jù)仍保存在數(shù)據(jù)文件中,隨元數(shù)據(jù)一起通過(guò)復(fù)制進(jìn)入目標(biāo)數(shù)據(jù)庫(kù),不經(jīng)過(guò)遷入和遷出環(huán)節(jié),所以遷入和遷出效率更高,相對(duì)于其它級(jí)別的數(shù)據(jù)移動(dòng)更加靈活和高效,本文以Rman技術(shù)為工具闡述表空間數(shù)據(jù)移動(dòng)的實(shí)現(xiàn)方法.
表空間遷移過(guò)程如圖1.
在進(jìn)行表空間數(shù)據(jù)遷移時(shí),并不直接使用表空間所在源數(shù)據(jù)庫(kù),而是利用待遷表空間的備份來(lái)實(shí)現(xiàn)數(shù)據(jù)遷移,Rman使用備份對(duì)輔助數(shù)據(jù)庫(kù)進(jìn)行恢復(fù)操作,將輔助數(shù)據(jù)庫(kù)作為一個(gè)臨時(shí)的數(shù)據(jù)源,待遷表空間的數(shù)據(jù)來(lái)源于輔助數(shù)據(jù)庫(kù)[6-8].Rman使用Expdp生成包含待遷表空間元數(shù)據(jù)的導(dǎo)出文件,實(shí)現(xiàn)遷入功能的腳本文件,待遷表空間的數(shù)據(jù)文件.這些文件通過(guò)復(fù)制進(jìn)入目標(biāo)數(shù)據(jù)庫(kù),在目標(biāo)數(shù)據(jù)庫(kù)執(zhí)行遷入功能的腳本文件,將待遷表空間遷入目標(biāo)數(shù)據(jù)庫(kù),完成整個(gè)表空間的遷移過(guò)程[9].
圖1遷移過(guò)程
Oracle數(shù)據(jù)庫(kù)的不同表空間之間可能存在關(guān)聯(lián),如果在遷移表空間時(shí),不考慮表空間的關(guān)聯(lián)性,可能會(huì)給以后表空間的使用埋下隱患.在遷移表空間前,應(yīng)對(duì)待遷表空間的相關(guān)性進(jìn)行檢查.
Conn sys/lw@orcl as sysdba
Exec dbms_tts.transport_set_check(‘TBA’,TRUE);
select * from transport_set_violations;
conn ua/lw
alter table lw1 drop constraint fk_lw;
通過(guò)Transport_set_violations視圖查看表空間TBA的相關(guān)性檢查結(jié)果,如果無(wú)結(jié)果顯示,說(shuō)明不存在關(guān)聯(lián),否則可以按顯示的提示信息取消關(guān)聯(lián),或者將相關(guān)聯(lián)表空間也一起遷移.檢測(cè)結(jié)果如圖2所示,說(shuō)明表空間TBA中LW1表與表空間USERS中LW2表之間存在完整性約束,對(duì)于該問(wèn)題的解決方法有兩種,刪除兩表之間的完整性約束,或者將TBA和USERS表空間同時(shí)進(jìn)行遷移.
圖2 相關(guān)性檢查結(jié)果
遷移前準(zhǔn)備環(huán)境包括,源數(shù)據(jù)庫(kù)例程orcl,待遷表空間TBA,該表空間為用戶UA的默認(rèn)表空間,邏輯上包含UA方案下所有對(duì)象,目標(biāo)數(shù)據(jù)庫(kù)例程SIDB,將表空間TBA遷入該數(shù)據(jù)庫(kù),并將源數(shù)據(jù)庫(kù)方案UA下對(duì)象轉(zhuǎn)入該數(shù)據(jù)庫(kù)的UB方案[10].代碼如下:
Conn system/lw@orcl
create tablespace tba datafile 'd:xbdata2.dbf' size 10M;
create user ua identified by lw default tablespace tba
temporary tablespace temp;
grant create session to ua;
alter user ua quota unlimited on tba;
grant resource to ua;
利用Rman工具生成待遷表空間集.待遷表空間集包含待遷表空間的數(shù)據(jù)文件、表空間元數(shù)據(jù)的導(dǎo)出文件、導(dǎo)入腳本文件等,這些文件將被復(fù)制到目標(biāo)數(shù)據(jù)庫(kù),作為遷入表空間的依據(jù).代碼如下:
Rman target system/lw@orcl
Transport tablespace TBA
Tablespace destination 'd:lw ran'
Auxiliary destination 'd:lwau'
Datapump directory DRLW
Dump file 'dmplw.dmp'
Import script 'implw.sql'
Export log 'explw.log'
在Rman生成待遷表空間集時(shí),自動(dòng)創(chuàng)建輔助實(shí)例和初始化參數(shù)文件.如圖3和圖4所示.
圖3 自動(dòng)創(chuàng)建實(shí)例
Rman將包含元數(shù)據(jù)的導(dǎo)出文件,實(shí)現(xiàn)遷入功能的腳本文件,待遷表空間的數(shù)據(jù)文件送入'D:LWTRAN',輔助數(shù)據(jù)庫(kù)的相關(guān)文件送入'D:LWAU'.
圖4 自動(dòng)創(chuàng)建初始化參數(shù)
使用Expdp導(dǎo)出待遷表空間的元數(shù)據(jù),生成導(dǎo)出文件,文件被存放到Directory對(duì)象所對(duì)應(yīng)的目錄中.
Create directory dblw as 'd:lwdm';
Expdp system/lw transport_tablespaces=TBA dumpfile=dmplw.dmp directory=dblw logfile=explw.log;
在生成待遷表空間集前,Rman會(huì)利用備份創(chuàng)建一個(gè)輔助數(shù)據(jù)庫(kù),作為一個(gè)臨時(shí)的源數(shù)據(jù)庫(kù),待遷表空間的數(shù)據(jù)來(lái)源于輔助數(shù)據(jù)庫(kù),可避免遷移對(duì)源數(shù)據(jù)庫(kù)使用的影響.
創(chuàng)建初始化參數(shù)文件'D:initaux.ora',存放輔助數(shù)據(jù)庫(kù)的初始化參數(shù)[11-12].
Db_name='dblw'
Compatible=11.2.0.0.0
Db_block_size=8192
Db_files=200
Shared_pool_size=289406976
Large_pool_size=4194304
Db_create_file_dest='D:LWAU'
Control_files='D:LWAU'
在生成待遷表空間集前,通過(guò)以下代碼設(shè)置輔助數(shù)據(jù)庫(kù)的初始化參數(shù)文件為'D:initaux.ora'.
Set auxiliary instance parameter file to 'D:initaux.ora'
在生成待遷表空間的過(guò)程中,Rman將自動(dòng)創(chuàng)建輔助數(shù)據(jù)庫(kù),依據(jù)指定的參數(shù)文件配置初始化參數(shù),啟動(dòng)數(shù)據(jù)庫(kù)例程,使用備份集恢復(fù)數(shù)據(jù)到輔助數(shù)據(jù)庫(kù),如圖5所示.恢復(fù)結(jié)束后,執(zhí)行代碼“Alter database open resetlogs;”打開(kāi)輔助數(shù)據(jù)庫(kù),作為遷移表空間的臨時(shí)數(shù)據(jù)源.
圖5 啟動(dòng)例程并恢復(fù)
修改輔助數(shù)據(jù)庫(kù)中待遷表空間的狀態(tài)為只讀狀態(tài),為數(shù)據(jù)遷出做準(zhǔn)備,而源數(shù)據(jù)庫(kù)的TBA表空間并不受影響.
Alter tablespace TBA read only;
將待遷表空間的數(shù)據(jù)文件和導(dǎo)出文件復(fù)制到目標(biāo)數(shù)據(jù)庫(kù),利用Impdp工具將元數(shù)據(jù)導(dǎo)入目標(biāo)數(shù)據(jù)庫(kù).
Create directory dblw as 'd:lwdm';
Impdp system/lw dumpfile=dmplw.dmp
Directory=dblw nologfile=y
Transport_datafiles=d:lw bua01.dbf
Remap_schema=(UA:UB);
在完成導(dǎo)入命令之后,待遷表空間被遷入目標(biāo)數(shù)據(jù)庫(kù),表空間數(shù)據(jù)文件為'd:lw bua01.dbf',其所包含UA方案下對(duì)象被轉(zhuǎn)入目標(biāo)數(shù)據(jù)庫(kù)的UB方案,因待遷表空間在遷入過(guò)程中處于只讀狀態(tài),為在該表空間上執(zhí)行操作,還應(yīng)將該表空間設(shè)為可讀寫(xiě)狀態(tài).
Alter tablespace TBA read write;
Conn ub/ub@sidb
Select * from user_tables;
遷移結(jié)果的驗(yàn)證,以UB用戶連接數(shù)據(jù)庫(kù),查詢?cè)摲桨赶卤淼男畔?可發(fā)現(xiàn)原UA方案的表隨待遷表空間轉(zhuǎn)入U(xiǎn)B方案.
Rman工具通過(guò)備份數(shù)據(jù)實(shí)現(xiàn)表空間數(shù)據(jù)的遷移,在遷移過(guò)程中利用輔助數(shù)據(jù)庫(kù)作為臨時(shí)數(shù)據(jù)源,不僅可保證源數(shù)據(jù)庫(kù)在遷移過(guò)程中的正常運(yùn)行,同時(shí)可實(shí)現(xiàn)表空間不同時(shí)間點(diǎn)的不完全遷移,相對(duì)于其它工具更加靈活,數(shù)據(jù)庫(kù)的可用性更高.
[1]李圣陶.基于Oracle的數(shù)據(jù)遷移優(yōu)化方法研究[D].蘇州:蘇州大學(xué),2010.
[2]劉天時(shí),孟東升,王田均,等.信息系統(tǒng)數(shù)據(jù)遷移方法研究與應(yīng)用[J].西安大學(xué)學(xué)報(bào)(自然科學(xué)版),2006,36(1):25~28.
[3]路 川,胡欣杰.Oracle 11g寶典[M].北京:電子工業(yè)出版社,2009.
[4]郭鄭州,陳軍紅,等.Oracle完全學(xué)習(xí)手冊(cè)[M].北京:清華大學(xué)出版社,2011.
[5]任慶東,李天陽(yáng),袁 滿,等.基于元數(shù)據(jù)驅(qū)動(dòng)的通用數(shù)據(jù)移動(dòng)工具[J].大慶石油學(xué)院學(xué)報(bào),2011,35(1):76~80.
[6]盤莉莉.SQLServer數(shù)據(jù)移動(dòng)方法初探[J].桂林航天工業(yè)高等專科學(xué)校學(xué)報(bào),2005,39(3):18~19.
[7]曹美琴.基于RMAN技術(shù)的ORACLE數(shù)據(jù)庫(kù)備份恢復(fù)研究[J].安徽大學(xué)學(xué)報(bào)(自然科學(xué)版),2007,31(2):25~28.
[8]段 煉,張建鋼,范良志,等.基于Oracle 10g RMAN的備份與恢復(fù)技術(shù)[J].湖南工程學(xué)院學(xué)報(bào),2008,18(2):60~71.
[9]李 然.Oracle數(shù)據(jù)庫(kù)中實(shí)現(xiàn)表空間的遷移方法[J].武漢工業(yè)學(xué)院學(xué)報(bào),2008,27(3):57~60.
[10]劉 偉,譚振江.用戶與角色管理方式的研究[J].吉林師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2012,33(3):116~118.
[11]王東明,李星海,王海鳳,等.Oracle 11g管理備份恢復(fù)從入門到精通[M].北京:中國(guó)水利水電出版社,2008.
[12]唐遠(yuǎn)新,曲衛(wèi)平,李曉峰,等.Oracle數(shù)據(jù)庫(kù)實(shí)用教程(第2版)[M].北京:中國(guó)水利水電出版社,2009.