12c – 使用跨平臺增量備份來減少傳輸表空間的停機時間 (Doc ID 2102859.1)

lhrbest發表於2021-04-12

12c – 使用跨平臺增量備份來減少傳輸表空間的停機時間 (Doc ID 2102859.1)



文件內容


文件內容


用途

適用範圍

詳細資訊

概述

跨平臺增量備份支援指令碼

前提條件

問題分析

已知問題

使用跨平臺增量備份及傳輸表空間技術來減少停機時間

文件約定

階段1 – 初始設定

步驟1.1 – 安裝目標資料庫軟體並且建立目標資料庫

步驟1.2 – 確定要進行傳輸的表空間

步驟1.3 – 在源庫上安裝 xttconvert 指令碼

步驟1.4 – 建立必要的目錄

步驟1.5 – 在源庫中配置 xtt.properties

步驟1.6 – 複製 xttconvert 指令碼和 xtt.properties 檔案到目標系統

步驟1.7 – 這是 TMPDIR 環境變數

階段2 – 準備階段

步驟2.1 – 在源庫中做備份

步驟2.2 – 把下面的檔案傳送到目標系統

步驟2.3 – 在目標庫上還原資料檔案

階段3 – 前滾階段

步驟3.1 – 在源庫需要傳輸的表空間上做增量備份

步驟3.2 – 傳輸增量備份到目標系統

步驟3.3 – 應用增量備份到目標系統的資料檔案複製中

步驟3.4 - 為下次增量備份確定 from_scn

步驟 3.5 – 或者重複執行前滾階段3 (3.1 – 3.4)或者直接執行階段4 – 最後一次增量備份

階段4 – 最後一次增量備份

步驟4.1 – 在源庫中把源表空間置為 READ ONLY 模式

步驟4.2 – 建立最後一次增量備份併傳送相關檔案到目標系統

步驟4.3 – 應用最後的增量備份到目標系統

階段5 – 傳輸階段:匯入物件後設資料至目標資料庫

步驟5A – 匯入已存在的 dump 檔案

步驟5A.1 – 建立資料泵目錄及賦予許可權

步驟5A.2 修改並執行 impdp 命令:

步驟5B – 使用 dblink 匯入

步驟5B.1 – 為網路匯入生成新的 xttplugin.txt

步驟5B.2 – 在目標系統上建立一個 dblink

步驟5B.3 – 修改並執行 impdp 命令

階段6 -校驗資料

步驟6.1 – 檢查表空間是否發生 corruption

步驟6.2 – 在目標系統上把相關的表空間設為 READ WRITE 模式

階段7 -收尾

附錄

Perl 指令碼 xttdriver.pl 命令選項的描述

配置檔案 xtt.properties 中的引數描述

更改歷史

參考

 



適用於:

Oracle Database Cloud Exadata Service - 版本 N/A 和更高版本
Oracle Database Exadata Express Cloud Service - 版本 N/A 和更高版本
Oracle Database Backup Service - 版本 N/A 和更高版本
Oracle Database Cloud Service - 版本 N/A 和更高版本
Oracle Database - Enterprise Edition - 版本 12.1.0.2 和更高版本
Linux x86-64

用途

注意: 考慮使用新release的版本V4的過程。 這個版本極大地簡化了相關步驟。 請參考文件:V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup  Note 2471245.1
XTT的舊版本上不會有bug修復或診斷,除非絕對必要,請僅僅使用V4版本。

 

本文件覆蓋了在 12c 及更高版本上,使用跨平臺傳輸表空間(XTTS)以及 RMAN 增量備份,以最小的應用停機時間,在不同 endian 格式的系統間遷移資料的步驟。

第一步是從源系統複製一份 full backup 到目標系統。之後,使用一系列的增量備份(每一份都比前一份要小),這樣在停機前可以做到目標系統的資料和源系統“幾乎”一致。需要停機的步驟只有最終的增量備份及後設資料匯出/匯入。

這個文件描述了在 12c 下使用跨平臺增量備份的步驟,關於 11g 下的步驟,請您參考  Note:1389592.1

跨平臺增量備份特性並不能減少 XTTS 的其它步驟花費的時間,比如後設資料匯出/匯入。因此,如果資料庫內有很多後設資料(DDL),比如 Oracle E-Business Suite 和其它打包程式,那麼跨平臺增量備份特性並不能帶來很多好處;對於這樣的環境,遷移花的大部分時間是花在處理後設資料上,而不是資料檔案的轉換及傳輸。

 

