如果你正在營造微軟.NET 網路而後端運行Oracle 資料庫,那麼你應該把後端移轉到SQL Server。這個問題的核心不在於比較資料庫的效能而是尋求最適合你的工具。在.NET 體系架構下要回答這兩個問題,答案只有一個,就是.NET Server。在這篇文章裡,我們首先探究為什麼你的網路中存在Oracle 伺服器,然後討論如何將其遷移到SQL Server,最後闡述由這項舉措所能獲得的利弊。
系統中的Oracle
如果在你的網路中存在Oracle 伺服器,你需要搞清楚為什麼需要它的理由– 誰在使用它,什麼應用程式要用到它,在它上面正運行著什麼應用程式等等。
誰在使用它?
首先你應該搞清楚誰在使用Oracle伺服器。否則還沒得出答案就匆匆搬走伺服器很可能會促成大錯。當然,真要這麼做倒也是一種很快就能找出資料庫使用者的方法。但我們還是勸你萬萬不可。
網路管理員可能有監視或記錄Oracle使用情況的執行程序。開發人員可能要採用目前的伺服器開發應用程式。經理人可能要根據資料庫保存的資料得出分析報告或利用Oracle 後端做出企業決策。而且資料庫的使用者完全可能遍及世界各地。在確定因從Oracle 到SQL Server這一遷移過程而受到影響的使用者之時,你必須考慮到以上所有這些可能性。
什麼應用程式要用到它?
現在假設你一個挨一個地問遍了所有的用戶以了解誰在使用Oracle ?而他們的回答恰恰都是否定的,那麼你接下來就應該查看記錄檔了解哪些工作站正在存取資料庫。在你檢查這些記錄檔的時候,你可能會發現:不只工作站才存取資料庫,其他伺服器也要存取資料庫。
好,拿起筆來記下正在存取資料庫的伺服器,然後找出這些伺服器存取資料庫的特定應用程式。透過比較資料表內保存的資料和伺服器上執行的應用程式即可確定出這類應用程式。
Oracle伺服器上在執行什麼應用程式?
既然你已經知道了存取資料庫的使用者和外部應用程序,現在你就需要找出資料庫伺服器本身正在運行的應用程式了。這些應用程式可能是資料庫的預存程序(以及相應的觸發器、自訂資料類型以及安全性設定等)也可能是不在Oracle 以內運行的獨立應用程式。你尤其得注意添加到伺服器之上的Oracle 開發工具。
遷移到SQL Server
你永遠不要衝動地立即撥去Oracle 伺服器的電源裝上在SQL Server。關鍵伺服器在遷移的時候一定要三思。為什麼這個過程要專門取個遷移(migration)這個名字?還不是因為遷移總不是突然發生的。如果你採取一些簡單的合理步驟,遷移過程就能在沒有任何障礙的情況下實現。
本機應用程式和外部應用程式
遷移應用程式請採取下列步驟:
1. 在網路中安裝新的SQL Server。
2. 建立應用程式使用的「設備」和資料表。
3. 禁止應用程式存取資料庫而實現應用程式的離線。
4. 從Oracle 拷貝目前資料到SQL Server。
5. 把所有的應用程式都指向新資料庫。
6. 允許應用程式存取資料表和裝置中的新資料。
考慮SQL
在SQL Server和Oracle 之間遷移存在一個要命的問題:它們分別說著SQL-PL/SQL (Oracle)和Transact-SQL (微軟)這兩種不同的SQL方言。
在大多數情況下,如果你能使用其中一種SQL語言就多半能使用其它的SQL語言。考慮到SQL的函數、操作符、語句等等因素我特意搞了一份SQL程式設計師參考,這份資料顯示了各種DBMS所支援的特性。當然,如果SQL 產品的這些美國供應商都老實遵守美國標準SQL(ANSI-SQL)哪裡還會產生這麼大的問題!
另外你也可能會遭遇以下的問題:
Oracle 的dual表-在SQL Server上你可能會遇到select 'x';這樣的語句。而在Oracle上這條語句就必須被轉換成select 'x' from dual; 。 dual是一種由Oracle產生的系統表。除了這個SQL 語法問題之外,你還不能把這個表拷貝到你的SQL Server上,因為它是Oracle 系統表。
Truncation -- 兩種DBMS 都支援FLOOR和ROUND函數,但Oracle 也多了個TRUNC 函數。如果你的Oracle 系統用到了TRUNC 函數,那麼牽扯之處就需要你重新編輯了——可能得想法換成FLOOE或ROUND函數。
Concatenation-SQL Server 7 不支援ANSI || 連線方法,但SQL Server 2000卻可以支援了。現在兩個資料庫都採用加號(+)表示連接,但最好還是把這個符號用在算術運算上吧!
就看你到底用的是兩種伺服器的具體版本了,有關SQL 語言的遷移問題幾乎總是會突然在沒有預料到的情況下冒出來。
放棄Oracle 的商業案例
這種資料庫的遷移並不是簡單的感情遊戲,選擇微軟產品而非Oracle 是受到業務案例支持的。 Oracle 在法庭和宣傳戰中為了打敗微軟投入了相當多的資源。然而,從經濟性的角度來看,Oracle並沒有更高的性價比。此外,Oracle 只有一種核心產品,相比微軟還是底氣不足。複雜的銷售過程之外,你最好得找個更牛氣點的公司提供支援。這個公司應該健康向上,產品受到普遍歡迎,在遭遇更強大的對手之前得保證這家公司至少在數年之內非常強大。
遷移到SQL Server又能獲得什麼呢?
首先,你所獲得的系統同你的網路體系結構保持了高度的一致性。你無需專人負責UNIX 系統的管理。為DBMS 量身打造的管理工具能以最佳狀態與那些網路作業系統工具協同運作。
其次,系統實現了對.NET 應用程式的內在支援。 .NET體系架構不要求你一定要使用SQL Server,但這種伺服器是預設的資料庫。用於Oracle 的ODBC 驅動程式當然也不錯,但它們總是一個可能的故障點。
第三,在.NET網路下採用Oracle的成本比採用SQL Server更高。當你購買更多的Win2K 伺服器許可證以及VS.NET和Office許可證時,你可能會得到折扣。
最後,就算你單獨購買了SQL Server系統也可能比Oracle來得便宜。最近購買Oracle 許可證在討價還價的時候還難得像拔牙似的。我記得曾問過一個銷售代表價格,他竟然說:「你買得起嗎?」
小結
如果你正在營造.NET網絡,採用SQL Server作為你的DBMS是理智的,原因在於它正是微軟.NET Server應用套件的核心組成。從平台之間的遷移是一個必須仔細考慮、週詳部署的重要流程。在轉換平台之前你更應該擁有一個統一、有效、易於管理且可靠的.NET基礎。