国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

Oracle 數(shù)據(jù)庫向 MS SQL Server 7.0 的遷移(6)

2024-08-31 00:52:02
字體:
供稿:網(wǎng)友

  遷移數(shù)據(jù)和應(yīng)用程序
  本節(jié)闡述了,將數(shù)據(jù)從 Oracle 數(shù)據(jù)庫遷移到 Microsoft SQL Server 數(shù)據(jù)庫所使用的各種方法。
  
  在 Oracle 和 SQL Server 之間遷移的最簡單的方法是,使用 Microsoft SQL Server 7.0 中的數(shù)據(jù)轉(zhuǎn)換服務(wù) (DTS) 功能。DTS 向?qū)е笇?dǎo)您將數(shù)據(jù)移到 SQL Server。
  
  假如應(yīng)用程序是使用 Oracle 調(diào)用接口寫成的,則可考慮使用 ODBC 重寫。OCI 是 Oracle RDBMS 特有的,不能用于 Microsoft SQL Server 或其它數(shù)據(jù)庫。
  
  在大多數(shù)情況下,可以用相應(yīng) ODBC 函數(shù)代替 OCI 函數(shù),并對支持程序代碼進行相關(guān)的修改。剩下的非 OCI 程序代碼應(yīng)該只需要較小的修改。下例給出了,建立到 Oracle 數(shù)據(jù)庫連接所需 OCI 和 ODBC 語句的對比。
   Oracle 數(shù)據(jù)庫向 MS SQL Server 7.0 的遷移(6)(圖一)
  該表建議了下面 Oracle OCI 函數(shù)調(diào)用和 ODBC 函數(shù)之間的轉(zhuǎn)換。這些建議的轉(zhuǎn)換是近似的。可能并不存在轉(zhuǎn)換過程的精確匹配。要獲得類似的功能,可能需要對程序代碼作進一步修改。
   Oracle 數(shù)據(jù)庫向 MS SQL Server 7.0 的遷移(6)(圖二)
  許多應(yīng)用程序是使用 Oracle 編程接口(PRo*C、Pro*Cobol 等等)寫成的。這些接口支持 SQL-92 標準嵌入式 SQL。它們還包括非標準的 Oracle 編程擴展。
  
  可以使用 Microsoft 用于 C 語言的嵌入式 SQL (ESQL) 開發(fā)環(huán)境,將 Oracle 嵌入式 SQL 應(yīng)用程序遷移到 SQL Server。與 ODBC 應(yīng)用程序相比,這個環(huán)境對性能和 SQL Server 功能的使用提供了充分的、但絕非最優(yōu)的控制。
  
  有些 Oracle Pro*C 功能在 Microsoft ESQL 預(yù)編譯器中不予支持。假如 Oracle 應(yīng)用程序要廣泛使用這些功能,重寫為 ODBC 可能是一個較好的遷移選擇。這些功能包括:
  
  宿主數(shù)組變量。
  將數(shù)據(jù)類型同等化的 VAR 和 TYPE 語句。
  C++ 模塊中對嵌入式 SQL 的支持。
  對嵌入式 PL/SQL 或 Transact-SQL 塊的支持。
  游標變量。
  多線程應(yīng)用程序支持。
  Oracle 通信區(qū)域 (ORACA) 支持。
  假如應(yīng)用程序是用 Cobol 開發(fā)的,可以從 Micro Focus 遷移到用于 Cobol 語言的嵌入式 SQL。在 Cobol 中,可能會碰到與用于 C 語言的 Microsoft ESQL 預(yù)編譯器相同的一些限制。
  
  可以把 Oracle 嵌入式 SQL 應(yīng)用程序轉(zhuǎn)換到 ODBC 環(huán)境。這一遷移過程很簡單,并且提供許多優(yōu)勢。ODBC 像嵌入式 SQL 一樣,不需要使用預(yù)編譯器。因此,就節(jié)省了許多與程序開發(fā)有關(guān)的費用。
  
  下表給出了嵌入式 SQL 語句和 ODBC 函數(shù)的近似關(guān)系。
   Oracle 數(shù)據(jù)庫向 MS SQL Server 7.0 的遷移(6)(圖三)
  將嵌入式 SQL 程序轉(zhuǎn)換為 ODBC 時,最大的改動是有關(guān) SQL 語句錯誤的處理。開發(fā)嵌入式 SQL 程序時,經(jīng)常使用 MODE=ORACLE 選項。當使用這個選項時,SQL 通信區(qū)域 (SQLCA) 通常用于錯誤處理操作。
  
  SQLCA 結(jié)構(gòu)提供:
  
  Oracle 錯誤代碼。
  Oracle 錯誤信息。
  警告標志。
  關(guān)于程序事件的信息。
  最近一個 SQL 語句處理的行數(shù)。
  在大多數(shù)情況下,在每個 SQL 語句執(zhí)行后,應(yīng)該檢查 sqlca.sqlcode 變量中的值。假如值小于 0,就出現(xiàn)錯誤。假如值大于 0,請求語句執(zhí)行,但帶有警告。可從 sqlca.sqlerrm.sqlerrmc 變量,檢索 Oracle 錯誤信息文本。
  
  在 ODBC 中,函數(shù)在請求操作之后,返回一個指示其成功或失敗的數(shù)字狀態(tài)代碼。狀態(tài)代碼被定義為字符串文字,包括 SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_NEED_DATA、SQL_ERROR 等等。每次函數(shù)調(diào)用后,應(yīng)檢查這些返回值。
  
  通過調(diào)用 SQLError 函數(shù),可以獲得關(guān)聯(lián)的 SQLSTATE 值。此函數(shù)返回 SQLSTATE 錯誤代碼、原本的錯誤代碼(它是數(shù)據(jù)源所特有的錯誤代碼)和錯誤信息文本。
  
  當上一個 ODBC 函數(shù)調(diào)用返回 SQL_ERROR 或 SQL_SUCCESS_WITH_INFO 時,應(yīng)用程序通常調(diào)用這個函數(shù)。但是,每次調(diào)用時,任何 ODBC 函數(shù)可能不發(fā)布錯誤或發(fā)布更多的錯誤,因此每次 ODBC 函數(shù)調(diào)用之后,應(yīng)用程序可調(diào)用 SQLError。

  
  以下是每種環(huán)境中錯誤處理的示例。
   Oracle 數(shù)據(jù)庫向 MS SQL Server 7.0 的遷移(6)(圖四)
  假如應(yīng)用程序是使用 Oracle Developer 2000 開發(fā)的,并且要在 SQL Server 上運行,則考慮將其轉(zhuǎn)換到 Microsoft Visual Basic。Visual Basic 是一個功能強大的開發(fā)系統(tǒng),可很好地用于這兩種數(shù)據(jù)庫。也應(yīng)考慮其它平臺上的開發(fā)工具,如 Microsoft Visual Studio、PowerBuilder、SQL Windows 等等。
  
  假如不能直接從 Developer 2000 遷移,則考慮使用 Oracle Gateway to SQL Server。它可以作為從 Oracle 向 SQL Server 遷移的中間步驟。這個“通路”答應(yīng) Oracle RDBMS 連接到 SQL Server。所有的 SQL Server 數(shù)據(jù)請求都經(jīng)由這個“通路”自動地轉(zhuǎn)換。從 Developer 2000 應(yīng)用程序的角度看,這個連接是透明的。SQL Server 數(shù)據(jù)被視作 Oracle 數(shù)據(jù)處理。幾乎不需要對應(yīng)用程序代碼進行修改。
   Oracle 數(shù)據(jù)庫向 MS SQL Server 7.0 的遷移(6)(圖五)
  另外一個中間步驟是,將 Developer 2000 應(yīng)用程序直接用于 SQL Server。Developer 2000 可以使用 Oracle 開放客戶適配器 (OCA) 直接訪問 SQL Server。OCA 符合 ODBC Level 1 規(guī)范,并有限支持 ODBC Level 2 功能。
  
  OCA 建立一個與 SQL Server ODBC 驅(qū)動程序的連接。當把 Developer 2000 工具連接到 SQL Server 時,必須將 ODBC 數(shù)據(jù)源名稱指定為數(shù)據(jù)庫連接字符串的一部分。當退出 Developer 2000 應(yīng)用程序時,OCA 與 ODBC 數(shù)據(jù)源的連接被斷開。
  
  下面的示例給出了登錄連接字符串的語法。在此例中,用戶登錄到 SQL Server STUDENT_ADMIN 帳戶。SQL Server ODBC 數(shù)據(jù)源的名稱是 STUDENT_DATA。
  
  STUDENT_ADMIN/STUDENT_ADMIN@ODBC:STUDENT_DATA
  
  
  使用 ODBC 驅(qū)動程序并不保證,Developer 2000 應(yīng)用程序在 SQL Server 上使用正常。要處理非 Oracle 數(shù)據(jù)源,必須修改應(yīng)用程序代碼。例如,列的安全屬性是 Oracle 特有的,對 SQL Server 無效。
  
  必須修改用于標識每行數(shù)據(jù)的鍵模式。當使用 Oracle 作為數(shù)據(jù)源時,用 ROWID 標識每行數(shù)據(jù)。當使用 SQL Server 時,必須使用唯一主鍵值,來保證行值的唯一性。
  
  鎖定模式也必須更改。使用 Oracle 時,在對行進行任何更改后,Developer 2000 就會試圖立即鎖定那行數(shù)據(jù)。使用 SQL Server 時,鎖定模式應(yīng)該被設(shè)定為延遲的,這樣,記錄只在被寫入數(shù)據(jù)庫時才被鎖定。
  
  還有許多其它要解決的問題,包括在 PL/SQL 程序塊中,假如一個表上的多個插入訪問同一頁數(shù)據(jù),就會有產(chǎn)生死鎖的可能性。有關(guān)具體信息,請參見本章前面介紹的“事務(wù)、鎖定和并發(fā)性”部分。
  
  Microsoft SQL Sever 包括 SQL Server Web 助手,它是一個從 SQL Server 數(shù)據(jù)中生成標準 Html 文件的向?qū)А4讼驅(qū)Э梢詫?Web 頁配置為靜態(tài)的、定期更新的或當數(shù)據(jù)更新時更新。向?qū)椭鷦?chuàng)建 Web 頁。
  
  數(shù)據(jù)庫示例
  一個示例的大學(xué) RDBMS 應(yīng)用程序已經(jīng)創(chuàng)建,用于支持本章中通篇引用的示例應(yīng)用程序和代碼。這個應(yīng)用程序是專門創(chuàng)建的,用于闡述將 Oracle 7 應(yīng)用程序轉(zhuǎn)換到 SQL Server 7.0 應(yīng)用程序所涉及的要點、問題和竅門。
  
  這個示例應(yīng)用程序使用四個表,記錄大學(xué)中的所有活動。DEPT 表用于記錄大學(xué)所設(shè)的系。CLASS 表用于記錄每個系開設(shè)的課程。STUDENT 表用于記錄大學(xué)中每個學(xué)生的情況。GRADE 表用于記錄每門課登記的學(xué)生。
   Oracle 數(shù)據(jù)庫向 MS SQL Server 7.0 的遷移(6)(圖六)
  在此示例應(yīng)用程序中,社會安全號碼 (ssn) 用作 STUDENT 表的主鍵。DEPT 表用系代碼 (dept) 作為主鍵;而課程代碼 (ccode) 用作 CLASS 表的主鍵。社會安全號碼 (ssn) 和課程代碼 (ccode) 組成 GRADE 表的主鍵。
  
  列 major 定義為 STUDENT 表的外鍵。選擇專業(yè) (major) 時,學(xué)生必須從 DEPT 表中選擇一個有效的系代碼 (dept)。 CLASS 表中的系別 (dept) 一列也被定義為外鍵。當一門課程插入這個表中時,它必須和 DEPT 表中有效的系別 (dept) 聯(lián)系起來。
  
  GRADE 表有兩個外鍵。當一個學(xué)生登記一門課程時,在 STUDENT 表中必須有其社會安全號碼 (ssn);在 CLASS 表中必須有課程代碼 (ccode)。
這就保證了,學(xué)生不會登記表中不存在的課程,也不會答應(yīng)表中不存在的學(xué)生來登記課程。
  
  在本章中,對這些示例應(yīng)用程序通篇引用。
  
  Orademo.cpp
  訪問 Oracle 7.3 數(shù)據(jù)庫中示例大學(xué)表的 Oracle ODBC 應(yīng)用程序。這個程序是轉(zhuǎn)換過程的起點。它答應(yīng)用戶對示例大學(xué)應(yīng)用程序進行數(shù)據(jù)輸入和制作報告。
  
  Ssdemo.cpp
  使用 ODBC 寫成的 SQL Server 應(yīng)用程序。這個程序是轉(zhuǎn)換過程的終點。所有的 Oracle SQL 命令、過程、包和函數(shù)都已被轉(zhuǎn)化為 SQL Server Transact-SQL 命令和過程。這個程序例證了許多和 SQL Server 7.0 有關(guān)的優(yōu)點。
  
  Common.cpp
  可用于 Oracle 和 SQL Server 的 ODBC 應(yīng)用程序。要連接到 Oracle 或 SQL Server,用戶只要提供 ODBC 數(shù)據(jù)源名稱 (DSN) 即可。該程序然后登錄到請求的 RDBMS。該程序包括編程技巧方面的一些極好示例,可供開發(fā)多 RDBMS 程序時使用。
  
  Orauser.sql
  創(chuàng)建示例 Oracle 程序所需的數(shù)據(jù)庫用戶帳戶和數(shù)據(jù)庫角色。
  
  Oratable.sql
  創(chuàng)建示例 Oracle 程序所需的表和視圖。
  
  Oraproc.sql
  創(chuàng)建示例 Oracle 程序所需的存儲過程、函數(shù)和包。
  
  Oracommn.sql
  創(chuàng)建支持 Common.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 丽江市| 新兴县| 黑河市| 景宁| 邹城市| 东辽县| 上犹县| 乃东县| 玛沁县| 西乌珠穆沁旗| 铜川市| 嘉鱼县| 河北省| 托里县| 永城市| 会同县| 甘谷县| 安图县| 石河子市| 定结县| 饶平县| 龙川县| 泗阳县| 维西| 吴旗县| 呼和浩特市| 炎陵县| 芮城县| 邮箱| 湖北省| 武鸣县| 岐山县| 曲麻莱县| 乌审旗| 霍林郭勒市| 叶城县| 荆门市| 湾仔区| 西峡县| 康马县| 南开区|