使用Oracle可傳輸表空間的特性複製資料(1)基礎概念

junsansi發表於2008-01-08

一、關於可傳輸表空間(Transportable Tablespaces)

可傳輸表空間的特性主要用於進行庫對庫的表空間複製要進行傳的表空間必須置於read-only模式。如果生產庫不允許表空間置為只讀模式,沒關係,方法還是有的,通過RMAN備份也可以建立可傳輸表空間集。要使用可傳輸表空間的特性,oracle至少是8i企業版或更高版本。如果是相同作業系統平臺相互匯入,則8i及以上版本均可支援,但如果是不同作業系統平臺,資料庫版本至少10g。被傳輸的表空間即可以是字典管理,也可以是本地管理。並且自oracle9i開始,被傳輸表空間的block size可以與目標資料庫的block size不同。

可傳輸表空間(還有個集)最大的優勢是其速度比export/import或unload/load要快的多。因為可傳輸表空間主要是複製資料檔案到目標路徑,然後再使用export/import或Data Pump export/import等應用僅匯出/匯入表空間物件的後設資料到新資料庫。

提示:本節中將完全採用Data Pump(資料泵)做為匯入匯出的工具。(什麼是Data Pump,說來話短,Data Pump。。。。。其命令形式是impdp/expdp分別對應匯入/匯出功能,是自oracle10g開始提供的一種新的應用。功能和命令形式都與imp/exp極其類似,但其相互之間的匯出檔案並不相容)不過,Data Pump和常規的imp/exp同樣都能夠被transportable tablespaces特性支援。但是如果被傳輸的表空間包含XMLTypes,必須使用imp/exp。

通常有兩種方式傳輸表空間:

手工操作。按本節中的步驟操作,含SQL*Plus, RMAN, IMP/EXP或Data Pump等各種指令操作。

使用OEM中的傳送表空間嚮導。

要執行傳送表空間嚮導:

1、使用具有EXP_FULL_DATABASE角色的使用者登陸到OEM中

2、點選維護(Maintenance)連結

3、點選標題下方的"Transport Tablespaces"

二、關於跨平臺傳輸表空間

從oracle10g開始,你終於可以實現跨平臺傳輸表空間了。無數的dba歡呼著,雀躍著。。。。

儘管仍非全部,但已經有很多平臺可以支援跨平臺的傳送。可以通過查詢V$TRANSPORTABLE_PLATFORM檢視來確認哪些平臺可以支援,該檢視同時也可以獲取各平臺的ENDIAN_FORMAT(位元組順序byte ordering)

SQL> SELECT * FROM V$TRANSPORTABLE_PLATFORM ORDER BY PLATFORM_ID;

PLATFORM_ID PLATFORM_NAME                            ENDIAN_FORMAT

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

          1 Solaris[tm] OE (32-bit)                  Big

          2 Solaris[tm] OE (64-bit)                  Big

          3 HP-UX (64-bit)                           Big

          4 HP-UX IA (64-bit)                        Big

          5 HP Tru64 UNIX                            Little

          6 AIX-Based Systems (64-bit)               Big

          7 Microsoft Windows IA (32-bit)            Little

          8 Microsoft Windows IA (64-bit)            Little

          9 IBM zSeries Based Linux                  Big

         10 Linux IA (32-bit)                        Little

         11 Linux IA (64-bit)                        Little

         12 Microsoft Windows 64-bit for AMD         Little

         13 Linux 64-bit for AMD                     Little

         15 HP Open VMS                              Little

         16 Apple Mac OS                             Big

         17 Solaris Operating System (x86)           Little

         18 IBM Power Based Linux                    Big

已選擇17行。

提示:關於位元組順序(byte ordering)

一些作業系統(包括 Windows)在低位記憶體地址中用最低有效位元組儲存多位元組二進位制資料;因此這種系統被稱為低地址低位元組序。相反,其它的作業系統(包括 Solaris)將最高有效位元組儲存在低位記憶體地址中,因此這種系統被稱為低地址高位元組序。當一個低地址高位元組序的系統試圖從一個低地址低位元組序的系統中讀取資料時,需要一個轉換過程— 否則,位元組順序將導致不能正確解釋讀取的資料。不過,當在相同位元組順序的平臺之間傳輸表空間時,不需要任何轉換。

如果平臺間的endian不同,那麼在執行匯入操作之之前必須首先轉換源平臺的表空間到目標格式,如果平臺間endian format相同,則可以跳過轉換的步驟,即使是不同平臺。當然前提是各平臺的資料庫版本都不低於10g。

在表空間可被傳輸到不同平臺之前,資料檔案的檔案頭必須能夠識別其所屬的原平臺是什麼,對於oracle資料庫初始化引數中COMPATIBLE置為10.0.0或更高之後,你必須至少將表空間置為read-write一次,這點非常重要,你現在還不知道我在說什麼?沒關係,很快就會知道的。

1當你計劃進行傳輸表空間之前,你有必要了解下列的一些資訊:

源庫和目標庫字符集和國家字符集必須相同。

要傳輸的表空間不能與目標伺服器現有表空間名稱重複。

有關聯關係的物件(比如物化檢視)或包含物件(比如表分割槽)一般情況下不能被傳送,除非所有的關聯物件都在表空間集(tablespace set)中。

自oracle10gR2開始,可以傳輸含XMLTypes的表空間,不過必須使用imp/exp而不能選擇資料泵(impdp/expdp)。並確保imp/exp命令的CONSTRAINTS和TRIGGERS引數設定為Y。

下列指令碼可以列出資料庫中哪些表空間含XMLTypes:

select distinct p.tablespace_name

  from dba_tablespaces p, dba_xml_tables x, dba_users u, all_all_tables t

 where t.table_name = x.table_name

   and t.tablespace_name = p.tablespace_name

   and x.owner = u.username

2傳輸表空間的特性並非萬能的,還有些其它方面的限制:

高階佇列(Advanced Queues):可傳輸表空間的特性並不支援8.0相容的高階佇列

系統表空間(SYSTEM Tablespace Objects):不能傳輸SYSTEM表空間或者SYS使用者擁有的物件。

對映型別(Opaque Types):由應用指定並且對映到資料庫(如RAW,BFILE等)的型別可以被傳輸,但是它們並不會被做為跨平臺轉換的一部分。其實際型別是什麼只有指定它的應用清楚,所以必須保證這個應用解決讀取各種endian問題後再考慮將其傳輸到新平臺。

浮點資料(Floating-Point Numbers):BINARY_FLOAT和BINARY_DOUBLE型別可以使用資料泵匯入匯出但不支援EXP。

3相容性

從oracle10g開始,不論目標庫執行在相同或不同的平臺,表空間都可以傳輸到相同或更高版本的oracle庫。但是如果生成傳輸表空間oracle版本比目標庫oracle版本高的話,資料庫會提錯誤。

下表列出了源表空間和目標表空間之間在不同傳輸情況下oracle最低相容版本。

傳輸條件

源表空間資料庫

目標表空間資料庫

資料庫在相同平臺

8i

8i

源庫與目標庫的block size不同

9i

9i

資料庫在不同平臺

10g

10g

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

相關文章