熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

SQLServer2005移植到Oracle10g經驗總結

2013-11-13 15:35:49  來源: Oracle 

  此次需要完成的目標是將庫從SQLServer 完整的移植到Oracleg中包括表結構數據視圖函數以及存儲過程的移植移植主要基於Oracle的OMWB(Oracle Migration Workbench)來完成盡管OMWB能幫助完成大部分具備難度的工作但還是有很多工作量的事情需要在OMWB完成後來手工進行所以整個移植過程工作量看起來會非常大但是不是僅僅只有工作量的問題呢?我覺得不是寫下這篇blog以便需要進行此項操作的同學以及給自己做個備忘

  由於目前OMWB僅支持SQLServer根據官方網站的消息OMWB的下一版會推出對SQLServer 的支持所以在目前的情況下只能先把庫從SQLServer 移植到SQLServer 這就是我們移植過程的第一步了

  一SQLServer >SQLServer

  一直以來版本要降級都是很困難的因為在新版本中必然會有些新的特性而如果剛好湊巧你使用到了這些特性的話在降級到低版本時就會碰到一些問題在經過幾次的嘗試後總結而言這個過程還是比較容易做的畢竟是同樣的數據庫再怎麼樣也不會出太大的問題不過也沒有像將庫從SQLServer 升級為SQLServer 那麼簡單整個移植過程這麼進行

  基於SQLServer 的數據導出將表結構和數據導入到SQLServer

  這步中需要注意的是默認情況下SQLServer會將表和視圖一起導入在這裡不要選擇視圖否則導入到SQLServer 後有些視圖會變成表選擇需要導入的表後基本上這步不會出現什麼問題可以完成表結構和數據的移植

  基於SQLServer 的生成腳本將視圖/函數/存儲過程移植到SQLServer

  這步需要慢慢來因為在視圖/函數/存儲過程中你可能使用到了一些SQLServer 的新特性如果碰到這樣的情況只能是手工進行修改以使它完全符合SQLServer 的要求盡管在生成腳本時你可以選擇生成的目標版本為SQLServer 但還是會有部分腳本執行是會出錯的

  在完成了SQLServer 到SQLServer 的移植後就可以基於OMWB來把庫從SQLServer 移植到Oracle了這步盡管有工具還是會比較的麻煩總結如下

  二SQLServer >Oracle g

  關於如何基於OMWB將庫從SQLServer 移植到Oracle g的操作步驟可參見此篇文檔

  op/omwb/

  大家現在從oracle官方站下的話可能會找不到sqlserver 的插件包如果找不到的話可以從這裡下載

  我在這裡要總結的是基於OMWB將庫從SQLServer 移植到Oracle g後還需要手工做的一些事情不要指望OMWB能無縫的幫你把庫從SQLServer移植到Oracle中銀彈是不存在的因此我們需要做些手工的工作完成庫的移植

  移植表結構和數據可能會出現的問題

  表中字段的默認值/主鍵/外鍵/索引移植不過去這些需要手工的進行補充

  移植視圖可能會出現的問題

  移植過去的視圖可能會出現各種語法錯誤的問題這需要手工的修正一般來說都是較為簡單的錯誤

  另外一種問題就是有些視圖可能會無法移植過去這些視圖就只能在對比OMWB的移植報告後找出來手工的進行移植了

  移植函數/存儲過程可能會出現的問題

  移植過去的函數/存儲過程中可能仍然會有不少的語法問題例如像SCOPE_IDENTITY()REPLICATEnewid()這些OMWB不知道該怎麼處理的函數還有像返回Table類型的這種函數這些都只能在移植後手工的來進行糾正關於函數不同造成的語法錯誤的現象大家可以參看這篇文檔來做SQLServer和Oracle函數的對照

  ?logID=

  移植過去的函數/存儲過程可能編譯是沒有問題也就是Oracle認為沒有語法問題但執行起來卻會報錯像字符串相加經過OMWB移植後有些字符串相加會替換成||但是有些會遺漏這個時候也只能手工來糾正這些錯誤了

  移植過去的函數/存儲過程在執行過程中可能會出現某些表的主鍵值不能為空的現象造成這種現象的原因多數為在SQLServer中該字段的默認值定義的為IDENTITY但在Oracle中沒法賦予這樣的默認值只能在插入的sql語句中加上對於主鍵字段的賦值可采用sequence的方式來生成順序號

  移植過去的函數/存儲過程中如果其中的查詢語句是采用字符串的方式然後動態執行的話這個時候的查詢語句就得手工修改為符合oracle的語法了因為OMWB在移植時是不會對字符串形式的查詢語句來做處理的

  部分函數/存儲過程會由於OMWB確實無法處理造成移植不到oracle這個時候也必須參照OMWB的移植報告找出這些函數/存儲過程來手工移植了

  整個移植過程可能會碰到比上面所列出的更多的別的問題可以看出整個移植過程確實需要耗費不小的工作量但總體而言完成的難度並不高

  其實真的是這樣嗎?當然不是就算你完成了上面的移植工作那也只能說表面看上去移植是完成了很有可能會出現這個存儲過程語法等等都沒有問題了但執行的效果和SQLServer就是不一樣這是為什麼呢?可能會是因為Oracle和SQLServer在並發控制事務機制上是不同的而這會影響到程序調用時的sql的編寫存儲過程的編寫等等也就是說在上面的移植過程的工作完成後還得仔細檢查現在的sql語句/函數/存儲過程是否根據Oracle的機制達到了原來在SQLServer中期望的效果只有做到這步的效果是一樣的才可以說移植過程完成了

  最後順帶說的就是應該根據Oracle的機制來采用符合oracle優化原則的方法來優化表/視圖/函數/存儲過程如果不做這步的話從sqlserver移植到oracle估計意義也不大了當然這可以不列為移植過程的工作

  總結差不多就是這樣希望有類似經驗的同學站出來說說自己碰到過的其他的問題或者說說更好的方法也歡迎將來進行此項工作的同學在得到新的經驗後寫出來給大家分享:)


From:http://tw.wingwit.com/Article/program/Oracle/201311/16982.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.