實戰RMAN備份傳輸表空間

it_newbalance發表於2012-10-11
實戰RMAN備份傳輸表空間

前面各章從理論到實踐詳細論述了關於可傳輸表空間,還有個集(Transportable Tablespace Sets)的建立,其中都提到了很重要一點,就是被傳輸的表空間在傳輸過程中必須置為read-only。而在實際操作過程中,對於某些生產資料庫,將表空間置為read-only是件非常複雜的事情甚至完全不允許,有了RMAN的Transportable Tablespace,這一切都得以避免。RMAN通過備份建立可傳輸表空間集,它並不需要存取活動的資料檔案,相應也就不需要將表空間置為read-only。因此,資料庫可用性得到提升,尤其對於超大的表空間,因為被傳輸的表空間在此期間仍可進行讀寫操作,而且把表空間置為read-only模式可能會花費較長時間

使用RMAN建立可傳輸表空間集,允許你在傳輸過程中指定目標恢復時間點或SCN,這樣傳輸的資料可以更靈活,不必完全複製現有表空間,只要備份中存在,你就可以選擇性的恢復資料。例如,你的備份策略為保留一週,你希望建立的可傳輸表空間中資料是截止本月底最後一天的資料,那麼你在下個月第一週內任何時候都可以進行傳輸操作而不需要考慮這期間生產庫是否會有寫入操作。

使用rman備份建立Transportable Tablespace Sets主要是通過RMAN中的TRANSPORT TABLESPACE命令完成的。
提示:即使並未使用rman備份資料庫,TRANSPORT TABLESPACE命令也可以用來建立transportable tablespace sets。不過,你必須有要傳輸的表空間集資料檔案拷貝,然後使用rman的catalog命令將資料檔案、歸檔日誌等檔案的拷貝載入rman資料庫。只有rman擁有了所需備份才能夠正常執行TRANSPORT TABLESPACE。
一、適用場合
基本上,任何需要傳輸表空間的情況,你都可以使用rman的TRANSPORT TABLESPACE命令去建立,只要擁有所需的備份。


二、相關概念
RMAN建立可傳輸表空間集與RMAN Tablespace Point-in-Time Recovery (TSPITR)極其相似,如果你有過TSPITR的操作經驗,那麼操作這個同樣不在話下。

單槍不能成事,Oracle的霸業就是靠無數相互關聯的物件以不同方式巧妙組合而成。對於建立TTS而言,RMAN仍然不是一個人在戰鬥,他不是一個人:
  RMAN客戶端(Recovery Manager client)
  源庫(source database),即要傳輸的表空間所在庫。
  源庫歸檔及備份(Archived redo logs and backups)
  輔助例項(auxiliary instance),這個大家應該都比較熟了,如果你還不瞭解可以參見"Duplicate建立副本資料庫"系列第2章。
  輔助集(auxiliary set),包括資料檔案等其它傳送所需但又並不是恢復集一部分的檔案。例如SYSTEM表空間,Undo表空間之類。而輔助例項通常也不是一個人,它也有一些關聯檔案,例如控制檔案、初始化引數檔案、線上日誌等,這些檔案並不屬於輔助集,雖然是起輔助目的,但它們的老主顧顯然是輔助例項。

    輔助檔案暫存地(auxiliary destination)即輔助集所包含的物件在rman transport tablespace命令執行過程中物理存放的位置,執行完之後這些檔案會被刪除。
提示:auxiliary destination並非必須指定,如果不指定的話,必須確保協助例項相關的各檔案在初始化引數中均已指定具體儲存位置。
    表空間目的地(tablespace destination),tablespace transport命令執行期間生成的傳輸集資料檔案及其它輸出檔案的儲存路徑。
    可傳輸集(transportable set),由待傳輸表空間資料檔案以及expdp生成的匯出檔案(export dump file)組成的,用於填充到目標資料庫表空間的集合,預設情況下,這些集合中的檔案儲存在表空間目的地指定路徑下。
    RMAN自動生成的匯入指令碼(import script)以及expdp生成的匯出日誌(export log),可傳輸集的一部分。
三、命令格式:關於Transport Tablespaces命令
過rman備份建立可傳輸表空間集避免通過源庫當前活動的資料檔案。同樣恢復時可以恢復到備份中包含的任意時間而不會被限定僅能恢復到當前時間。其建立的工作就是由一個名為Transport Tablespaces的RMAN命令來實現,其格式如下:
Transport Tablespace命令的引數不少,不過幸運的是並不複雜,並且其引數與前面介紹的關聯實體名稱相同,由此僅通常引數名我們也大致能猜出所代表的意義,下面通常幾個應用的示例加深一下印象:

