使用Oracle可傳輸表空間的特性複製資料(2)操作步驟

junsansi發表於2008-01-09

下列步驟列出了傳輸一個表空間的大致過程。

1、檢查平臺

對於跨平臺的傳輸,查詢V$TRANSPORTABLE_PLATFORM檢視檢查兩平臺的endian format。如果相同平臺的傳輸可以跳過此步

2、選擇自包含表空間集(self-contained set of tablespaces)

提示:啥叫自包含呢,自包含表示用於傳輸的內部表空間集沒有任何物件引用指向外部表空間集。自包含分為兩種:一般自包含表空間集和完全(嚴格)自包含表空間集。

下面是一些典型的違反自包含的例子:

索引在待傳輸表空間集中而表卻不在。(注意,如果表在待傳輸表空間集中,而索引不在並不違反自包含原則,當然如果你堅持這樣傳輸的話,會造成目標庫中該表索引丟失)

分割槽表中只有部分分割槽在待傳輸表空間集(對於分割槽表,要麼全部包含在待傳輸表空間集中,要麼全不包含)。

待傳輸表空間中,對於引用完整性約束,如果約束指向的表不在待傳輸表空間集,則違反自包含約束;但如果不傳輸該約束,則與約束指向無關。

對於包含LOB列的表,如果表在待傳輸表空間集中,而Lob列不在,也是違反自包含原則的。

看看,條件和限制還是黑多,雖然我們的大腦裡的腦細胞也黑多,但是如果你要傳輸大量資料,還想依靠腦細胞一個個做判斷顯然是不明智的,幸運的是額們地神oracle想到了這一點,於是它給了我們一張小紙條,上面寫著幾百個大字:檢查是否自包含,請用DBMS_TTS.TRANSPORT_SET_CHECK,療效好。該產品採用純中藥製成,無毒無副作用,口服針劑均可,ooo錯了,是分嚴格方式和非嚴格方式驗證。那麼對於嚴格方式和非嚴格方式又有什麼區別呢,這個問題如果又要用語言描述恐怕不僅佔用大量位元組而且又會將你的腦袋攪的一團亂,所以我們留待實踐操作的時候通過例項來說明吧

3、生成可傳輸表空間,還有個集(transportable tablespace set)

首先將要匯出的表空間狀態置為READ-ONLY。

可傳輸表空間集包含表空間集對應的資料檔案以及含表空間結構資訊即後設資料的export檔案(可以通過EXPDP或EXP執行導)

再次提示,如果匯出的表空間中含XMLTypes,則必須使用EXP匯入。

如果你準備傳輸表空間集到不同endian平臺,必須首先轉換表空間集的endian與目標平臺相同。轉換操作即可以在源庫生成傳輸表空間集時進行,也可以在目標伺服器匯入傳輸表空間之前進行。注意,何時轉換並非完全隨意,它跟你的策略是有很大關係的,後面會有黑詳細的介紹,瞪大眼睛表錯過。

可傳輸表空間集建立完之後,可以將源庫的表空間狀態置為read-write。

4、傳輸表空間集

複製資料檔案以及export檔案到目標資料庫。

如果需要轉換,應該何時執行轉換操作呢?

前面提到,如果涉及了endian的轉換,可以在生成可傳輸表空間集時進行(源平臺進行),或者在匯入表空間集之前進行(目標平臺進行),轉換的命令都是一個,只是引數略有不同,關於命令的用法暫且不提,後面會有專門章節介紹和實踐。在這裡我們先來深入一個這個操作究竟放在哪裡合適。按說這個操作放在哪裡執行都可以,應該沒有什麼可爭辯的,但是值的注意的是針對我們操作的資料庫,特別是對於正在執行的生產資料庫,三思建議你採用在目標平臺上進行轉換的操作,緣由如下:

1). 縮短停機時間

在建立可傳輸表空間集之前,需要將要傳輸的表空間狀態置為read-only。你可以將資料檔案迅速複製一份映象,並生成包含後設資料的export檔案,然後即可將表空間狀態置為read-write狀態。這種安排使得表空間必須保持為只讀的時間儘可能的短。

2)提高執行效能

生產資料庫往往同時在處理多個應用,而此時如果再用其進行轉換操作可能增加系統負載,並且系統此時由於執行的任務較多,轉換效率也並非最高。將轉換操作移到目標平臺進行,通常對於目標平臺都是做為備份角色,其系統負載相對是比較低的,執行轉換操作的效率相對也會更高。

3)簡化複製操作

通過在目標平臺執行轉換命令時指定db_file_name_convert引數,直接將資料檔案轉換到目標目錄內,簡化複製時的操作。

5、匯入表空間集

使用IMPDPIMP匯入表空間集後設資料到目標庫,如果你採用的是Data Pump Import/Export,還可以將步驟更簡練,Data Pump支援一個名為NETWORK_LINK的引數,通過該引數指定的資料鏈,你甚至可以跳過Expdp生成源庫後設資料的操作,Impdp通過資料庫連結從源資料庫中獲得所需的後設資料,並在目標資料庫中重新建立它們

匯入完成之後,如果需要,將目標庫中匯入的表空間狀態置為read-write。

這樣我們整個跨平臺的傳輸就完成了,整體來看步驟非常簡單,就是"匯出->複製->匯入",簡稱傳輸三板斧。困難處並不是這把斧子重,而是不同情況下,你得能夠明智的選擇斧勢,是劈是砍還是砸呢,不同的選擇會有不同的結果,有時候你選擇了開頭,卻選擇不了這結果,一旦結果不是你想要的,沒關係,oracle會再給你新的選擇,下面我們就來看看這結果吧

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

相關文章