oracle遷移表空間

2021-05-22 15:52:13 字數 2687 閱讀 4019

可遷移表空間

使用可遷移表空間(transportable tablespaces)的特性在資料庫之間移動大量資料,效能比export/import和unload/load要快很多,因為它遷移表空間只需要複製資料檔案和插入表空間元資料到目標資料庫中。

遷移表空間對以下應用特別有用:

分階段將oltp的資料移入資料倉儲

更新資料倉儲和資料集

從資料倉儲中心載入資料集

有效地歸檔資料倉儲和oltp

向內部或外部客戶發布資料

執行時間點表空間恢復(tspitr) 限制

源資料庫與目標資料庫的硬體平台必須相同

源資料庫與目標資料庫的字符集和國家字符集必須相同

不能遷移與目標資料庫已有的同名表空間

遷移表空間不支援實體化檢視/複製,基於函式的索引,環境refs,8.0相容的有多個接收人的先進佇列

考慮相容性

要使用這個特性,源資料庫與目標資料庫的初始化引數中的compatible必須設定8.1或更高,如果被遷移的表空間的block size與標準的尺寸不同,目標資料庫的初始化引數中的compatible必須設定9.0或更高。不必要源資料庫與目標資料庫的版本一樣,oracle會保證相容性,如果不行,錯誤提示會在插入開始給出。

從老版本的資料庫資料遷移到更新版本的目標資料庫總是可能的。

遷移過程

ø        提取自包含的表空間集

資料庫物件間有邏輯或物理的依賴性,自包含表空間集的意思是這種表空間集中沒有物件依賴於外界的物件。違法自包含規則的例子如下:

1)        存在依賴於要遷移表空間集外的表空間的索引

2)        分割槽表只有部分被包含在要遷移表空間集中

3)        引用完整性約束穿越了要遷移表空間集的邊界

4)        要遷移表空間集中包含乙個lob欄位指向表空間集之外

可以使用dbms_tts包檢查表空間集的自包含性,要執行必須賦予execute_catalog_role 角色,可以設定tts_full_check引數為true作嚴格的檢查。

要檢查表空間sales_1和sales_2是自包含的,執行:

execute dbms_tts.transport_set_check('sales_1,sales_2', true);

執行檢查後就可以在檢視transport_set_violations,如果是自包含的那麼檢視應該為空。

select * from transport_set_violations;

ø        產生可遷移表空間集

產生可遷移表空間集使用下面步驟:

1)        修改可遷移表空間集為唯讀

alter tablespace sales_1 read only;

alter tablespace sales_2 read only;

2)        匯出表空間集元資料

exp transport_tablespace=y tablespaces=(sales_1,sales_2)

triggers=y constraints=n grants=n file=expdat.dmp

如果要執行tspitr和更嚴格的約束的檢查,執行:

exp transport_tablespace=y tablespaces=(sales_1,sales_2)

tts_full_check=y file=expdat.dmp

ø        遷移表空間集

將資料檔案和匯出的元資料移動到目標資料庫能訪問的地方,

ø        插入表空間集

插入表空間結構資訊:

imp transport_tablespace=y file=expdat.dmp

datafiles=('/db/sales_jan','/db/sales_feb',...)

tablespaces=(sales_1,sales_2) tts_owners=(dcranney,jfee)

fromuser=(dcranney,jfee) touser=(smith,williams)

這裡指定的選項有:

transport_tablespace=y 指示要遷移表空間

file包含了表空間元資料

表空間名指定為sales_1,sales_2

tts_owners指定在表空間集擁有資料的所有使用者

fromuser 和touser 指定改變資料庫物件的所有者,如果不指定它們所有資料物件被建立在與源資料相同的使用者下。

如果插入完成,那麼所有插入的表空間都是唯讀模式,可以改變:

alter tablespace sales_1 read write

alter tablespace sales_1 read write

如果資料檔案數量非常多,在一條語句裡指定太費勁,可以寫乙個import引數檔案,例如:

imp parfile='par.f'

檔案 par.f 包含下面內容:

transport_tablespace=y

file=expdat.dmp

datafiles=('/db/sales_jan','/db/sales_feb',...)

tablespaces=(sales_1,sales_2)

tts_owners=(dcranney,jfee)  

fromuser=(dcranney,jfee)

touser=(smith,williams)

Oracle表空間遷移

源伺服器環境 dell r710 red hat linux 5.4 x64 目標伺服器環境 辦公室台式計算機 windows2008 32位 資料庫都是oracle 11.2.0.1 下面是測試全過程 並不是所有的平台都可以相互遷移的。檢視平台列表命令如下 select from v transp...

Oracle表空間遷移

1 查詢當前資料庫的表空間情況 根據下面的 查詢出當前資料庫的表空間名稱,以及路徑等相關資訊,找到要遷移的表空間。select a.tablespace name,a.file id,a.file name,round a.bytes 1024 1024 0 total space from dba...

ORACLE 表和索引遷移表空間

表做空間遷移時,使用如下語句 例1 alter table tb name move tablespace tbs name 索引表空間做遷移,使用如下語句 例2 alter index index name rebuild tablespace tbs name 對於含有lob欄位的表,在建立時,...