Oracle 數據庫向 MS SQL Server 7.0 的遷移 (簡述)
摘要:本文是為希望將其應用程序轉為 Microsoft SQL Server 應用程序的 Oracle 應用程序開發人員所寫的。文中講述了成功地進行轉換所需要的工具、過程和技巧。并突出強調了創建高性能、高并發性 SQL Server 應用程序的基本設計原則。
本文的目標讀者應該具有:
本文假定,您熟悉與 Oracle RDBMS 有關的術語、概念和工具。有關 Oracle RDBMS 及其體系結構的詳細信息,請參見 Oracle 7 Server Concepts Manual(Oracle 7 Server概念手冊)。至于使用 Oracle 腳本和示例,還假定您熟悉 Oracle Server Manager 和 Oracle SQL*Plus 工具。有關這些工具的詳細信息,請參見 Oracle 文檔。
目錄
開發和應用程序平臺
概述
本文組織結構
體系結構和術語
安裝和配置 Microsoft SQL Server
定義數據庫對象
實施數據完整性和業務規則
事務、鎖定和并發性
死鎖
SQL 語言支持
游標的實現
優化 SQL 語句
使用 ODBC
開發和管理數據庫復制
遷移數據和應用程序
數據庫示例
為了清楚和便于表述,假定開發和應用程序平臺是 Microsoft Visual Studio 6.0 版、Microsoft Windows NT 4 (Service Pack 4)、SQL Server 7.0 和 Oracle 7.3。Oracle 7.3 使用 Visigenic Software ODBC 驅動程序(2.00.0300 版);SQL Server 7.0 使用 Microsoft Corporation ODBC 驅動程序(3.70 版)。Microsoft SQL Server 7.0 包括用于 Oracle 的 OLE DB 驅動程序,但在本章中不予詳細討論。
概述應用程序遷移過程似乎很復雜。兩種 RDBMS 之間有很多體系結構方面的差異。描述 Oracle 體系結構的詞匯和術語在 Microsoft SQL Server 中,其含義常常完全不同。此外,Oracle 和 SQL Server 都有許多專有的 SQL-92 標準擴展。
從應用程序開發人員的角度來看,Oracle 和 SQL Server 管理數據的方式是相似的。但是,Oracle 和 SQL Server 之間內部的差異是相當大的,如果管理得當,它對遷移應用程序造成的影響就會微乎其微。
開發人員面臨的最嚴峻遷移問題是:SQL-92 SQL 語言標準的實現和每種 RDBMS 提供的擴展。一些開發人員只使用標準的 SQL 語言語句,并傾向于使其程序代碼盡可能通用。通常,這意味著把程序代碼限定在初級 SQL-92 標準,該標準在許多數據庫產品中均得到了一致的實現,其中包括 Oracle 和 SQL Server。
這種方法可能給程序代碼帶來不必要的復雜性,并顯著影響程序性能。例如,Oracle 的 DECODE 函數是 Oracle 特有的非標準 SQL 擴展。Microsoft SQL Server 的 CASE 表達式已不止是初級 SQL-92 的擴展,并未在所有的數據庫產品上實現。
如果不使用這兩個函數,則可以編程方式實現其功能,但可能需要從 RDBMS 檢索更多的數據。
此外,SQL 語言的過程擴展也可能帶來困難。Oracle PL/SQL 和 SQL Server Transact-SQL 語言功能相似,但語法不同。各 RDBMS 及其過程擴展之間不存在精確的對等關系。因此,您可能會放棄使用存儲程序,例如過程和觸發器。這是令人遺憾的,因為這些程序能夠提供極好的性能和安全性,而這些用任何其它方式均無法實現。
使用專用的開發接口也會帶來其它的問題。使用 Oracle OCI(Oracle 調用接口)轉換程序,通常需要大量的資源投入。當開發的應用程序可能使用多個 RDBMS 時,應考慮使用開放式數據庫連接 (ODBC) 接口。
ODBC 是專為使用多種數據庫管理系統而設計的。ODBC 提供一致的應用程序編程接口 (API),它通過數據庫特有驅動程序的服務,與不同的數據庫一同工作。
一致的 API 是指,不論程序與 Oracle 還是與 SQL Server 交互,它在建立連接、執行命令和檢索結果時所調用的函數是相同的。
ODBC 還定義了一個標準調用級接口,并使用標準轉義序列,指定執行公用任務的 SQL 函數,但該函數在不同的數據庫中語法不同。不需要修改任何程序代碼,ODBC 驅動程序就可以自動地把 ODBC 語法轉換成原本的 Oracle 或 Microsoft SQL Server SQL 語法。在某些情況中,最好的方法是編寫一個程序,使 ODBC 在運行時進行轉換。
ODBC 并不是一個神奇的解決方案,不能對所有的數據庫均實現完全的數據庫獨立性、完備的功能以及較高的性能。不同的數據庫和第三方廠商提供不同級別的 ODBC 支持。一些驅動程序只實現了映射在其它接口庫頂層的核心 API 函數。其它驅動程序,例如 Microsoft SQL Server 驅動程序,在原本的、高性能的驅動程序中提供全面的級別 2 支持。
如果程序只使用核心 ODBC API,它可能放棄了一些數據庫帶有的功能和性能。再者,并不是所有原本的 SQL 擴展都可以用 ODBC 轉義序列表示,例如 Oracle DECODE 和 SQL Server CASE 表達式就是這樣。
此外,通過編寫 SQL 語句使用數據庫優化程序也是通常的做法。在 Oracle 中用來提高性能的技巧和方法,在 SQL Server 中并不一定最好。ODBC 接口無法將技巧從一個 RDBMS 轉化到另一個 RDBMS 中。
ODBC 并不禁止應用程序使用數據庫特有的功能,也不禁止優化性能,但是應用程序需要一些數據庫特有的代碼部分。有了 ODBC,要使程序結構和絕大部分程序代碼在多個數據庫上保持一致,就變得十分簡單。
OLE DB 是下一代的數據訪問技術。Microsoft SQL Server 7.0 利用了 SQL Server 自身組件中的 OLE DB。此外,應用程序開發人員在 SQL Server 新的開發過程中,應考慮使用 OLE DB。Microsoft 在 SQL Server 7.0 中加入了用于 Oracle 7.3 的 OLE DB 提供程序。
OLE DB 是 Microsoft 的一個戰略性系統級編程接口,用于管理整個組織內的數據。OLE DB 是建立在 ODBC 功能之上的一個開放規范。ODBC 是為訪問關系型數據庫而專門開發的,OLE DB 則用于訪問關系型和非關系型信息源,例如主機 ISAM/VSAM 和層次數據庫,電子郵件和文件系統存儲,文本、圖形和地理數據以及自定義業務對象。
OLE DB 定義了一組 COM 接口,對各種數據庫管理系統服務進行封裝,并允許創建軟件組件,實現這些服務。OLE DB 組件包括數據提供程序(包含和表現數據)、數據使用者(使用數據)和服務組件(處理和傳送數據,例如,查詢處理器和游標引擎)。
OLE DB 接口有助于平滑地集成組件,這樣,OLE DB 組件廠商就可以快速地向市場提供高質量 OLE DB 組件。此外,OLE DB 包含了一個連接 ODBC 的“橋梁”,對現用的各種 ODBC 關系型數據庫驅動程序提供一貫的支持。
本文組織結構為了幫助您實現從 Oracle 向 SQL Server 的逐步遷移,每節都包括一個 Oracle 7.3 和 Microsoft SQL 7.0 之間相關差異的概述。此外,還包括轉換時要考慮的因素、SQL Server 7.0 的優勢以及多個示例
原文轉自:http://www.anti-gravitydesign.com