只有被遷移表空間裡物理儲存的資料庫物件才會被複製至目標系統;如果要遷移儲存在其它表空間的其它型別的物件(比如儲存在 SYSTEM 表空間內的 pl/sql 物件,sequences 等),你可以使用資料泵來複製這些物件至目標系統。

 

注意: 考慮使用新release的版本V4的過程。 這個版本極大地簡化了相關步驟。 請參考文件:V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup  Note 2471245.1

跨平臺增量備份的主要步驟有:

1.  初始化設定

2.  準備階段 (源庫資料仍然線上)

1.  備份要傳輸的表空間(0級備份)

2.  把備份及其它必須的檔案傳送到目標系統

3.  在目標系統恢復資料檔案至目標端的 endian 格式

3.  前滾階段 (源庫資料仍然線上 – 要重複這個階段足夠多次,使得目標資料檔案複製和源庫越相近越好)

1.  在源庫建立增量備份

2.  把增量備份及其它必須的檔案傳送到目標系統

3.  把增量備份轉換成目標系統的 endian 格式並且把增量備份應用至目標資料檔案

4.  為下次增量備份確定 next_scn

5.  重複這些步驟直到已經準備好了操作傳輸表空間

NOTE:  在版本3,如果一個資料檔案被加入到一個表空間或者一個新的表空間名字被加入到xtt.properties檔案,會出現一個Warning並且需要額外的處置  

1.  傳輸階段 (此時源庫資料需要置於 READ ONLY 模式)

1.  在源庫端把表空間置為 READ ONLY

2.  最後一次執行前滾階段的步驟

1.  這個步驟會讓目標系統的資料檔案複製和源庫資料檔案完全一致並且產生必要匯出檔案。

2.  在資料量非常大的情況下,這個步驟所花費的時間要顯著的少於傳統的 XTTS 方式,因為增量備份會很小。

3.  使用資料泵把這個表空間的後設資料匯入至目標資料庫

4.  把目標資料庫的相關表空間置為 READ WRITE

 

適用範圍

源庫可以是下面列出的滿足前提條件的任何平臺。

如果要遷移小 endian 平臺到 Oracle Linux,那麼可以考慮的最好辦法是 Data Guard。關於使用異構平臺 Data Guard 遷移小 endian 平臺到 Oracle Linux 的更詳細資訊可以參考  Note 413484.1

詳細資訊

概述

這個文件提供了一個測試案例,列出了使用 Oracle 跨平臺增量備份技術把 Oracle Solaris SPARC 系統的兩個表空間 TS1 和 TS2 傳輸至 Oracle Linux 並減少停機時間的詳細步驟。

在完成初始化步驟後,要執行下面的步驟來移動資料:

準備:
在準備階段,要在源庫上對錶空間的資料檔案做一個0級備份。備份需要傳送至目標系統,資料檔案被還原並轉換成目標系統的 endian 格式。  

前滾:
在前滾階段,會對上個步驟還原的資料檔案使用從源庫上做的增量備份來做前滾。對這個步驟做多次,每個增量備份會變得越來越小並且應用這些增量備份所花的時間也會越來越小,並可以讓目標系統“幾乎”和源庫一致。而在這個過程中,應用程式不會受到任何影響。

傳輸:
在傳輸階段,源庫中要遷移的表空間需要置為 READ ONLY 模式,並且需要在源庫最後做一次增量備份。這個備份會被傳送至目標系統並且應用到目標系統的資料檔案上。此時,目標的資料檔案複製和源庫已經是一致的了;而要遷移的應用程式不能做任何更改操作。表空間會使用傳輸表空間技術匯入到目標資料庫。最終,目標系統上的表空間會被置於 READ WRITE 模式並且提供完全的訪問。

跨平臺增量備份支援指令碼

跨平臺增量備份的核心功能是在 Oracle 資料庫 11.2.0.4 及之後版本上提供的,而對於 11g 版本,需要按照  Note 1389592.1  裡提供的步驟來操作。本文提到的步驟適用於 Oracle 12c,12.1 或者更高版本,可以參照 Requirements and Recommendations 部分。另外,附件 rman_xttconvert_ver2.zip 中包含了一些在實施跨平臺增量備份及 XTTS 時用到的支援指令碼。

主要的支援指令碼包括下面的幾個:

·  Perl 指令碼 xttdriver.pl 是用來執行 XTTS 和跨平臺增量備份的主要步驟的。

·  引數檔案 xtt.properties 儲存了一些站點相關的配置。

前提條件

在開始操作前,必須要先滿足下面的前提條件:

·  必須要考慮傳輸表空間的限制及注意事項,它們定義在下面的線上文件中:

Oracle Database Administrator's Guid

Oracle Database Utilities

