共計 2500 個字符,預計需要花費 7 分鐘才能閱讀完成。
這篇文章主要介紹“SQLServer2005 如何移植到 Oracle10g”,在日常操作中,相信很多人在 SQLServer2005 如何移植到 Oracle10g 問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”SQLServer2005 如何移植到 Oracle10g”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!
由于目前 OMWB 僅支持 SQLServer2000,根據官方網站的消息,OMWB 的下一版會推出對 SQLServer 2005 的支持,所以在目前的情況下只能先把庫從 SQLServer 2005 移植到 SQLServer 2000,這就是我們移植過程的第一步了。
SQLServer2005 怎樣移植到 Oracle10g
一、SQLServer 2005– SQLServer 2000
一直以來,版本要降級都是很困難的,因為在新版本中必然會有些新的特性,而如果剛好湊巧你使用到了這些特性的話,在降級到低版本時就會碰到一些問題,在經過幾次的嘗試后,總結而言,這個過程還是比較容易做的,畢竟是同樣的數據庫,再怎么樣也不會出太大的問題,不過也沒有像將庫從 SQLServer 2000 升級為 SQLServer 2005 那么簡單,整個移植過程這么進行:
1、基于 SQLServer 2005 的數據導出將表結構和數據導入到 SQLServer 2000;
這步中需要注意的是默認情況下 SQLServer 會將表和視圖一起導入,在這里不要選擇視圖,否則導入到 SQLServer 2000 后有些視圖會變成表,選擇需要導入的表后基本上這步不會出現什么問題,可以完成表結構和數據的移植。
2、基于 SQLServer 2005 的生成腳本將視圖 / 函數 / 存儲過程移植到 SQLServer 2000;
這步需要慢慢來,因為在視圖 / 函數 / 存儲過程中你可能使用到了一些 SQLServer 2005 的新特性,如果碰到這樣的情況,只能是手工進行修改,以使它完全符合 SQLServer 2000 的要求,盡管在生成腳本時你可以選擇生成的目標版本為 SQLServer 2000,但還是會有部分腳本執行是會出錯的。
在完成了 SQLServer 2005 到 SQLServer 2000 的移植后,就可以基于 OMWB 來把庫從 SQLServer 2000 移植到 Oracle 了,這步盡管有工具,還是會比較的麻煩,總結如下:
二、SQLServer 2000– Oracle 10g
關于如何基于 OMWB 將庫從 SQLServer 2000 移植到 Oracle 10g 的操作步驟可參見此篇文檔:
大家現在從 oracle 官方站下的話可能會找不到 sqlserver 2000 的插件包,如果找不到的話可以從這里下載:
我在這里要總結的是基于 OMWB 將庫從 SQLServer 2000 移植到 Oracle 10g 后還需要手工做的一些事情,不要指望 OMWB 能無縫的幫你把庫從 SQLServer 移植到 Oracle 中,銀彈是不存在的,因此我們需要做些手工的工作完成庫的移植:
SQLServer2005 怎樣移植到 Oracle10g
1、移植表結構和數據可能會出現的問題;
表中字段的默認值 / 主鍵 / 外鍵 / 索引移植不過去,這些需要手工的進行補充;
2、移植視圖可能會出現的問題;
移植過去的視圖可能會出現各種語法錯誤的問題,這需要手工的修正,一般來說都是較為簡單的錯誤;
另外一種問題就是有些視圖可能會無法移植過去,這些視圖就只能在對比 OMWB 的移植報告后找出來手工的進行移植了。
3、移植函數 / 存儲過程可能會出現的問題;
移植過去的函數 / 存儲過程中可能仍然會有不少的語法問題,例如像 SCOPE_IDENTITY()、REPLICATE、newid() 這些 OMWB 不知道該怎么處理的函數,還有像返回 Table 類型的這種函數,這些都只能在移植后手工的來進行糾正,關于函數不同造成的語法錯誤的現象大家可以參看這篇文檔來做 SQLServer 和 Oracle 函數的對照:
移植過去的函數 / 存儲過程可能編譯是沒有問題,也就是 Oracle 認為沒有語法問題,但執行起來卻會報錯,像字符串相加,經過 OMWB 移植后有些字符串相加會替換成 ||,但是有些會遺漏,這個時候也只能手工來糾正這些錯誤了;
移植過去的函數 / 存儲過程在執行過程中可能會出現某些表的主鍵值不能為空的現象,造成這種現象的原因多數為在 SQLServer 中該字段的默認值定義的為 IDENTITY,但在 Oracle 中沒法賦予這樣的默認值,只能在插入的 sql 語句中加上對于主鍵字段的賦值,可采用 sequence 的方式來生成順序號;
移植過去的函數 / 存儲過程中如果其中的查詢語句是采用字符串的方式,然后動態執行的話,這個時候的查詢語句就得手工修改為符合 oracle 的語法了,因為 OMWB 在移植時是不會對字符串形式的查詢語句來做處理的;
部分函數 / 存儲過程會由于 OMWB 確實無法處理,造成移植不到 oracle,這個時候也必須參照 OMWB 的移植報告找出這些函數 / 存儲過程來手工移植了。
整個移植過程可能會碰到比上面所列出的更多的別的問題,可以看出整個移植過程確實需要耗費不小的工作量,但總體而言,完成的難度并不高。
其實真的是這樣嗎? 當然不是,就算你完成了上面的移植工作,那也只能說表面看上去移植是完成了,很有可能會出現這個存儲過程語法等等都沒有問題了,但執行的效果和 SQLServer 就是不一樣,這是為什么呢? 可能會是因為 Oracle 和 SQLServer 在并發控制、事務機制上是不同的,而這會影響到程序調用時的 sql 的編寫、存儲過程的編寫等等,也就是說,在上面的移植過程的工作完成后,還得仔細檢查現在的 sql 語句 / 函數 / 存儲過程是否根據 Oracle 的機制達到了原來在 SQLServer 中期望的效果,只有做到這步的效果是一樣的,才可以說移植過程完成了。
到此,關于“SQLServer2005 如何移植到 Oracle10g”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注丸趣 TV 網站,丸趣 TV 小編會繼續努力為大家帶來更多實用的文章!