win32 10g 到 win64 11g的遷移歷險

ddlovefish發表於2013-12-11
折騰了一段時間,從WIN2003 32bit ORACLE10G到WIN2008 64bit ORACLE11G的遷移終於告一段落。
用的辦法很簡單,不過反反覆覆折騰了好久,在這作一記錄,留作紀念。


老庫執行的時間很久,應用慢的實在難以忍受,而且是32位作業系統,對於記憶體的識別實在少的可憐,不遷移不行,於是有了這次折騰。
(一)由於是從32位遷移到64位作業系統,不能直接冷備份複製過去。SHUTDOWN之後冷備份複製的這種方式被PASS掉。
(二)考慮到使用RMAN做異機恢復,對RMAN也比較熟,不過這種方式也沒有進行下去。原因如下:
1)原庫未開歸檔,開歸檔後需要停庫
2)原庫未掛上儲存,且原來硬碟空間不足,不足以存放備份集
(三)最原始的exp/imp方式,這種方法很簡單。不過EXP不能放在原伺服器上,原伺服器沒有空間。只能EXP直接到目標庫,不過這樣也省去了複製DMP的時間。
一個140G的庫匯出需要8個小時,匯入需要8個小時。一共居然要16個小時,這樣算來停機時間太長。暫時不予考慮。
(四)expdp/impdp方式倒是快很多,不過這種方式必須在伺服器上進行,但我的原伺服器沒有多餘的磁碟空間了。
問題到這的時候有點小頭疼,幾種常用的遷移方式都不行。其實也考慮了DATAGUARD,不過思考後發現也不可能。
原庫未開歸檔,開啟歸檔後,如果歸檔日誌寫滿,更是個麻煩事。基於歸檔模式的遷移是不可能成行的。


繼續思考,想到了IMPDP+DBLINK。
(五)impdp + dblink 可以用於不同資料庫版本遷移,不像exp那樣產生中間檔案,直接匯入到目標庫。方法很好。
在測試環境一個TABLE大小16G ,我用EXP匯出熬時45分鐘,IMP匯入到目標庫耗時150分鐘


直接使用IMPDP+DBLINK方式,耗時50分鐘,很好。


測試庫的原庫版本10.2.0.3
測試庫的目標庫版本11.2.0.1


但是在生產環境中卻遇到了問題。
impdp wzz/wzz network_link=ying8 directory=dirmy logfile=impdp.log
ORA-39006: internal error
ORA-39113: Unable to determine database version
ORA-04052: error occurred when looking up remote object SYS.DBMS_UTILITY@Silver
ORA-00604: error occurred at recursive SQL level 3
ORA-06544: PL/SQL: internal error, arguments: [55916], [], [], [], [], [], [], []
ORA-06553: PLS-801: internal error [55916]
ORA-02063: preceding 2 lines from TO_203
ORA-39097: Data Pump job encountered unexpected error -4052


透過檢查metalink,在文件Doc ID: Note:4511371.8中詳細描述了這個bug,只要在11g中呼叫10.1版本
(補丁小於10.1.0.5)或10.2版本(補丁小於10.2.0.2)資料庫中的過程,就會引發這個錯誤。


除了打補丁升級之外,沒什麼好的臨時解決方法。將10g的資料庫升級到10.1.0.5或10.2.0.2版本以上,可以避免問題的產生。


而升級又存在風險,需要停機,我想做的還是最省時的遷移。


這時候有點窮途末路了。難不成要把原伺服器掛上儲存,這時候就可以選擇使用RMAN或者EXPDP/IMPDP了?




頭疼了。重新思考,回顧了下以上的幾種方式。重新回到了EXP/IMP。
於是重新做實驗。
這回我嘗試EXP不全部匯出,將報表資料和業務資料分開來做,和領導溝通後,領導的意思也是說為保證切換,報表的資料可以後進資料庫。
這時候EXP拆分為兩部分。報表那部分匯出需要6個小時,匯入也需要6個小時。
業務資料匯出需要2個小時,匯入也需要2個小時。
這樣看來,如果先匯入業務資料的話且不考慮報表的情況下,切換需要四個小時,這比之前的16小時好了很多。和領導溝通後,領導點了點頭,詢問能否再快一下。
I carry on thinking.
expdp/impdp有並行,但是exp/imp沒有。沒有咋整?創造條件。
業務資料一共有626張表,我將資料拆分為3部分。分開匯出,分開匯入。
效果再次體現,匯出用了40分鐘,匯入用了65分鐘。
算起來,停機時間不超過兩個小時。再次向領導彙報,領導挺滿意。
這時候忽然想到報表的資料,每天都會有一次結算,在結算過後,資料是不會變化的。也就是說,我完全可以在應用不停的情況下,先匯入歷史報表。
應用停了之後,再匯入剩餘的部分。這樣完全可以在兩個小時之內結束戰鬥。功夫不負有心人,昨天早上正式切換成功。


步驟如下
1.exp rows=n,imp rows=n,drop table,purge recyclebin
2.disable job
3.exp report table,imp report table
4.create database link,insert into report table where business_day_system>='20131204'
5.exp business table,imp business table
6.drop old sequence,create new sequence
7.enable job




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

相關文章