深入淺出XTTS:Oracle資料庫遷移升級利器

深入淺出XTTS:Oracle資料庫遷移升級利器

來自專欄 IT大咖說1 人贊了文章

內容來源:2017年3月11日,新炬網路高級工程師楊光在「DBAplus北京資料庫技術沙龍」進行《深入淺出XTTS:Oracle資料庫遷移升級利器》演講分享。IT 大咖說作為獨家視頻合作方,經主辦方和講者審閱授權發布。

閱讀字數:1781 | 4分鐘閱讀

獲取嘉賓演講視頻回放及PPT,請點擊:t.cn/EvLMeM3

摘要

通常我們要進行數據遷移,可以使用的方案有很多,比如數據泵、RMAN、GoldenGate,甚至是第三方同步軟體DSG、DDS等。但是對於傳統的遷移方式來說,數據量越大,需要的停機時間越長。增強版的XTTS支持了跨平台增量備份,使用增量備份的方式,可以將前期的數據文件傳輸、數據文件轉換等操作在不中斷業務的下操作。然後通過多次增量備份恢復,使源端和目標端的數據差異降到最小,最後業務停機時間只需要申請增量備份和恢復的時間即可。

XTTS是什麼?

TTS是一種傳輸數據的手段,傳輸表空間,把表空間從一個庫移到另一個庫。但是對於傳統的TTS來說,數據量越大,需要的停機時間越長。因此Oracle提供了一個加強版的XTTS,XTTS可以提供跨平台的增量備份,兩者結合大縮減遷移時所需要停機時間。

適用場景

我們在做數據遷移的時候使用了三種手段。

第一種是數據泵。我們要做數據遷移的時候需要停止應用,數據沒有更新才能保證所有業務表的一致性。在這個情況下使用數據泵進行導出,導出後進行傳輸,最後灌入。這種方式操作起來是最簡單的,它適用的場景是在數據量比較小的情況下。

第二種方式是我們在做一些大型系統時,對它進行遷移的時候往往會使用Goldengate。Goldengate有一個好處就是停用時間很短。它在前期準備的時候做了數據的初始化,然後做數據的同步。在準備階段數據是一直在傳輸的,只有當業務可以停機的時候,才會停止業務,切換到新的庫上。

XTTS和Goldengate的方式比較像,它的前期也是要有一個準備,有數據初始化。後續是做增量的恢復,把初始化之後變更的數據使用增量的備份和恢復把之前的數據補上,到最後割接的時候把最後一次小增量補回來,這樣來保證割接的時間比較短暫。

最短停機時間和最少的數據丟失是每個業務人員的訴求,上圖是前面三種方式的對比。這三種方式都支持跨版本和跨平台,但不同的數據量會導致它們的停機時間不同。Goldengate的停機時間是最短的,因為它一直在不停地傳輸數據;數據泵的停機時間最長,它需要在停止業務之後再開始傳輸數據,其中有備份的時間、傳輸數據文件的時間和恢復的時間。而XTTS的停機時間則是介於Goldengate和數據泵之間。

TTS的基礎操作步驟

A、將源端資料庫表空間設置為READ ONLY模式。

B、傳輸數據文件到目標系統。

C、轉換數據文件為目標系統的位元組序。

D、在源端導出元數據,並在目標端導入。

E、將目標端的資料庫表空間設置為READ WRITE。

XTTS的基礎操作步驟

A、將源端數據文件傳輸到目標系統。

B、轉換數據文件為目標系統的位元組序。

C、在源端創建增量備份,並傳輸到目標端。

D、在目標端恢復增量備份。

E、重複多次操作C和D步驟。

F、將源端資料庫表空間設置為READ ONLY模式。

G、最後一次執行C和D步驟。

H、在源端導出元數據,並在目標端導入。

I、將目標端的資料庫表空間設置為READ WRITE。

XTTS每次恢復都需要重啟?

  1. pfile.ora
  2. *.audit_file_dest=/home/u02/app/oracle/admin/xtt/adump
  3. *.db_name=xtt
  4. *.compatible=11.2.0.4.0
  5. *.db_block_size=16384
  6. *.db_file_multiblock_read_count=64
  7. *.db_files=8000
  8. *.memory_target=21474836480
  9. *.open_cursors=3000
  10. *.processes=8000
  11. *.undo_tablespace=UNDOTBS1

如何加速XTTS

我們要考慮的是如何把最後增量的備份和恢復可控時間縮短到3個小時之內。

在停止業務的這段時間,要做的是表空間只讀、增量備份恢復、元數據導入,最後是數據校驗。表空間只讀和數據校驗的時間是固定的,關鍵的時間點是增量備份恢復和元數據的導入時間。

增量備份提速6小時→小時

  1. alterdatabase enable block change tracking using file/oradata/Oracle_change.trace;
  2. selectstatus, filename fromv$block_change_tracking;

incrementalbackup的目的是只備份那些自上次備份以來發生過改變的block。然而,即使只有一小部分發生改變,incremental backup也要讀取完整的數據文件。block change tracking功能解決了這個問題。它使用change tracking writer(CTWR)後台進程,在change tracking file文件中,記錄所有資料庫中變化的物理位置。啟動block change tracking功能後,level 0級的incremental backup依然要掃描整個數據文件,因為change tracking file還沒有映射到block的狀態。對於後續級別的incremental backups,RMAN使用change tracking data決定哪些需要讀取。通過消除對整個數據文件的read,提高了性能。

元數據導入加速

第一次導入

  1. impdpdirectory=DESTDIR1logfile=tts_imp.lognetwork_link=ttslinktransport_full_check=yestransport_tablespaces=XXX
  2. transport_datafiles=/XXX/xxx.dbf『
  3. exclude=statistics

第二次導入

  1. impdpdirectory=DESTDIR1logfile=tts_imp_2.lognetwork_link=ttslinkschemas=XXX
  2. content=metadata_onlyexclude=index,table,constraintparallel=8

將過程,視圖,包,觸發器,統計信息導入,開啟並行。

遷移前的準備

遷移對象統計;

資料庫字符集檢查;

檢查原環境是否存在空段;

失效對象檢查;

基於XMLSchema的XMLType對象檢查;

目標端創建檢查用dblink;

檢查源資料庫和目標庫具有重複名稱的表空間;

檢查是否存在應用用戶建在system,sysaux,users上的情況;

表空間自包含檢查;

比對新舊環境role;

比對新舊環境profile;

在新環境中比對並創建用戶;

生成恢復用戶默認表空間和臨時表空間的腳本;

創建非默認的temp表空間;

生成為應用用戶賦對象許可權腳本;

軟體包上傳。

總結

XTTS支持擴位元組序遷移,操作靈活簡便,停機時間較短。遷移時盡量減少批次,操作越多越容易出錯。

我今天的分享就到這裡,謝謝大家!


推薦閱讀:

數據遷移二三事

TAG:SQL | Oracle資料庫 | 數據遷移 |