·  除了傳輸表空間的限制及注意事項,還要注意下面的條件:

當前版本不支援Windows作為源庫或目標庫。

源庫的 COMPATIBLE 引數必須設定為 12.1.0 或更高。

源庫的 COMPATIBLE 引數值不能大於目標庫的 COMPATIBLE 引數值。

源庫必須處於 ARCHIVELOG 模式。

源庫的 RMAN 配置裡 DEVICE TYPE DISK 不能設定為 COMPRESSED。

源庫的備份型別必須是BACKUP TYPE TO BACKUPSET, 而不能是 BACKUP TYPE TO COPY.

目標庫的 COMPATIBLE 引數必須設定為 12.1.0 或更高。

要遷移的表空間的資料檔案必須都是 online 或者不包含 offline 的資料檔案。表空間必須是 READ WRITE 模式。READ ONLY 的表空間可以用普通的 XTTS 方式遷移,沒有必要使用跨平臺增量備份的技術來遷移 READ ONLY 的表空間。

雖然首選目標系統是Linux(64位Oracle Linux或RedHat Linux的認證版本),此過程可與其他基於Unix的作業系統一起使用。 但是,任何非Linux作業系統必須在目標庫和源庫中都執行12.1.0.1或以上版本。

源庫的oracle版本必須低於或等於目標庫。因此, 這個過程可以被用來作為一個升級的方法。對於transportable tablespace的限制也同樣適用.

·  這些步驟都需要使用 OSDBA 組中的 oracle 使用者來執行。需要使用 OS 驗證的方式來連線源庫和目標庫。

·  這個方法不支援在備庫和snapshot備庫

·  這個方法不支援multitenant databases。 但是新的V4的版本支援, 請參考文件:  Note 2471245.1

整個database的遷移

如果跨平臺的增量備份可以用來減少資料庫遷移的downtime, 那麼這個文章的步驟可以和文件: .中的XTTS部分結合使用。

 

問題分析

Debug 模式可以列印更多的螢幕輸出,並且開啟 RMAN 的 debug 模式。要啟用 debug 模式,或者以 -d 引數執行 xttdriver.pl 或者在執行 xttdriver.pl 前設定環境變數 XTTDEBUG=1。這個引數接受3種級別,-d[1/2/3]級別3會顯示最多的資訊。

已知問題

1.  如果前滾階段(xttdriver.pl -r)失敗了並顯示下面的錯誤,需要檢查 RMAN DEVICE TYPE DISK 是否被配置成了 COMPRESSED:

Entering RollForward
After applySetDataFile
Done: applyDataFileTo
Done: RestoreSetPiecehttps://mosemp.us.oracle.com/epmos/faces/secure/awiz/AwizHome.jspx?_afrLoop=345416299618939&docid=2102859.1&_afrWindowMode=0&_adf.ctrl-state=14b3jfishi_464
DECLARE
*
ERROR at line 1:
ORA-19624: operation failed, retry possible
ORA-19870: error while restoring backup piece
/dbfs_direct/FS1/xtts/incrementals/xtts_incr_backup
ORA-19608: /dbfs_direct/FS1/xtts/incrementals/xtts_incr_backup is not a backup
piece
ORA-19837: invalid blocksize 0 in backup piece header
ORA-06512: at "SYS.X$DBMS_BACKUP_RESTORE", line 2338
ORA-06512: at line 40

    2. 如果在源和目標中使用ASM,請參閱XTTS在源和目標使用ASM時目標上建立的別名(<註釋2351123.1>)

    3. 無論是源還是目標,GLOGIN.sql的存在都可能導致語法錯誤。

>另請參閱針對其他已知問題的跨平臺可傳輸表空間XTTS <文件2311677.1>的已知問題。

注意:我們建議此過程在主資料庫上執行,以讀寫模式開啟。但是,如果是強制性的,則可以對具有版本3 的備用資料庫執行該過程:

1. xtt.properties 檔案中,取消註釋:

allowstandby = 1

2. 所有步驟保持不變,除了在第四階段 - Transport 階段。 datapump 必須在主資料庫執行,因為它不能針對只讀資料庫(備用資料庫)。

3. 以下是第 4 階段 - Transport 階段所需的更改:

a. 步驟 4.1 ,使源表空間在 PRIMARY 資料庫中只讀

SQL> alter tablespace test1 read only;
SQL> alter system archive log current;

注意:確保待機已收到redo 。如果資料檔案不同,則表空間外掛將返回如下錯誤:
ORA-39123: Data Pump transportable tablespace job aborted
ORA-19722: datafile /u01/oradata/convert/TEST1_5.xtf is an incorrect version

