大型資料庫跨平臺遷移總結
一.前言
以下為大型資料庫跨平臺遷移的一個實際案例,採用了MV(物化檢視),Trigger以及EXP/IMP相結合處理遷移資料的方式,最大程度減少遷移停機時間 。總結文件中可能有寫的不妥的地方,請大家指正。
二.環境
軟體環境
源資料庫: Windows2000+Oracle9.2.0.1
目標資料庫:Linux AS3.0 + Oracle9.2.0.7
硬體環境
源資料庫: DELL PE6600 8GMem,4*2.8GXeon CPU. CX300 Storage
目標資料庫:DELL PE6600 8GMem,4*2.8GXeon CPU. CX300 Storage
資料庫資訊
系統後臺資料庫,資料庫中包含3個主要使用者AA ,BB, CC,
OLTP執行模式。資料庫總Table數量558個(其中一部分為備用表,暫時沒有資料),還包括View, Trigger, Sequences, Types, Resource Plans等。資料庫包含的資料型別有varchar2,number, blob, date ( 嚯嚯,還好沒有Long型別,不過有也可以處理的) 。資料庫磁碟佔用空間總大小為300G 。實際資料量大小接近180G .
遷移要求
將WINNT平臺下的Oracle9.2.0.1資料庫結構及資料全部遷移到RH Linux AS3.0平臺下的Oracle9.2.0.7 。 停機時間不多於6小時。
三.規劃及實施階段
558個Table中有3個巨大的含有blob欄位的表,其它Table資料量都一般,可以在允許的停機時間(6小時)內exp/imp完成,三個Table中我們以其中一個最大的Table為例來講解,其它2個Table效仿即可。
Table名稱: AA.streamdata
Exp 大小: 130G .
Exp耗時: 7~10小時
AA.streamdata表太大,不能在停機時間範圍內完成,考慮使用MV Log方式.
具體規劃及實施步驟如下:
1. exp/imp大表之前,請注意要建立源資料庫中的streamdata表的mv log ,建立mv log之後對streamdata的操作(update ,delete,insert)都會被記錄在mv log中,由於mv log中記錄的是操作,不是資料,所以還需要從mv log 中refresh來將真正變化的資料部分存在MV 中,所以還需要在目標資料庫(Linux系統平臺)中建立對應streamdata表變化部分的MV . 還有一點需要注意,mv log中的delete 操作不會被refresh到變化部分的MV, 所以需要一個Trigger來記錄源資料庫中streamdata表的刪除記錄。 具體步驟如下:
a. 在源Windows PDM正式資料庫上建立streamdata的Trigger, 用於紀錄刪除這個表的紀錄時候的Log表 (log表名稱為streamdata_del_log), 然後建立Trigger(簡單,就不寫了,DIY吧)。
b. 在源Windows PDM正式資料庫上建立streamdata 表的MV Log (用於儲存匯入匯出期間更新,插入的資料行) . 可以看到mlog$_streamdata 物化檢視日誌表。
SQL> create materialized view log on aa.streamdata
c. 在目標庫(Linux-Base)上建立DB Link 連線到源PDM(WINNT)正式庫 .
SQL>create public database link pdm connect to aa identified by aa using ‘pdm_win’ ;
d. 在目標庫(Linux-Base)上建立一個新的Table: aa.streamdata_mv, 用於儲存源資料中的資料變化(由mv log得來的) 。
CREATE MATERIALIZED VIEW "AA"."STREAMDATA_MV" ON PREBUILT TABLE REFRESH FAST ON DEMAND AS select * from ;
2. 準備開始匯出(exp)正式庫中 aa.streamdata 的資料 , 匯出期間資料庫處於執行狀態,所以可能有部分紀錄會有更新, 插入, 刪除動作 . 這些動作產生的行都會被記錄到mv log 中 . 在最後重新整理時紀錄到STREAMDATA_MV中,最後作資料同步處理。
Exp指令碼例子(子查詢匯出):
exp "'sys/sys as sysdba'" QUERY="WHERE streamid>=1 and streamid<50000" buffer=8192 tables=aa.streamdata feedback=50 consistent=n compress=n filesize=20G log=pdmstream1 file=(pdmstream1_1,pdmstream1_2)
……… 其它指令碼依此類推(以streamid為條件) .
匯出的時候注意點:
1. 使用 consistent=n
2. 更改引數 : ALTER SYSTEM SET UNDO_RETENTION = 30000;
3. 如果UNDO不夠, 需要加大; LOB型別的使用pctversion作為自己的回滾段 .
4. 儘量在系統不繁忙的時候exp .
5. 按照子查詢匯出 , 避免需要太大undo空間 .
3. Exp出來的dmp檔案可以直接匯入到Linux-Base的PDM資料庫, 同時PDM正式資料庫可以進行下一個EXP. 同步進行可以節省時間.
4. 匯入期間注意清除歸檔檔案, 觀察UNDO, TEMP等 .
5. 停機時間到 , 首先EXP出 BB使用者的資料, 包括資料 . (保證使用者AP沒有連線到正式DB)
6. 然後開始exp出CC使用者下的資料, 包括資料 , 同時開始匯入BB使用者的資料.
7. 匯入CC 使用者的資料. 匯入同時注意清理歸檔, UNDO, TEMP變化 .
8. 停機期間 , 匯出aa下STREAMDATA以外的其它表, 估計EXP需要時間 2小時,然後匯入。
9. 確認其它資料都已經匯入完成後, 開始處理STREAMDATE 表的差異部份 .
10. Refresh 源資料庫中的mv log , 檢視mv log 表, 看看是否資料已經消失, 然後檢視目標資料庫中的streamdata_mv 檢視, 應該有大量差異資料行(注意delete的資料是不會記錄在這個檢視中的) . 開始處理差異資料部分,從目標資料庫的記錄差異表streamdata_mv中取出primary key,然後使用SQL在目標資料庫的streamdata(目前資料已經匯入)中刪除這些資料行,然後將目標庫中的streamdata_mv中的差異資料insert 到目標庫中的streamdata中。
11. 匯入匯出期間被刪除的紀錄被記錄在Trigger寫入的LOG表(log表在源資料庫中)中, 從中找出紀錄行, 然後在目標資料庫中刪除這些行 。
四.注意事項
1. 注意exp/imp時候是連sequences,view,procedure等都imp到目標庫
了,由於streamdata大表是線上匯入匯出的,最後實施的mv log資料同步,那麼最開始exp出來的sequence 中的last value在源資料庫中可能已經發生變化,所以請注意,可能需要recreate sequences, 即需要從源庫中匯出sequences指令碼(其中含有每個sequences的最新last value) 。
2. imp資料的時候,注意disable掉目標庫中的trigger等。以免出現資料
問題。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-84397/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用傳輸表空間跨平臺遷移資料
- OBIEE10g跨平臺遷移過程及問題總結
- 移動跨平臺技術方案總結
- 【資料遷移】XTTS跨平臺傳輸表空間v4TTS
- 使用 Velero 跨雲平臺遷移叢集資源到 TKE
- 資料庫遷移資料庫
- 【資料遷移】XTTS跨平臺傳輸表空間(1.傳統方式)TTS
- elasticsearch跨叢集資料遷移Elasticsearch
- 1.1資料庫物件結構遷移方法資料庫物件
- 跨平臺資料庫 Realm 整合實踐資料庫
- laravel資料庫遷移Laravel資料庫
- 資料庫遷移 :理解資料庫
- redis資料庫遷移Redis資料庫
- GBASE助力山東移動大資料平臺PB級資料主倉業務跨機房無感知遷移大資料
- RMAN備份恢復典型案例——跨平臺遷移pdb
- 12c跨平臺完成PDB的備份遷移
- 【資料遷移】XTTS跨平臺傳輸表空間v3(3.DFT方式)TTS
- 【資料遷移】XTTS跨平臺傳輸表空間v3(2.RMAN增量)TTS
- Oracle資料庫中資料行遷移與行連結Oracle資料庫
- dm資料庫遷移命令資料庫
- 用rman遷移資料庫資料庫
- 資料庫遷移手記資料庫
- 遷移MySQL 5.7資料庫MySql資料庫
- 資料庫遷移神器——Flyway資料庫
- linux mysql資料庫遷移LinuxMySql資料庫
- django資料庫遷移-15Django資料庫
- SQL Server資料庫遷移SQLServer資料庫
- 高途資料平臺遷移與成本治理實踐
- 資料遷移(1)——通過資料泵表結構批量遷移
- 雲資料庫管理與資料遷移資料庫
- OGG資料庫遷移方案(四)資料庫
- OGG資料庫遷移方案(一)資料庫
- OGG資料庫遷移方案(二)資料庫
- OGG資料庫遷移方案(三)資料庫
- dnf資料庫備份&遷移資料庫
- 資料庫邏輯遷移方案資料庫
- JPA使用pg資料庫時,bool欄位不能跨庫遷移的解決方案資料庫
- Oracle資料庫(資料泵)遷移方案(上)Oracle資料庫
- Oracle資料庫(資料泵)遷移方案(下)Oracle資料庫