我們都被騙了,所有的跨平臺遷移都可以通過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狀態下執行指令碼即可。
原文來自微信公眾號:資料和雲