b. 步驟 4.2 ,建立最終增量備份,傳輸,轉換並應用到目標資料檔案

< 與此 note 相同的步驟 >

c 。步驟 4.3 ,在目標資料庫中建立一個連線到 PRIMARY 的資料庫連結

SQL> 建立公共資料庫連結 primarylink 連線到由管理器標識的系統使用 '< 連線字串 >';

測試連結:

SQL>select db_name, database_role from v$database@primarylink;

該角色應該返回PRIMARY

d 。步驟 4.4 ,將物件後設資料匯入目標資料庫:

d1 。執行:
[oracle@dest]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -e

d2 。修改在 xttplugin.txt 中建立的命令以包含連結到主要。即,在我的測試中,我使用的命令
是:

impdp directory = DATA_PUMP_DIR logfile = tts_imp.log \
network_link = primarylink transport_full_check = no \
transport_tablespaces = TEST1 \
transport_datafiles = '/ U01 / ORADATA / 轉換 / TEST1_5.xtf'

注意:在我的測試中,在“'READ ONLY WITH APPLY” 模式下。在備用備份之間的每個增量備份之間,資料在主要資料中更改。待機狀態已被檢查,以確保已從主庫接收到 redo

[ 這部分客戶不可見。 ]

 


使用跨平臺增量備份及傳輸表空間技術來減少停機時間

XTTS 和跨平臺傳輸表空間被分成下面的階段:

·  階段 1 - 初始設定階段

·  階段 2 - 準備階段

·  階段 3 - 前滾階段

·  階段 4 - 最後的增量備份階段

·  階段 5 - 傳輸階段: 匯入後設資料

·  階段 6 - 校驗資料

·  階段 7 - 收尾

文件約定

·  所有的命令都是使用的bash的語法

·  如果命令前面的提示符是  [oracle@source]$  代表是在源系統上以 oracle 使用者執行的。

·  如果命令前面的提示符是  [oracle@dest]$  代表是在目標系統上以 oracle 使用者執行的。

階段1 – 初始設定

為了跨平臺增量備份,需要執行下面的步驟來配置環境:

步驟1.1 – 安裝目標資料庫軟體並且建立目標資料庫

在目標系統上安裝 Oracle 資料庫軟體,它一定需要是 Oracle 12c 版本的。

在目標系統上確定(或者建立)一個資料庫用來匯入表空間,並且建立傳輸表空間需要的使用者。

根據普通的 TTS 的要求,需要確保傳輸表空間使用的使用者已經在目標庫上存在。

步驟1.2 – 確定要進行傳輸的表空間

在源庫上確定要進行遷移的表空間。在這個例子裡我們會使用表空間 TS1 和 TS2。就像之前提到的那樣,傳輸表空間的前提條件和注意事項都需要仔細驗證。

步驟1.3 – 在源庫上安裝 xttconvert 指令碼

在源庫上,使用 oracle 軟體的使用者,下載並解壓縮這個文件的附件:支援指令碼 rman-xttconvert_2.0.zip:

[oracle@source]$ pwd
/home/oracle/xtt

[oracle@source]$ unzip rman_xttconvert_v3.zip
Archive: rman_xttconvert_v3.zip
inflating: xtt.properties
inflating: xttcnvrtbkupdest.sql
inflating: xttdbopen.sql
inflating: xttdriver.pl
inflating: xttprep.tmpl
extracting: xttstartupnomount.sql

步驟1.4 – 建立必要的目錄

1.  在源庫:

存放備份的目錄,在 xtt.properties 檔案中由 backupformat 引數定義。

2.  在目標庫:

目標系統中暫存區,在 xtt.properties 檔案中由 stageondest 引數定義。

目標系統中資料檔案的位置,在 xtt.properties 檔案中由 storageondest 引數定義。 

步驟1.5 – 在源庫中配置 xtt.properties

按照本系統配置編輯源庫  xtt.properties  檔案。關於這個檔案中引數的更多資訊,請參照本文件附錄中的“配置檔案 xtt.properties中 的引數描述”部分。只要下面的引數是本文件必需的,其它的都是可選項/或者和備份的相容有關的部分,可以忽略:

· 

·  tablespaces

·  platformid

·  backupformat

·  stageondest

·  storageondest

步驟1.6 – 複製 xttconvert 指令碼和 xtt.properties 檔案到目標系統

使用 oracle 軟體的使用者複製所有的 xttconvert 指令碼和修改後的 xtt.properties 檔案到目標系統:

[oracle@source]$ scp -r /home/oracle/xtt oracle@dest:/home/oracle/xtt

