1. 程式人生 > >我們都被騙了,所有的跨平臺遷移都可以通過XTTS實現

我們都被騙了,所有的跨平臺遷移都可以通過XTTS實現

自從2015年初進行了xtts增量的U2L遷移測試之後,國內很多人都開始利用這種方案進行資料庫跨平臺遷移了,基本上都是利用Oracle 封裝的perl指令碼。其中Oracle MOS文件 11G – Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (文件 ID 1389592.1) 明確提到目標端環境必須是Linux,

這裡該文件中的一段原話:

The source system may be any platform provided the prerequisites referenced and listed below for both platform and database are met. The destination system must be Linux, either 64-bit Oracle Linux or RedHat Linux, as long as it is a certified version. The typical use case is expected to be migrating data from a big endian platform, such as IBM AIX, HP-UX, or Solaris SPARC, to 64-bit Oracle Linux, such as Oracle Exadata Database Machine running Oracle Linux.

其實這裡很容易讓人產生誤解,這裡Oracle並非說不支援其他平臺,而是說Oracle 提供的封裝perl指令碼不支援而已。但是手工進行xtts操作,完全是ok的;經過我的測試也是可行,這裡是測試從Hp IA到Solaris Sparc的xtts增量遷移方式,供參考。

1、首先在原端建立測試表空間和測試表.

-建立測試表空間

create tablespace xtts datafile ‘+data’ size 100m;

create table test0504 as select * from dba_objects where 1=2;

alter table test504 move tablespace xtts;

2、備份xtts表空間檔案,並傳輸到目標端(Solaris)

3、目標端進行檔案格式轉換

convert from platform ‘HP-UX IA (64-bit)’ datafile  ’/tmp/xtts.dbf’ format ‘+DATA/test/datafile/xtts_new.dbf’;

4、原端進行基於SCN的增量備份(這裡由於我是測試表空間,所以未啟用Block track  changing)

5、建立備份集傳到目標端並進行備份集格式手工轉換(Solaris)

將指令碼儲存為xtts_conv1.sql並執行,如下是指令碼內容:

執行結果如下:

SQL> start xtts_conv1.sql;

PL/SQL procedure successfully completed.

6、進行第一次增量應用(Solaris)

說明:為了驗證增量資料是否能夠同步到目標端,在進行增量備份之前,

我這裡先進行了:

SQL > insert into test0504 select * fro dba_objects where rownm < 101;

SQL> commit;

將如下指令碼儲存為apply_incr1.sql,並執行:

執行結果如下:

7、將原端表空間設定為只讀模式

SQL> alter tablespace xtts  read only ;

8、進行最後一次增量備份。

9、將備份集傳輸到目標端並進行轉換。步驟略(同上)

10、最後一次應用增量備份。步驟略(同上)

11、源端匯出元資料

將下列內容儲存為exp_xtts.par:

執行如下命令匯出xtts表空間上的元資料資訊:

12、目標端匯入元資料

將下列內容儲存為imp_xtts.par:

執行如下命令匯入元資料。

13、檢查資料

我們可以看出,xtts表空間已經被遷移過來了,並且增量的資料也已經同步了。

所以我想表達的是,所有的跨平臺遷移,其實都可以利用XTTS Incremental Backup 功能進行遷移,無論目標端是什麼平臺。當然,如果位元組序相同的情況下,可以直接使用convert database 功能。

補充:

在進行增量應用時,可能會出現如下錯誤:

如果遇到這個錯誤,那麼只需要將例項停掉,啟動到nomount狀態下執行指令碼即可。

原文來自微信公眾號:資料和雲