Oracle傳輸表空間(TTS)

llnnmc發表於2017-06-28

資料泵匯出/匯入的變體是表空間傳輸功能。透過這一功能,可以將整個表空間和其內容從一個資料庫複製到另一個資料庫。基本步驟如下:

  • 使源表空間只讀
  • 使用 Data Pump 匯出描述表空間和內容的後設資料
  • 將資料檔案和 Data Pump 匯出檔案複製到目標系統
  • 使用 Data Pump 匯入後設資料
  • 使源和目標上的表空間可讀寫

 

在將表空間從一個平臺傳輸到另一個平臺時需要的額外一步是,轉換資料的位元組序格式。大位元組序以高位位元組優先方式儲存多位元組值,小位元組序則首先儲存最低位元組。要跨有著不同位元組序格式的平臺傳輸表空間要求轉換資料檔案,使用RMAN的CONVERT命令完成。

 

要確定當前資料庫系統的執行平臺和位元組序,可以將檢視v$database和v$transportable_platform結合查詢

col platform_name for a40

select db.platform_name, tp.endian_format from v$database db, v$transportable_platform tp where db.platform_name = tp.platform_name;

 

PLATFORM_NAME                            ENDIAN_FORMAT

---------------------------------------- --------------

Microsoft Windows x86 64-bit             Little

 

在傳輸表空間時,有一些限制:

  • 表空間應該是自包含的,表空間中的物件不依賴於任何其他物件。

常見的以下情況是違反自包含原則的:

1)索引在內部表空間集,而表在外部表空間集(相反地,如果表在內部表空間集,而索引在外部表空間集,則不違反自包含原則)。

2)分割槽表一部分在內部表空間集,一部分在外部表空間集(對於分割槽表,要麼全部包含在內部表空間集中,要麼全不包含)。

3)如果在傳輸表空間時同時傳輸約束,則對於引用完整性約束,如約束指向的表在外部表空間集,則違反自包含,如果不傳輸約束,則與約束指向無關。

4)表在內部表空間集,而lob列在外部表空間集,則違反自包含。

  • 目標資料庫必須使用和源資料庫一樣或相容的字符集。
  • 擁有表空間中的物件的模式必須建立在目標資料庫中,否則操作將失敗。
  • 目標資料庫中與可傳輸表空間集合中的物件有著相同的所有者和物件名的物件將不會丟失,在匯入時將被忽略。
  • 不能存在同名的表空間,可以重新命名錶空間。

 

以下例子顯示如何進行表空間的傳輸:

 

1、檢查表空間是否為自包含,違反自包含規則的資訊寫入到臨時表TRANSPORT_SET_VIOLATIONS中:

exec dbms_tts.transport_set_check('CMES');

PL/SQL 過程已成功完成。

 

執行成功即表明沒有違反規則的情況,可以檢視臨時表資訊

select * from TRANSPORT_SET_VIOLATIONS;

未選定行

 

2、修改源表空間為只讀:

alter tablespace cmes read only;

表空間已更改。

 

3、匯出描述表空間和內容的後設資料:

expdp system/mesHz2 transport_tablespaces=cmes dumpfile=my_dir:cmes.dmp

 

Export: Release 11.2.0.1.0 - Production on 星期五 8月 5 10:31:33 2016

 

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

 

連線到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

啟動 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01":  system/******** transport_tablespaces=cmes dumpfile=cmes.dmp directory=my_dir

處理物件型別 TRANSPORTABLE_EXPORT/PLUGTS_BLK

處理物件型別 TRANSPORTABLE_EXPORT/TABLE

處理物件型別 TRANSPORTABLE_EXPORT/GRANT/OWNER_GRANT/OBJECT_GRANT

處理物件型別 TRANSPORTABLE_EXPORT/INDEX

處理物件型別 TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINT

處理物件型別 TRANSPORTABLE_EXPORT/INDEX_STATISTICS

處理物件型別 TRANSPORTABLE_EXPORT/COMMENT

處理物件型別 TRANSPORTABLE_EXPORT/TABLE_STATISTICS

處理物件型別 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK

已成功載入/解除安裝了主表 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01"

******************************************************************************

SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 的轉儲檔案集為:

  D:\CMES.DMP

******************************************************************************

可傳輸表空間 CMES 所需的資料檔案:

  D:\ORADATA\MES\CMES01.DBF

作業 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" 已於 10:32:12 成功完成

 

4、在源表空間仍是隻讀的情況下,將其資料檔案複製到目標機器資料檔案所在的位置,將Data Pump轉儲檔案複製到目標機器指定的Oracle目錄。

 

5、如果目標資料庫位於一個位元組序格式與源資料庫不同的平臺上,則用RMAN連線目標資料庫,執行如下命令:

RMAN> convert datafile 'd:\oradata\mes\cmes01.dbf' from platform='Linux IA (32-bit)' format 'd:\oradata\mes\cmes01cnv.dbf';

該命令將讀取指定的資料檔案,並將其由指定的平臺格式轉換為目標資料庫所要求的新的檔案格式。

 

6、匯入目標系統表空間:

impdp system/mesHz2 dumpfile=my_dir:cmes.dmp transport_datafiles=d:\oradata\mes\cmes01.dbf

 

Import: Release 11.2.0.1.0 - Production on 星期五 8月 5 11:08:59 2016

 

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

 

連線到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

已成功載入/解除安裝了主表 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01"

啟動 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01":  system/********@mes dumpfile=cmes.dmp transport_datafiles=d:\oradata\mes\cmes01.dbf directory=my_dir

處理物件型別 TRANSPORTABLE_EXPORT/PLUGTS_BLK

處理物件型別 TRANSPORTABLE_EXPORT/TABLE

處理物件型別 TRANSPORTABLE_EXPORT/GRANT/OWNER_GRANT/OBJECT_GRANT

處理物件型別 TRANSPORTABLE_EXPORT/INDEX

處理物件型別 TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINT

處理物件型別 TRANSPORTABLE_EXPORT/INDEX_STATISTICS

處理物件型別 TRANSPORTABLE_EXPORT/COMMENT

處理物件型別 TRANSPORTABLE_EXPORT/TABLE_STATISTICS

處理物件型別 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK

作業 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" 已於 11:09:15 成功完成

 

7、恢復源資料庫和目標資料庫上表空間的可讀寫:

alter tablespace cmes read write;

表空間已更改。

 

注意,非傳輸表空間中的東西無法傳遞進來,如儲存過程、序列、觸發器、函式、型別、檢視等,他們並不在使用者的表空間中,而存在於資料字典中。

 

可傳輸表空間的通用性使得可以將整個資料庫從一臺計算機傳輸到另一臺計算機。對比RMAN雖然也可以建立一個資料庫,但新資料庫只可以位於與源資料庫相同的平臺上,利用RMAN的備份和還原不能跨平臺。而傳輸資料庫利用可傳輸表空間的功能,可以跨平臺。該技術就是透過適當的轉換將所有資料檔案複製到新機器上,用新的引數檔案啟動例項,並建立新的控制檔案和聯機日誌檔案。

 


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

相關文章