1、最簡單的可傳輸表空間集的建立:

transport tablespace tbs_1, tbs_2

   tablespace destination '/disk1/transportdest'

   auxiliary destination '/disk1/auxdest';



本例中,待傳輸表空間為tbs_1和tbs_2兩個(如果待傳輸的表空間有多個,中間以逗號分隔),生成的可傳輸檔案將會被儲存至tablespace destination引數指定的位置,其它輔助檔案生成到auxiliary destination引數指定的位置。



2、建立時指定恢復時間點

TRANSPORT TABLESPACE tbs_3

   TABLESPACE DESTINATION '/disk1/transportdest'

   AUXILIARY DESTINATION '/disk1/auxdest'

   UNTIL SCN 11379;

本例中,通過指定SCN的方式控制恢復的內容。

又如下例中通過指定時間控制恢復的內容:

TRANSPORT TABLESPACE tbs_2

   TABLESPACE DESTINATION '/disk1/transportdest'

   AUXILIARY DESTINATION '/disk1/auxdest'

   UNTIL RESTORE POINT 'before_upgrade';



指定恢復點方式控制恢復的內容:

TRANSPORT TABLESPACE tbs_2

   TABLESPACE DESTINATION '/disk1/transportdest'

   AUXILIARY DESTINATION '/disk1/auxdest'

   UNTIL TIME 'SYSDATE-1';



提示:需要注意指定的恢復時間點必須存在於備份的redo log或歸檔檔案中。



3、建立時指定檔案的生成路徑:

TRANSPORT TABLESPACE tbs_2

   TABLESPACE DESTINATION '/disk1/transportdest'

   AUXILIARY DESTINATION '/disk1/auxdest'

   DATAPUMP DIRECTORY ttsdir

   DUMP FILE 'dmpfile.dmp'

   IMPORT SCRIPT. 'impscript.sql'

   EXPORT LOG 'explog.log';

只要你想,就可以。預設情況下:

DATAPUMP DIRECTORY引數指定已定義的DIRECTORY:ttsdir

DUMP FILE引數指定後設資料檔案,命名為:dmpfile.dmp

IMPORT SCRIPT引數指定匯入指令碼,命名為:impscript.sql

EXPORT LOG引數指定匯出日誌檔案,命名為:explog.log

dmpfile.dmp及explog.log檔案會自動儲存到ttsdir指向的物理路徑,其它檔案均被生成到/disk1/transportdest目錄內。



實戰RMAN備份傳輸表空間

一、檢查平臺是否支援

查詢源資料庫平臺資訊
SQL> col platform_name for a40
SQL> SELECT d.PLATFORM_NAME, ENDIAN_FORMAT
    FROM V$TRANSPORTABLE_PLATFORM. tp, V$DATABASE d
    WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;
查詢Oracle10g支援的平臺轉換
SQL> select * from v$transportable_platform;

二、檢查待傳輸表空間是否自包含
execute dbms_tts.transport_set_check('TEST', true);
若報過程dbms_tts.transport_set_check不存在,則用sys的資料庫使用者執行指令碼"$ORACLE_HOME/rdbms/admin/dbmsplts.sql"建立之。
SELECT * FROM TRANSPORT_SET_VIOLATIONS;
若查詢結果為空,說明表空間是自包含的;否者查詢結果說明哪些地方違反了自包含。
三、檢查備份
先做好備份

***歸檔Alter system archive log current;
四、生成可傳輸集
RMAN>transport tablespace nnd
     TABLESPACE DESTINATION = 'k:\exp'
     auxiliary destination = 'k:\aux1';

刪除自動例項
自動例項已刪除
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: tranport tablespace 命令 (在 11/19/2007 15:23:45 上) 失敗
ORA-27056: 無法刪除檔案
OSD-04024: 無法刪除檔案。
O/S-Error: (OS 32) 另一個程式正在使用此檔案,程式無法訪問

O/S-Error: (OS 32)通常跟windows平臺有關,嘗試換用linux平臺執行...........一切正常!

報錯是在刪除輔助例項檔案時,此時傳輸集已經生成了,不會影響我們後續操作。那我們就手工刪除這些檔案好了,基本上就是auxiliary destination引數指定路徑下的檔案,乾脆直接連這個目錄也刪掉。


五、複製檔案到目標平臺
六、執行匯入指令碼
注意,匯入表空間在源平臺所屬的使用者必須存在,另外一旦複製到目標庫後檔案路徑如果發生變化,一定要修改impscript.sql檔案中相應的路徑。
[oracle@jsslinux ~]$ sqlplus "/ as sysdba"
SQL> @/opt/oratmp/oradata/impscript.sql

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

相關文章