日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

將您的 Access 數(shù)據(jù)庫移植到 Oracle

 pei3110 2011-01-06
技術說明

將您的 Access 數(shù)據(jù)庫移植到 Oracle
作者:Puneet Sangal,高級 Java 開發(fā)人員,National Leisure Group (Woburn, Mass.)
發(fā)表日期:2004 年 12 月

從現(xiàn)有系統(tǒng)向 Oracle 數(shù)據(jù)庫的移植過程可能令人畏懼,尤其是現(xiàn)有數(shù)據(jù)庫與 Oracle 數(shù)據(jù)庫結構具有很少的相似性或者沒有相似性的時。在本技術說明中,我將對比從 Microsoft Access 移植到 Oracle 的兩種技術:使用 Microsoft Access 中的實用程序以及某些 DOS 專用批處理文件的“原始”方法,以及使用 Oracle Migration Workbench (OMW) 工具的“改進”方法。

手動方法

 

第一種技術包括兩個階段。第一階段是將 Access 數(shù)據(jù)庫轉換為 Oracle 數(shù)據(jù)庫。只有當 Access 作為前端(如表單和報表) — 并且 Oracle 數(shù)據(jù)庫繼續(xù)作為后端的時候才使用第二階段。后者提供了一種在即席查詢基礎上將 Access 數(shù)據(jù)庫備份到 Oracle 的策略。還可以建立一個服務,使這一過程定期自動地運行。

