淺析Oracle數(shù)據(jù)庫的表空間的移動方法
數(shù)據(jù)庫的移動應(yīng)該說也是比較常見的現(xiàn)象,畢竟有種種理由逼迫我們移動。那么如何才能更快的完成移動呢?請看下文。
在使用Oracle數(shù)據(jù)庫的過程中,經(jīng)常會遇到將數(shù)據(jù)庫中的數(shù)據(jù)從一個數(shù)據(jù)庫移動到另一個數(shù)據(jù)庫的情況,如果移動的數(shù)據(jù)量不是太大,我們可以使用EXPORT/IMPORT將數(shù)據(jù)進(jìn)行導(dǎo)出/導(dǎo)入。但如果需要搬移的數(shù)據(jù)量非常龐大,則用這種方法進(jìn)行數(shù)據(jù)移動非常緩慢。在Oracle 11g版本中,提供了可以對表空間進(jìn)行移動的方法,通過搬移表空間可大大降低數(shù)據(jù)遷移的速度,提高工作效率。
對表空間進(jìn)行移動時應(yīng)注意以下幾點:
(1)源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫必須在相同硬件平臺上。例如我們可以在Sun Solaris平臺的Oracle數(shù)據(jù)庫之間搬移表空間,也可以在Windows 2000平臺的Oracle數(shù)據(jù)庫之間搬移表空間,但是不能在Sun Solaris/Windows 2000之間搬移表空間。
(2)源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫的字符集和民族字符集必須相同。
(3)不能將表空間搬移到具有同名表空間的目標(biāo)數(shù)據(jù)庫中。
(4)在Oracle8i之間搬移表空間時,源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫的數(shù)據(jù)塊尺寸一定要相同。
下面我們以O(shè)racle for Windows 2000為例說明移動表空間的具體方法。
一、檢查要移動的表空間
當(dāng)搬移表空間時,如果被搬移表空間中的數(shù)據(jù)沒有和其它表空間中的數(shù)據(jù)有參照關(guān)系,則可直接對此表空間進(jìn)行搬移;如果被搬移表空間中的數(shù)據(jù)與其它表空間中的數(shù)據(jù)有參照關(guān)系,那么在移動表空間時,凡與被移動表空間有參照關(guān)的表空間也應(yīng)進(jìn)行搬移,否則移動到目的地的表空間中的數(shù)據(jù)是不完整的。例如表空間local包含了表A1,而表空間local2包含了表A1的索引IDX_A1,此時如果要搬移表空間local,則也應(yīng)同時搬移表空間local2,此時我們稱表空間local、local2為自包含的。在進(jìn)行表空間搬移之前,可以用下列方法查看被搬移的表空間是否為自包含表空間。
- SQL>execute dbms_tts.transport_set_check(ts_list=>'local',
- incl_constraints=>TRUE);
參數(shù)ts_list用于指定要搬移的表空間,incl_constraints用于指定是否檢查完整性約束。執(zhí)行完過程dbms_tts.transport_set_check之后,系統(tǒng)將違反自包含表空間的信息存入臨時表transport_set_violations。查詢該表時,如果沒有返回任何信息,說明表空間是自包含的,否則會返回非自含表空間的原因:
二、導(dǎo)出表空間信息
為保持?jǐn)?shù)據(jù)文件的一致性,在導(dǎo)出自包含表空間數(shù)據(jù)字典信息之前,應(yīng)首先將自包含表空間轉(zhuǎn)變?yōu)橹蛔x狀態(tài),作用是使表空間信息不會發(fā)生變化。
- SQL>alter tablespace local read only;
- SQL>alter tablespace local2 read only;
將表空間設(shè)置為只讀關(guān)態(tài)時,會在表空間數(shù)據(jù)文件上發(fā)出檢查點,并且其內(nèi)容不會發(fā)生任何變化,此時就可以導(dǎo)出表空間信息了。導(dǎo)出表空間僅僅是導(dǎo)出與其相關(guān)的數(shù)據(jù)字典信息,而不是導(dǎo)出表空間的任何數(shù)據(jù),使用如下操作系統(tǒng)命令可導(dǎo)出表空間local和local2的信息。
- D:>EXP transport_tablespace=y tablespaces=local,local2 file=
- expdat.dmp
用戶名:internal/oracle@test as sysdba
參數(shù):transport_tablespace搬移表空間選項,Y表示導(dǎo)出表空間信息;tablespaces用于指定要導(dǎo)出的表空間;file用于指定存放導(dǎo)出信息的文件。
導(dǎo)出表空間信息之后,使用操作系統(tǒng)命令將表空間數(shù)據(jù)文件和導(dǎo)出文件(expdat.dmp)復(fù)制到目標(biāo)數(shù)據(jù)庫所在機器相應(yīng)的目錄中。
三、導(dǎo)入表空間
在將表空間數(shù)據(jù)文件和導(dǎo)出文件復(fù)制到目標(biāo)數(shù)據(jù)庫所在機器之后,就可以將表空間信息導(dǎo)入到目標(biāo)數(shù)據(jù)庫中了。導(dǎo)入自包含表空間實際是將數(shù)據(jù)字典信息從導(dǎo)出文件裝載到目標(biāo)數(shù)據(jù)中,如表空間名稱、表空間所對應(yīng)數(shù)據(jù)文件以及數(shù)據(jù)對象名稱等。具體的操作系統(tǒng)命令如下:
- D:>IMP transport_tablespace=y datafiles= 'd:localdblocal1.dbf'
- ,'d:localdblocal2.dbf’
用戶名:internal/oracle@test as sysdba
當(dāng)執(zhí)行完上述命令之后,會將表空間local和local2及其所包含的所有數(shù)據(jù)對象信息導(dǎo)入到目標(biāo)數(shù)據(jù)庫中。
注意:在Oracle中搬移表空間時,源表空間中存放的所有數(shù)據(jù)對象的所有者在目標(biāo)數(shù)據(jù)庫中必須存在,如果不存在,則應(yīng)在導(dǎo)入表空間之前建立相應(yīng)的用戶,然后再導(dǎo)入表空間。
【編輯推薦】
- Oracle數(shù)據(jù)庫遷移相關(guān)技巧介紹
- Oracle設(shè)置系統(tǒng)參數(shù)進(jìn)行性能優(yōu)化
- Oracle數(shù)據(jù)庫維護(hù)中的前瞻性
- Oracle與SQL Server之間的數(shù)據(jù)遷移
- 實例講解Oracle到SQL Server主鍵遷移


















