移動Oracle的表空間

2021-04-21 00:04:54 字數 2344 閱讀 4560

www.grn8.com

綠吧導航網 免費廣告換連線。

如何移動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=>'eplay',

incl_constraints=>true);

引數ts_list用於指定要搬移的表空間,incl_constraints用於指定是否檢查完整性約束。

執行完過程dbms_tts.transport_set_check之後,系統將違反自包含表空間的資訊存入臨時表transport_set_violations。查詢該錶時,如果沒有返回任何資訊,說明表空間是自包含的,否則會返回非自含表空間的原因,見下圖:

二、匯出表空間資訊

為保持資料檔案的一致性,在匯出自包含表空間資料字典資訊之前,應首先將自包含表空間轉變為唯讀狀態,作用是使表空間資訊不會發生變化。

sql>alter tablespace eplay read only;

sql>alter tablespace eplay2 read only;

將表空間設定為唯讀關態時,會在表空間資料檔案上發出檢查點,並且其內容不會發生任何變化,此時就可以匯出表空間資訊了。匯出表空間僅僅是匯出與其相關的資料字典資訊,而不是匯出表空間的任何資料,使用如下作業系統命令可匯出表空間local和local2的資訊。

d:/>exp transport_tablespace=y tablespaces=eplay,eplay2 file=

expdat.dmp

使用者名稱:internal/oracle@test

as sysdba

引數:transport_tablespace搬移表空間選項,y表示匯出表空間資訊;tablespaces用於指定要匯出的表空間;file用於指定存放匯出資訊的檔案。

匯出表空間資訊之後,使用作業系統命令將表空間資料檔案和匯出檔案(expdat.dmp)複製到目標資料庫所在機器相應的目錄中。

三、匯入表空間

在將表空間資料檔案和匯出檔案複製到目標資料庫所在機器之後,就可以將表空間資訊匯入到目標資料庫中了。匯入自包含表空間實際是將資料字典資訊從匯出檔案裝載到目標資料中,如表空間名稱、表空間所對應資料檔案以及資料物件名稱等。具體的作業系統命令如下:

d:/>imp transport_tablespace=y datafiles= 'd:/localdb/eplay1.dbf'

,'d:/localdb/eplay2.dbf』

使用者名稱:internal/oracle@test

as sysdba

當執行完上述命令之後,會將表空間eplay和eplay2及其所包含的所有資料物件資訊匯入到目標資料庫中。

注意:在oracle8.1.5中搬移表空間時,源表空間中存放的所有資料物件的所有者在目標資料庫中必須存在,如果不存在,則應在匯入表空間之前建立相應的使用者,然後再匯入表空間

[此貼子已經被作者於2008-2-26 13:30:23編輯過]

Oracle表和索引移動表空間

來自 http blog.csdn.net m changgong 作者 張燕廣 關鍵字 oracle 表空間 移動表空間 對錶進行表空間移動操作 如果有一張表 accounts 存放在表空間 example 下現在要把表 accounts 移動到表空間 demo 下,該怎麼操作?操作語句如下 al...

Oracle表和索引移動表空間

關鍵字 oracle 表空間 移動表空間 對錶進行表空間移動操作 如果有一張表accounts存放在表空間example下 現在要把表accounts移動到表空間demo下,該怎麼操作?操作語句如下 alter table accounts move tablespace demo commit a...

oracle表空間移動後的啟動

今天伺服器重啟後發現資料庫啟不來了,檢視發現空間不夠了,查了半天也沒發現有什麼多餘的檔案,最後只能拿oradata來動手了,其中自己建的sgcuss.dbf,size有500m,但實際應用根本用不了這麼大,所以決定拿它開刀。由於沒試過錶空間檔案移動後資料庫是否可以啟動,也不知道效果會如何,反正也有時...