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