開發和應用程序平臺 為了清楚和便于表述,假定開發和應用程序平臺是 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 之間內部的差異是相當大的,假如治理得當,它對遷移應用程序造成的影響就會微乎其微。
一致的 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 表達式就是這樣。
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 的優勢以及多個示例。
體系結構和術語 要成功地遷移,開始之前應該了解與 Microsoft SQL Server 7.0 有關的基礎體系結構和術語。本節中的許多例子均取自 Oracle 和 SQL Server 應用程序示例(附在文中)。
在 Oracle 中,“數據庫”指整個 Oracle RDBMS 環境,并包括以下組件:
Oracle 數據庫進程和緩沖區(實例)。 包含一個集中系統編錄的 SYSTEM 表空間。 其它由 DBA 定義的表空間(可選)。 兩個或多個在線重做日志。 存檔的重做日志(可選)。 各種其它文件(控制文件,Init.ora 等等)。 Microsoft SQL Server 數據庫從邏輯上將數據、應用程序和安全機制分離,這一點與表空間非常相似。Oracle 支持多個表空間;SQL Server 則支持多個數據庫。表空間還可用于支持數據的物理存放;SQL Server 使用文件組提供相同的功能。
Microsoft SQL Server 還默認安裝下列數據庫:
model 數據庫是所有新創建的用戶數據庫的模板。 tempdb 數據庫與 Oracle 臨時表空間相似,它用于臨時工作存儲和排序操作。與 Oracle 臨時表空間不同的是,用戶可以創建臨時表,并在用戶注銷時自動刪除。 msdb 支持 SQL Server 代理及其計劃的作業、警報和復制信息。 pubs 和 Northwind 數據庫作為培訓示例數據庫提供。
有關默認數據庫的具體信息,請參見 SQL Server Books Online。
每個 Oracle 數據庫均在一個集中系統編錄或數據字典上運行,它駐留在 SYSTEM 表空間中。每個 Microsoft SQL Server 7.0 數據庫均維護其自身的系統編錄,它包含下列信息: