怎樣移動Oracle資料庫的表空間

buptdream發表於2008-12-04
怎樣移動Oracle資料庫的表空間
  
   在使用Oracle資料庫的過程中,經常會碰到將
資料庫中的資料從

一個資料庫移動到另一個資料庫的情況,假如移動的資料量不是太大,

我們能夠使用EXPORT/IMPORT將資料進行匯出/匯入。但假如需要搬移的

資料量很龐大,則用這種方法進行資料移動很緩慢。在Oracle8i版本中

,提供了能夠對錶空間進行移動的方法,通過搬移表空間可大大降低數

據遷移的速度,提高工作效率。
  對錶空間進行移動時應注意以下幾點:
(1)源資料庫和目標資料庫必須在相同硬體平臺上。例如我們能夠在

Sun Solaris平臺的Oracle資料庫之間搬移表空間,也能夠在Windows

2000平臺的Oracle資料庫之間搬移表空間,但是不能在Sun

Solaris/Windows 2000之間搬移表空間。
(2)源資料庫和目標資料庫的字符集和民族字符集必須相同。
(3)不能將表空間搬移到具備同名表空間的目標資料庫中。
(4)在Oracle8i之間搬移表空間時,源資料庫和目標資料庫的資料塊

尺寸一定要相同。
  
  下面我們以Oracle8i(8.1.5) 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@testas sysdba
  
  引數:transport_tablespace搬移表空間選項,Y表示匯出表空間

資訊;tablespaces用於指定要匯出的表空間;file用於指定存放匯出

資訊的文件。
  
  匯出表空間資訊之後,使用作業系統命令將表空間資料文件和匯出

文件(expdat.dmp)複製到目標資料庫所在機器相應的目錄中。

bbs.bitsCN.com
  
  三、匯入表空間
  
  在將表空間資料文件和匯出文件複製到目標資料庫所在機器之後,

就能夠將表空間資訊匯入到目標資料庫中了。匯入自包含表空間實際是

將資料字典資訊從匯出文件裝載到目標資料中,如表空間名稱、表空間

所對應資料文件連同資料物件名稱等。具體的作業系統命令如下:
  
  D:\>IMP transport_tablespace=y datafiles= ’d:\localdb\

local1.dbf’
  
  ,’d:\localdb\local2.dbf’
  
  使用者名稱:
internal/oracle@testas sysdba
  
  當執行完上述命令之後,會將表空間local和local2及其所包含的

任何資料物件資訊匯入到目標資料庫中。
  
  注意:在Oracle8.1.5中搬移表空間時,源表空間中存放的任何數

據物件的任何者在目標資料庫中必須存在,假如不存在,則應在匯入表

空間之前建立相應的使用者,然後再匯入表空間。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10701850/viewspace-504754/,如需轉載,請註明出處,否則將追究法律責任。

相關文章