摘要
本文是為希望將其應用程序轉為 Microsoft SQL Server 應用程序的 Oracle 應用程序開發人員所寫的
文中講述了成功地進行轉換所需要的工具
過程和技巧
並突出強調了創建高性能
高並發性 SQL Server 應用程序的基本設計原則
本文的目標讀者應該具有
堅實的 Oracle RDBMS 基礎知識背景
全面的數據庫管理知識
熟悉 Oracle SQL 和 PL/SQL 語言
實際使用 C/C++ 編程語言的知識
sysadmin 固定服務器角色的成員身份
本文假定
您熟悉與 Oracle RDBMS 有關的術語
概念和工具
有關 Oracle RDBMS 及其體系結構的詳細信息
請參見 Oracle
Server Concepts Manual(Oracle
Server概念手冊)
至於使用 Oracle 腳本和示例
還假定您熟悉 Oracle Server Manager 和 Oracle SQL*Plus 工具
有關這些工具的詳細信息
請參見 Oracle 文檔
目錄
開發和應用程序平台
概述
本文組織結構
體系結構和術語
安裝和配置 Microsoft SQL Server
定義數據庫對象
實施數據完整性和業務規則
事務
鎖定和並發性
死鎖
SQL 語言支持
游標的實現
優化 SQL 語句
使用 ODBC
開發和管理數據庫復制
遷移數據和應用程序
數據庫示例
開發和應用程序平台
為了清楚和便於表述
假定開發和應用程序平台是 Microsoft Visual Studio
版
Microsoft Windows NT
(Service Pack
)
SQL Server
和 Oracle
Oracle
使用 Visigenic Software ODBC 驅動程序(
版)
SQL Server
使用 Microsoft Corporation ODBC 驅動程序(
版)
Microsoft SQL Server
包括用於 Oracle 的 OLE DB 驅動程序
但在本章中不予詳細討論
概述
應用程序遷移過程似乎很復雜
兩種 RDBMS 之間有很多體系結構方面的差異
描述 Oracle 體系結構的詞匯和術語在 Microsoft SQL Server 中
其含義常常完全不同
此外
Oracle 和 SQL Server 都有許多專有的 SQL
標准擴展
從應用程序開發人員的角度來看
Oracle 和 SQL Server 管理數據的方式是相似的
但是
Oracle 和 SQL Server 之間內部的差異是相當大的
如果管理得當
它對遷移應用程序造成的影響就會微乎其微
開發人員面臨的最嚴峻遷移問題是
SQL
SQL 語言標准的實現和每種 RDBMS 提供的擴展
一些開發人員只使用標准的 SQL 語言語句
並傾向於使其程序代碼盡可能通用
通常
這意味著把程序代碼限定在初級 SQL
標准
該標准在許多數據庫產品中均得到了一致的實現
其中包括 Oracle 和 SQL Server
這種方法可能給程序代碼帶來不必要的復雜性
並顯著影響程序性能
例如
Oracle 的 DECODE 函數是 Oracle 特有的非標准 SQL 擴展
Microsoft SQL Server 的 CASE 表達式已不止是初級 SQL
的擴展
並未在所有的數據庫產品上實現
如果不使用這兩個函數
則可以編程方式實現其功能
但可能需要從 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 驅動程序
在原本的
高性能的驅動程序中提供全面的級別
支持
如果程序只使用核心 ODBC API
它可能放棄了一些數據庫帶有的功能和性能
再者
並不是所有原本的 SQL 擴展都可以用 ODBC 轉義序列表示
例如 Oracle DECODE 和 SQL Server CASE 表達式就是這樣
此外
通過編寫 SQL 語句使用數據庫優化程序也是通常的做法
在 Oracle 中用來提高性能的技巧和方法
在 SQL Server 中並不一定最好
ODBC 接口無法將技巧從一個 RDBMS 轉化到另一個 RDBMS 中
ODBC 並不禁止應用程序使用數據庫特有的功能
也不禁止優化性能
但是應用程序需要一些數據庫特有的代碼部分
有了 ODBC
要使程序結構和絕大部分程序代碼在多個數據庫上保持一致
就變得十分簡單
OLE DB 是下一代的數據訪問技術
Microsoft SQL Server
利用了 SQL Server 自身組件中的 OLE DB
此外
應用程序開發人員在 SQL Server 新的開發過程中
應考慮使用 OLE DB
Microsoft 在 SQL Server
中加入了用於 Oracle
的 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
和 Microsoft SQL
之間相關差異的概述
此外
還包括轉換時要考慮的因素
SQL Server
的優勢以及多個示例
體系結構和術語
要成功地遷移
開始之前應該了解與 Microsoft SQL Server
有關的基礎體系結構和術語
本節中的許多例子均取自 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
數據庫均維護其自身的系統編錄
它包含下列信息
數據庫對象(表
索引
存儲過程
視圖
觸發器等等)
約束
用戶和權限
用戶定義的數據類型
復制定義
數據庫使用的文件
在 master 數據庫中
SQL Server 還加入了一個集中系統編錄
它包括系統編錄以及有關每個數據庫的一些信息
數據庫名稱和每個數據庫的主文件位置
SQL Server 登錄帳戶
系統消息
數據庫配置值
遠程和/或鏈接的服務器
當前活動信息
系統存儲過程
與 Oracle 中的 SYSTEM 表空間一樣
要訪問任何其它數據庫
SQL Server master 數據庫必須可用
因此
當 master 數據庫做重大修
From:http://tw.wingwit.com/Article/program/Oracle/201311/16526.html