浙江20选5胆拖投注:Oracle 數據庫向 MS SQL Server 7.0 的遷移(1)

浙江20选5开奖结果走势图 www.kcvsu.com 2/9/2008來源:Oracle教程人氣:4509


  摘要:本文是為希望將其應用程序轉為 Microsoft SQL Server 應用程序的 Oracle 應用程序開發人員所寫的。文中講述了成功地進行轉換所需要的工具、過程和技巧。并突出強調了創建高性能、高并發性 SQL Server 應用程序的基本設計原則。
  
  本文的目標讀者應該具有:
  
  堅實的 Oracle RDBMS 基礎知識背景。
  全面的數據庫治理知識。
  熟悉 Oracle SQL 和 PL/SQL 語言。
  實際使用 C/C++ 編程語言的知識。
  sysadmin 固定服務器角色的成員身份。
  本文假定,您熟悉與 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 的優勢以及多個示例。
  
  體系結構和術語
  要成功地遷移,開始之前應該了解與 Microsoft SQL Server 7.0 有關的基礎體系結構和術語。本節中的許多例子均取自 Oracle 和 SQL Server 應用程序示例(附在文中)。
  
  在 Oracle 中,“數據庫”指整個 Oracle RDBMS 環境,并包括以下組件:
  
  Oracle 數據庫進程和緩沖區(實例)。
  包含一個集中系統編錄的 SYSTEM 表空間。
  其它由 DBA 定義的表空間(可?。?。
  兩個或多個在線重做日志。
  存檔的重做日志(可?。?。
  各種其它文件(控制文件,Init.ora 等等)。
  Microsoft SQL Server 數據庫從邏輯上將數據、應用程序和安全機制分離,這一點與表空間非常相似。Oracle 支持多個表空間;SQL Server 則支持多個數據庫。表空間還可用于支持數據的物理存放;SQL Server 使用文件組提供相同的功能。
  
   Oracle 數據庫向 MS SQL Server 7.0 的遷移(1)
  
  Microsoft SQL Server 還默認安裝下列數據庫:
  
  model 數據庫是所有新創建的用戶數據庫的模板。
  tempdb 數據庫與 Oracle 臨時表空間相似,它用于臨時工作存儲和排序操作。與 Oracle 臨時表空間不同的是,用戶可以創建臨時表,并在用戶注銷時自動刪除。
  msdb 支持 SQL Server 代理及其計劃的作業、警報和復制信息。
  pubs 和 Northwind 數據庫作為培訓示例數據庫提供。

  有關默認數據庫的具體信息,請參見 SQL Server Books Online。
  
  每個 Oracle 數據庫均在一個集中系統編錄或數據字典上運行,它駐留在 SYSTEM 表空間中。每個 Microsoft SQL Server 7.0 數據庫均維護其自身的系統編錄,它包含下列信息:
  
  數據庫對象(表、索引、存儲過程、視圖、觸發器等等)。
  約束。
  用戶和權限。
  用戶定義的數據類型。
  復制定義。
  數據庫使用的文件。
  在 master 數據庫中,SQL Server 還加入了一個集中系統編錄,它包括系統編錄以及有關每個數據庫的一些信息:
  
  數據庫名稱和每個數據庫的主文件位置。
  SQL Server 登錄帳戶。
  系統消息。
  數據庫配置值。
  遠程和/或鏈接的服務器。
  當前活動信息。
  系統存儲過程。
  與 Oracle 中的 SYSTEM 表空間一樣,要訪問任何其它數據庫,SQL Server master 數據庫必須可用。因此,當 master 數據庫做重大修