為了實現(xiàn)從 Access 到 Oracle 數(shù)據(jù)庫的手動移植,您可以遵循以下這些步驟:

  • 在 Oracle 中定義具有相同數(shù)據(jù)類型的表。避免在 Oracle 中使用 CLOB,因為這種數(shù)據(jù)類型會使系統(tǒng)速度降低;使用 varchar2 作為替代類型。此外,禁止在列名中使用空格,禁止使用百分號。單詞 modecomment 是 Oracle 中的關鍵字,因此如果您的 Access 數(shù)據(jù)庫有包含這些單詞的列名,則應該在 Oracle 中將它們改為其他有意義的名稱。謹慎處理日期和時間之間、具有小數(shù)的數(shù)字與沒有小數(shù)的數(shù)字之間以及 char 與 varchar2 的數(shù)據(jù)類型轉換。在 Oracle 中沒有 Boolean 類型 — 使用 char(1) 作為替代類型。
  • 確保 Access 表定義了主鍵(Oracle 的所有表均需它們)。此外,Oracle 區(qū)分大小寫,而 Access 不區(qū)分大小寫。所有列和表的名稱均使用大寫字母。另外,在 Oracle 中名稱應少于 30 個字符(在 Access 中為少于 64 個)。
  • 前往“控制面板”->“管理工具”->“數(shù)據(jù)源 (ODBC)”。
    • 在“系統(tǒng) DSN”選項卡中,單擊“添加”。
    • 選擇 Oracle ODBC 驅(qū)動程序,然后單擊“完成。
      • 在“ODBC 驅(qū)動程序設置”框中,為 DNS 鍵入數(shù)據(jù)庫名稱而非主機名稱。
      • 鍵入說明。
      • 對于“數(shù)據(jù)源服務名”,再次鍵入數(shù)據(jù)庫的名稱并指定 UserID。
      • 根據(jù)需要設置其他選項,并相應地更改預取數(shù)量。注意,應用程序提取行所用的 Oracle 數(shù)據(jù)庫必須是 8.0.3 或更高版本。
      • 單擊“確定”兩次。注意,根據(jù)您的操作系統(tǒng)版本不同,您可能可以選擇在驅(qū)動程序配置中直接使用 TNS 名稱服務。
      • 在繼續(xù)操作之前,測試該連接。
  • 轉到 Access。
    • 選擇表。
    • 右鍵單擊“鏈接表”。
    • 在對話框中,轉到“文件類型”,選擇 ODBC Databases ()
    • 轉到“機器數(shù)據(jù)源”選項卡,找到所需 DSN。選中它,單擊“確定”。
  • 如果尚未填寫服務名、用戶名和口令,則鍵入這些項。對于服務名,應該使用該 DSN。
    • 如果尚未填寫服務名、用戶名和口令,則鍵入這些項。對于服務名,應該使用 DSN。
      • 單擊“確定”,出現(xiàn)一系列的表和模式。選擇表。單擊“確定”。
      • 對于沒有主鍵的表,提示您選擇唯一的記錄標識符。對于這些表,選擇“不顯示字段”,然后單擊“確定”?,F(xiàn)在您將看到 Access 中所有的鏈接表(在表的旁邊有一個球形標志)。
    • 轉到“查詢”選項卡。
      • 選擇“新建”->“查找不匹配項查詢向?qū)?#8221;。
      • 選擇 Access 中的表。單擊“下一步”。
      • 選擇從 Oracle 中鏈接的表(現(xiàn)在位于 Access 中)。
        • 如果有主鍵,則對其進行匹配。
        • 如果沒有主鍵,只需單擊“下一步。
        • 如果有多個主鍵,則只需匹配其中一個。
        • 單擊“下一步”,選擇所有字段,選擇“下一步”,單擊“修改設計”,然后單擊“完成”。
      • 轉到“查詢”->“追加查詢”。
        • 選擇表名作為所討論的鏈接表,如果尚未選擇,則選擇當前數(shù)據(jù)庫,然后單擊“確定”。
        • 在“追加到”部分中,如果尚未選擇相應列,則選擇這些列。
        • 轉到匹配主鍵列中,刪除出現(xiàn)在“追加到”部分中的任何內(nèi)容。
        • 保存該查詢。
        • 如果有一個主鍵,則此步驟即可完成。
        • 如果有多個主鍵,則轉到 SQL 視圖中,將查詢更改為包含兩個主鍵 — 例如,如果表有兩個主鍵(如 Catalog# 和 Step#),并且您在匹配查詢向?qū)е惺褂昧?Catalog#,則將:
          INSERT INTO PMSANGAL_TBLSPECSTEPS ( MOD, [CATALOG#], [STEP#], LAYER, NOM_OHMS,
                          NOM_OHMS, MAX_OHMS, LEFT_PERCENT, RIGHT_PERCENT )
                          SELECT SpecSteps.Mode, SpecSteps.[Catalog #], SpecSteps.[Step #], SpecSteps.Layer,
                          SpecSteps.[Min Ohms], SpecSteps.[Nom Ohms], SpecSteps.[Max Ohms], SpecSteps.[Left %],
                          SpecSteps.[Right %]
                          FROM SpecSteps LEFT JOIN PMSANGAL_TBLSPECSTEPS ON SpecSteps.[Catalog #] =
                          PMSANGAL_TBLSPECSTEPS.[CATALOG#]
                          WHERE (((PMSANGAL_TBLSPECSTEPS.[CATALOG#]) Is Null));
                          
                          
          修改為:
          INSERT INTO PMSANGAL_TBLSPECSTEPS ( MOD, [CATALOG#], [STEP#], LAYER, MIN_OHMS,
                          NOM_OHMS, MAX_OHMS, LEFT_PERCENT, RIGHT_PERCENT )
                          SELECT tblSpecSteps.Mode, tblSpecSteps.[Catalog #], tblSpecSteps.[Step #], tblSpecSteps.Layer,
                          tblSpecSteps.[Min Ohms], tblSpecSteps.[Nom Ohms], tblSpecSteps.[Max Ohms],
                          tblSpecSteps.[Left %], tblSpecSteps.[Right %]
                          FROM tblSpecSteps LEFT JOIN PMSANGAL_TBLSPECSTEPS ON ((tblSpecSteps.[Catalog #] =
                          PMSANGAL_TBLSPECSTEPS.[CATALOG#]) AND  (tblSpecSteps.[Step #] = PMSANGAL_TBLSPECSTEPS.[STEP#]))
                          WHERE (((PMSANGAL_TBLSPECSTEPS.[CATALOG#]) Is Null) AND ((PMSANGAL_TBLSPECSTEPS.[STEP#]) Is Null));
                          
          因為所有主鍵列均非空,所以您需要在 WHERE 條件中使用 AND。
      • 對所有表重復以上步驟。
      • 如果表中沒有主鍵,則使用 AND 而非 OR 在所有列上進行一次聯(lián)接并在所有列上進行一次 null 檢查。
    • 轉到“宏”。
      • 在“操作”中選擇“OpenQuery”,并選擇追加的查詢之一。“視圖”將是“數(shù)據(jù)表”,而“數(shù)據(jù)模式”將是“編輯”。
      • 保存該宏。
      • 選擇該宏,并轉到“工具”-“宏”->“將宏轉換為 Visual Basic 代碼”。
      • 如果尚未選中“給生成的函數(shù)加入錯誤處理”和“包含宏注釋”,則選中此二者,并單擊“轉換”,將該宏轉換為具有函數(shù)名的模塊。
      • 保存該模塊。
    • 再次轉到該模塊,對其進行更改,使用以下的模板:
      '------------------------------------------------------------
              ' CalMacro
              '
              '------------------------------------------------------------
              Function CalMacro()
              On Error GoTo CalMacro_Err
              Dim strConnect As String
              Dim strMyFile As String
              Dim dbs As Database
              Dim rst As Recordset
              strConnect = "ODBC;DATABASE=PUNEET;DSN=PUNEET;" & "UID=PMSANGAL;" & "PWD=********;"
              'PUNEET is the DSN or name of the database...
              Set dbs = OpenDatabase("", False, True, strConnect)
              Set rst = dbs.OpenRecordset("PMSANGAL.tblCal", dbOpenDynaset)
              DoCmd.SetWarnings False
              DoCmd.OpenQuery "tblCal Without Matching PMSANGAL_TBLCAL", acNormal, acEdit
              dbs.Close
              CalMacro_Exit:
              Exit Function
              CalMacro_Err:
              MsgBox Error$
              Resume CalMacro_Exit
              End Function
              
    • 對于所有的追加查詢,重復以上過程。
    • 在創(chuàng)建這些模塊之后,您可以刪除那些用于創(chuàng)建這些模塊的宏。
    • 再創(chuàng)建一個新的宏。
      • 在“操作”中選擇“RunCode”,并從剛才為其所創(chuàng)建的模塊中選擇或鍵入函數(shù)名。為此,雙擊“函數(shù)”->“數(shù)據(jù)庫”,選擇正確的模塊和函數(shù)。
    • 對于同一個宏中的所有追加查詢都執(zhí)行此過程。
    • 最后,在“操作”中選擇“Quit”,并選擇“退出”選項。
    • 現(xiàn)在執(zhí)行簡單的一步,但卻是最重要的一步:利用以下信息制作一個批處理文件:
      "C:\Program Files\Microsoft Office\Office\Msaccess.exe" "database path" /x  Macroname
              
    • 運行該批處理文件。
您可以看到此方法需要大量手動工作。需要執(zhí)行很多步驟,并且該過程很容量出錯。即使您只做錯一步,也很難進行反向跟蹤并調(diào)試什么地方出錯了。此外,如果您需要重新鏈接表,則會感到困難重重且很費時,這取決于要轉換的表的數(shù)量。

自動方法

第二種移植方法與第一種方法相比具有明顯的優(yōu)勢。

以數(shù)據(jù)類型轉換為例。OMW 提供一個向?qū)碇笇瓿纱诉^程,從而簡化了移植過程。該工具推薦并提供了易于更改的默認值。下表列出了一些推薦值:

訪問字段
默認值
推薦值
文本 Varchar2(999) Varchar2(999)
數(shù)字 — 長整型 Number(11,0) Number(11,0)
數(shù)字 — 字節(jié)型 Number(3,0) Number(3,0)
數(shù)字 — 整型 Number(5,0) Number(5,0)
日期/時間 Date Date
布爾型 Number(1,0) Number(1,) 或 char(1)

即使對于非 Access 數(shù)據(jù)庫,OMW 也在集成環(huán)境中提供了對觸發(fā)器、過程和數(shù)據(jù)庫模式等轉換的完整支持??梢赞D換的 Microsoft Access 版本是 2.0、95、97 和 2000。

下表總結了 Oracle 與 Access 之間的轉換:

特性
支持的轉換?
視圖 否(只支持查詢)
索引
組/角色 N/A
用戶
約束 是(有效性規(guī)則)
權限
用戶定義類型 N/A
存儲過程 N/A
觸發(fā)器 N/A
嵌入式 SQL N/A
其他特性 關系、鏈接表、應用程序代碼重用


下圖演示了 OMW 在體系結構級別上的運作方式:

圖 1
圖 1:OMW 體系結構

 

OMW 使用向?qū)Ш湍_本,如下:
  • 捕獲向?qū)Р东@源數(shù)據(jù)庫。
  • 移植向?qū)⒃茨P鸵浦驳?Oracle 模型。
  • 腳本創(chuàng)建一系列描述數(shù)據(jù)庫結構的文件,還將數(shù)據(jù)從源數(shù)據(jù)庫復制到目標數(shù)據(jù)庫。

 

在使用向?qū)Ш湍_本之后,您可以使用 OMW 用戶接口來自定義 Oracle 數(shù)據(jù)模型。

為了移植不同的第三方數(shù)據(jù)庫,OMW 使用了專用于它所能移植的各種數(shù)據(jù)庫的插件,包括 SQL Server、DB2 和 Informix。必須至少與 OMW 一起安裝一個插件。

Oracle 在 OTN 上存放了關于如何使用 OMW 進行移植的大量文檔,并且提供免費下載。但是下面的概述表明該過程相當簡單:

  • 啟動捕獲向?qū)А?
  • 單擊 Next。
  • 輸入連接目標 Oracle 數(shù)據(jù)庫所需的信息。
  • 單擊 Next
  • 出現(xiàn)“Migrate Tablespaces, Users, and User Tables”頁面。
  • 查看“Migrate Tablespaces, Users, and User Tables”頁面上的信息,并單擊 Next;出現(xiàn)“Migrate Table Data”頁面。
  • 指定在本移植向?qū)捚陂g是否傳輸數(shù)據(jù)。
  • 單擊 Next;出現(xiàn)“Select Schema Objects to Migrate”頁面。
  • 選擇要移植的模式對象,并單擊 Next;出現(xiàn)“Summary”頁面。
  • 查看摘要信息。
  • 單擊 Finish,啟動移植過程。
  • 出現(xiàn)一個進度屏幕,顯示關于移植進度的信息。復雜數(shù)據(jù)庫的移植過程可能需要很長時間。
  • 在具有 Microsoft Access 插件時,出現(xiàn)“Modify Microsoft Access Database”屏幕。您還可以更改 Microsoft Access 數(shù)據(jù)庫文件,以便 Microsoft Access 表單和報表使用 ODBC 連接來使用目標數(shù)據(jù)庫:
    • 輸入 ODBC 連接的用戶名。ODBC 連接用戶名是被移植數(shù)據(jù)庫的名稱。
    • 輸入用戶的口令。
    • 輸入目標數(shù)據(jù)庫的 ODBC 連接名稱。
    • 出現(xiàn)一個進度屏幕,顯示關于移植進度的信息。復雜數(shù)據(jù)庫的移植過程可能需要很長時間。

結論

這里描述的步驟只是對過程的概述,過程可能更短或更長,這取決于所要轉換的數(shù)據(jù)庫。強烈建議使用 OMW 進行移植。對于此主題,您可以利用 Oracle 在線教育以及大量的論壇。有關將 Access 應用程序移植到 HTML DB 的信息,請閱讀此技術白皮書

 

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多