步驟1.7 – 這是 TMPDIR 環境變數

在源庫和目標庫的 shell 環境裡設定環境變數 TMPDIR,指向支援指令碼所在的目錄。使用相同的 shell 來執行 Perl 指令碼 xttdriver.pl。如果 TMPDIR 沒有設定,那麼輸出檔案會被放在 /tmp 中;並且輸入檔案也應該放在 /tmp 下。

[oracle@source]$ export TMPDIR=/home/oracle/xtt

[oracle@dest]$ export TMPDIR=/home/oracle/xtt

 

階段2 – 準備階段

在準備階段,源庫中要對要遷移的表空間的所有資料檔案做備份;備份需要傳送到目標系統,並且使用 xttdriver.pl 指令碼還原。

NOTE:  For large number of files, using dbms_file_transfer (see phase 2 in  Note 1389592.1  has been found to be the fastest method for transferring datafiles to destination.  This method outlined in the following article also applies to 12c databases:
11G - Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 1389592.1). 

 

步驟2.1 – 在源庫中做備份

在源系統中,使用 oracle 使用者及環境變數(ORACLE_HOME 和 ORACLE_SID 環境變數)指向源庫,做備份如下:

[oracle@source]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl --backup

步驟2.2 – 把下面的檔案傳送到目標系統

·  建立在源系統  backupformat  目錄中的備份需要傳送至目標系統  stageondest  目錄 

在下面的例子裡,使用 scp 命令來傳送從源系統中做的0級備份到目標系統中:

[oracle@source]$ scp /backupformat/* oracle@dest:/stageondest

· 

 從源系統 $TMPDIR 到目標系統的 $TMPDIR,如下:

· 

· 

·  tsbkupmap.txt

·  xttnewdatafiles.txt

步驟2.3 – 在目標庫上還原資料檔案

在目標系統中,使用 oracle 使用者及環境變數(ORACLE_HOME 和 ORACLE_SID 環境變數)指向目標庫,還原資料檔案如下:

[oracle@dest]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl --restore

 

資料檔案會被放在目標系統中由 storageondest 定義的目錄中

階段3 – 前滾階段

在這個階段,增量備份會在源庫建立,傳送到目標系統,轉換成目標系統的 endian 格式,應用到目標資料檔案複製上並進行前滾。這個階段可能需要執行很多次。每次增量備份都會比上次的增量備份花費更少的時間,並且把目標系統的資料檔案複製和源庫更貼近。在這個階段,源庫上的資料仍然可以被正常訪問。

步驟3.1 – 在源庫需要傳輸的表空間上做增量備份

在源系統上,使用 oracle 使用者及環境變數(ORACLE_HOME 和 ORACLE_SID 環境變數)指向源庫,做增量備份如下:

[oracle@source]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl --bkpinc

 

這個步驟可以對 xtt.properties 中列出的所有表空間生成增量備份。它同時生成的下面的檔案也必須和備份檔案一起傳送到目標系統中: 

·  xttplan.txt

·  tsbkupmap.txt

·  incrbackups.txt

步驟3.2 – 傳輸增量備份到目標系統

把上個步驟產生的增量備份檔案及其它需要的檔案傳輸到目標系統的 stageondest 處。下面列出了源庫中 incrbackups.txt 檔案中發現的需要複製的檔案列表:

[oracle@source]$ scp `cat incrbackups.txt` oracle@dest:/stageondest

[oracle@source]$ scp xttplan.txt oracle@dest:/home/oracle/xtt
[oracle@source]$ scp tsbkupmap.txt oracle@dest:/home/oracle/xtt
[oracle@source]$ scp incrbackups.txt oracle@dest:/

 home/oracle/xtt >p>

 

如果源系統的 backupformat 和目標系統的 stageondest 指向了同一個 NFS 儲存空間,那麼備份檔案時不需要再複製了,因為它們已經是放在了目標系統的期望目錄中。

但是其它的檔案(xttplan.txt, tsbkupmap.txt, incrbackups.txt)在每次增量備份中仍然需要複製,因為這些檔案的內容會在每次執行步驟3.4後發生改變。

步驟3.3 – 應用增量備份到目標系統的資料檔案複製中

在目標系統中,使用 oracle 使用者及環境變數(ORACLE_HOME 和 ORACLE_SID環境變數)指向目標庫,前滾資料檔案如下:

[oracle@dest]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl --recover

前滾步驟會連線至目標系統並且把增量備份應用到要進行傳輸的表空間的資料檔案中。

 

注意:每次這個步驟在執行中,都需要複製 xttplan.txt 和 tsbkupmap.txt,因為它們的內容在每次執行時都會發生改變。

步驟3.4 - 為下次增量備份確定 from_scn

為了下次增量備份,在源系統中,使用oracle使用者及環境變數(ORACLE_HOME 和 ORACLE_SID環境變數)指向源庫,執行下面的操作來確定新的 FROM_SCN:

[oracle@source]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -s


這可以為下次 FROM_SCN 步驟計算出下個 from_scn,並記錄在 xttplan.txt 檔案中,然後再下次再做增量備份時就可以使用這個 SCN 了。

步驟 3.5 – 或者重複執行前滾階段 3 (3.1 – 3.4) 或者直接執行階段 4 – 最後一次增量備份

到現在為止,我們有兩種選擇

1.  如果需要把目標資料庫的資料和生產庫同步更近一些,那麼重複前滾階段,從步驟3.1開始。

2.  如果覺得目標系統已經和源庫足夠接近了,那麼執行傳輸階段。

階段4 – 最後一次增量備份

在這個階段,源資料會被置為只讀,而目標系統會和源庫資料透過最後一次增量備份完全同步。之後就可以透過普通的傳輸表空間技術來從源庫上匯出物件後設資料並匯入到目標資料庫。資料會一直處於 READ ONLY 模式,直到這個階段結束。

步驟4.1 – 在源庫中把源表空間置為 READ ONLY 模式

源系統 上,使用 oracle 使用者及環境變數(ORACLE_HOME 和 ORACLE_SID環境變數)指向源庫,把要傳輸的表空間設為 READ ONLY。

system@source/prod SQL> alter tablespace TS1 read only;

Tablespace altered.

system@source/prod SQL> alter tablespace TS2 read only;

Tablespace altered.

步驟4.2 – 建立最後一次增量備份併傳送相關檔案到目標系統

最後的增量備份是使用引數"--bkpexport"建立的,之後傳送這些檔案到目標系統: 


[oracle@source]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl --bkpexport
[oracle@source]$ scp `cat incrbackups.txt` oracle@dest:/stageondest
[oracle@source]$ scp xttplan.txt oracle@dest:home/oracle/xtt
[oracle@source]$ scp tsbkupmap.txt oracle@dest:home/oracle/xtt
[oracle@source]$ scp incrbackups.txt oracle@dest:home/oracle/xtt

步驟4.3 – 應用最後的增量備份到目標系統

最後的增量備份必須使用"--resincrdmp"來應用到目標資料檔案

[oracle@dest]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl --resincrdmp 

 這一步會應用最後的增量備份到目標系統資料檔案,並且,它會為階段 5A 產生一個 dump 檔案及一個指令碼檔案 xttplugin.txt。

在源庫的物件後設資料被匯出後,源庫的表空間就可以被置為 READ WRITE,如果你希望這樣做的話(注意,這可能會導致目標系統和源庫資料的不一致)。

階段5 – 傳輸階段:匯入物件後設資料至目標資料庫

在這個階段,表空間會被插入到目標資料庫。這裡有兩個選項。第一個是使用步驟 4.3 建立的 dump 檔案匯入;第二個可以在兩個資料庫間使用 network link 來匯入。

步驟5A – 匯入已存在的 dump 檔案
步驟5A.1 – 建立資料泵目錄及賦予許可權

資料泵會在特定的 directory 物件來查詢/生成 dump 檔案。或者複製’.dmp’檔案到一個已經存在的資料泵 directory 或者建立一個新的 directory 物件來指向’.dmp’檔案當前的目錄。

SYS@DESTDB> create directory dpump_tts as '/home/oracle/destination/convert';

這個目錄的相關許可權必須賦予給要執行匯入的使用者:

SYS@DESTDB> GRANT READ, WRITE ON DIRECTORY dpump_tts TO system;

步驟5A.2 修改並執行 impdp 命令:

要執行傳輸表空間,你必須修改匯入的命令檔案 xttplugin.txt (在執行步驟4.3時生成的)並且替換匯入引數 DIRECTORY 成當前環境裡的值。

下面是一個匯入的例子:

[oracle@dest]$ impdp system/<password> directory=dpump_tts \
> logfile=tts_imp.log \
> dumpfile=impdp3925_641.dmp \
> transport_datafiles='/u01/oradata/DESTDB/o1_mf_ts1_bngv18vm_.dbf','/u01/oradata/DESTDB/o1_mf_ts2_bngv229g_.dbf'

步驟5B – 使用 dblink 匯入

如果你想的話,你可以使用 dblink 來匯入後設資料到目標庫。這可以透過下面的步驟來完成。

步驟5B.1 – 為網路匯入生成新的 xttplugin.txt

在目標系統中,使用 oracle 使用者及環境變數(ORACLE_HOME 和 ORACLE_SID 環境變數)指向目標庫,執行下列命令來生成資料泵 TTS 命令:

[oracle@dest]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -e

這會生成一個使用資料泵 network_link 方式匯入的示例命令,並正確設定了 TRANSPORT_TABLESPACES 和 TRANSPORT_DATAFILES 引數。另外,一個資料泵匯出檔案也會被建立。

注意:這個命令會覆蓋步驟 5A 中也會需要的 xttplugin.txt 檔案。

步驟5B.2 – 在目標系統上建立一個 dblink

連線到目標資料庫,建立一個連線至源庫的 db link,如:

SQL@dest> create public database link ttslink connect to system identified by <password> using '<tns_to_source>';

驗證這個 dblink 可以正確的連線至源庫:

SQL@dest> select name from v$database@ttslink;

步驟5B.3 – 修改並執行 impdp 命令

這並不需要重新生成一份 dump 檔案。要執行傳輸表空間,你必須修改匯入的命令檔案 xttplugin.txt (在執行步驟 5B.1 時生成的)並且替換匯入引數 DIRECTORY,LOGFILE和NETWORK_LINK 成當前環境裡的值。

如下是一個使用網路模式執行匯入的示例命令:

[oracle@dest]$ impdp directory=DATA_PUMP_DIR logfile=tts_imp.log network_link=ttslink \ 
transport_full_check=no \ 
transport_tablespaces=TS1,TS2 \ 
transport_datafiles='+DATA/prod/datafile/ts1.285.771686721', \ 
'+DATA/prod/datafile/ts2.286.771686723', \ 
'+DATA/prod/datafile/ts2.287.771686743'

 

根據普通的 TTS 的要求,在執行匯入前,使用者擁有的需要匯入的物件必須在目標系統上已存在。

資源:

· 

· 

· 

· 

階段6 - 校驗資料

步驟6.1 – 檢查表空間是否發生 corruption

在這個步驟裡,傳輸的資料在目標系統是 READ ONLY 的,可以使用應用程式來驗證這些資料是否正確。

另外,可以使用 RMAN 的 VALIDATE TABLESPACE 來檢查是否存在邏輯/物理損壞:

RMAN> validate tablespace TS1, TS2 check logical;

步驟6.2 – 在目標系統上把相關的表空間設為 READ WRITE 模式

最後的步驟是在目標系統上把表空間設定為 READ WRITE 模式

system@dest/prod SQL> alter tablespace TS1 read write; 

Tablespace altered. 

system@dest/prod SQL> alter tablespace TS2 read write; 

Tablespace altered.

階段7 - 收尾

如果遷移過程中建立了一個額外的用來做增量備份轉換的臨時的例項,那麼這個例項就可以被關閉/刪除了。

在整個過程中一些不再需要的檔案都可以被刪除了,這包括:

·  源庫中 backupformat 所對應的目錄

·  目標系統中 stageondest 所對應的目錄

·  源庫和目標系統中 $TMPDIR 下對應的目錄(注意 /tmp 目錄不能被刪除)


附錄

Perl 指令碼 xttdriver.pl 命令選項的描述

 下面的表格列出了只要的支援指令碼 xttdriver.pl 的選項。

選項

描述

--backup 

對於選定的表空間所擁有的資料檔案做0級備份。這些備份會寫入配置檔案 xtt.properties 的引數“backupformat”所定義的目錄中。這些備份需要複製至目標系統中的配置檔案的引數“stageondest”所定義的目錄中。生成的另兩個檔案 tsbkupmap.txt 和 xttnewdatafiles.txt 也需要複製到目標系統上,TMPDIR 引數所對應的臨時目錄中。                                                                                                                  

--restore 

還原並轉換備份中的資料檔案到目標系統中 “stageondest” 對應的目錄中,還原後的檔案也會放在目標系統中 “stageondest” 對應的目錄中。

--bkpincr

會生成一個增量備份,並把備份放在源庫的“ backupformat”引數定義的目錄中,同時會生成“incrbackups.txt”檔案,包含了建立的備份的列表。這個檔案和“tsbkupmap.txt”檔案一起都必須被複製至目標系統的“stageondest”所定義的目錄中。

--recover 

這個選項可以對在目標系統上已經建立了的資料檔案應用增量備份。

-s 

在源庫設定環境變數(ORACLE_HOME and ORACLE_SID) 並多次執行來確認新的 FROM_SCN。這個選項是用來確認下一個 FROM_SCN,並記錄到 xttplan.txt 檔案中。當下次按照步驟3.1建立增量備份時使用這個 SCN。它會把新的 FROM_SCN 對映到時鐘時間來顯示下個增量備份距當前有多久。

-- bkpexport

這個選項會生成最後一次增量備份,並建立匯入資料檔案所需要的 dump 檔案。增量備份會被放置在“backupformat”對應的目錄,並且可以從“incrbackups.txt”檔案得到這個路徑。另外也會建立檔案“tsbkupmap.txt”, 這些檔案都應該被複製到目標系統。

-- resincrdmp

這個選項會還原並應用最後一個增量備份,並且會把 dump 檔案還原至“TMPDIR”所對應的臨時目錄中(可以透過命令列指定,也可以設定成環境變數);這個 dump 檔案會在匯入時使用。

-e 

在目標系統(需設定環境變數 ORACLE_HOME 和 ORACLE_SID 到目標系統)執行一次來生成資料泵的命令。

這個步驟會建立資料泵命令使用的模板,這個模板將使用dblink來匯入表空間內物件的後設資料。

-d debug

對 xttdriver.pl 指令碼和 RMAN 命令開啟除錯模式。除錯模式也可以透過設定環境變數 XTTDEBUG=1 來開啟。除錯模式支援3種級別: 1,2,3 ,如 xttdriver.pl -d 3。

配置檔案 xtt.properties 中的引數描述

下面表中列出的引數是在 12c 上操作必須在 xtt.properties 檔案中定義的引數;可能還會有其它為了向下相容而存在的引數:

引數

描述

例子

tablespaces

以逗號分割的的要傳輸的表空間的列表。必須寫在一行裡,寫在多行裡是不支援的。

tablespaces=TS1,TS2

platformid

源庫的平臺標識號,可以從 V$DATABASE.PLATFORM_ID 得到。

platformid=2

storageondest

目標系統中的 Directory 物件,定義了目標資料檔案建立在哪裡。

storageondest=DESTDIR

backupformat

源庫上備份放置的地方,這個目錄必須有足夠的空閒磁碟空間來放置0級備份及所有之後產生的增量備份。這個地址可以是和目標系統共享的 NFS 檔案系統,在這種情況下,目標系統的 stageondest 也應該指向相同的 NFS 目錄。

backupformat=/stage_source

stageondest

目標系統上用來放置從源庫上傳輸過來的備份的位置。這個位置必須有足夠的空閒磁碟空間來放置0級備份及之後所有的增量備份。這個地址可以是 NFS 檔案系統。這個地址可以是和目標系統共享的 NFS 檔案系統,在這種情況下,目標系統的 stageondest 也應該指向相同的 NFS 目錄。對於 NFS 的掛載選項,請參考  Note 359515.1

stageondest=/stage_dest

asm_home

目標系統上 ASM 例項的 ORACLE_HOME,注意: 如果 backupondest 被指定到檔案系統目錄上(而不是 ASM 的話),那麼請註釋掉 m_home 和 asm_sid。

asm_home=/u01/app/11.2.0.4/grid

asm_sid

目標系統上執行的 ASM 例項的 ORACLE_SID。

asm_sid=+ASM1

parallel

定義了在源庫上做備份時的並行度。

parallel=3

更改歷史

 

更改

日期

rman-xttconvert_2.0.zip 被髮布 – 加入了對多個源及目標系統目錄的支援。

rman-xttconvert_v3.zip 被髮布 –

2015-May-20

 

 

參考

NOTE:2311677.1  - Known Issues for Cross Platform Transportable Tablespaces XTTS
NOTE:17866999.8  - Bug 17866999 - ORA-1499 by Analyze Cluster Following RMAN Convert. Cluster Inconsistency may lead to ORA-600 [6711] ORA-600 [6722]. Fix Introduces dbms_repair procedures to repair Index
NOTE:359515.1  - Mount Options for Oracle files for RAC databases and Clusterware when used with NFS on NAS devices
NOTE:1389592.1  - 11G - Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup
NOTE:2471245.1  - V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup 
NOTE:2351123.1  - XTTS Creates Alias on Destination when Source and Destination use ASM
 - CHANGE TRACKING IS NOT USED DURING INCREMENTAL BACKUP FOR READ ONLY TBS
NOTE:413484.1  - Data Guard Support for Heterogeneous Primary and Physical Standbys in Same Data Guard Configuration
NOTE:2013271.1  - 12c How Perform Cross-Platform Database Transport to different Endian Platform with RMAN Backup Sets

 - ORA-1499 FOR CLUSTER FOLLOWING RMAN CONVERT

 


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

相關文章