小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 pei3110 2011-01-06
技術(shù)說明

將您的 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ù)庫結(jié)構(gòu)具有很少的相似性或者沒有相似性的時。在本技術(shù)說明中,我將對比從 Microsoft Access 移植到 Oracle 的兩種技術(shù):使用 Microsoft Access 中的實(shí)用程序以及某些 DOS 專用批處理文件的“原始”方法,以及使用 Oracle Migration Workbench (OMW) 工具的“改進(jìn)”方法。

手動方法

 

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

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

  • 在 Oracle 中定義具有相同數(shù)據(jù)類型的表。避免在 Oracle 中使用 CLOB,因?yàn)檫@種數(shù)據(jù)類型會使系統(tǒng)速度降低;使用 varchar2 作為替代類型。此外,禁止在列名中使用空格,禁止使用百分號。單詞 modecomment 是 Oracle 中的關(guān)鍵字,因此如果您的 Access 數(shù)據(jù)庫有包含這些單詞的列名,則應(yīng)該在 Oracle 中將它們改為其他有意義的名稱。謹(jǐn)慎處理日期和時間之間、具有小數(shù)的數(shù)字與沒有小數(shù)的數(shù)字之間以及 char 與 varchar2 的數(shù)據(jù)類型轉(zhuǎn)換。在 Oracle 中沒有 Boolean 類型 — 使用 char(1) 作為替代類型。
  • 確保 Access 表定義了主鍵(Oracle 的所有表均需它們)。此外,Oracle 區(qū)分大小寫,而 Access 不區(qū)分大小寫。所有列和表的名稱均使用大寫字母。另外,在 Oracle 中名稱應(yīng)少于 30 個字符(在 Access 中為少于 64 個)。
  • 前往“控制面板”->“管理工具”->“數(shù)據(jù)源 (ODBC)”。
    • 在“系統(tǒng) DSN”選項(xiàng)卡中,單擊“添加”。
    • 選擇 Oracle ODBC 驅(qū)動程序,然后單擊“完成。
      • 在“ODBC 驅(qū)動程序設(shè)置”框中,為 DNS 鍵入數(shù)據(jù)庫名稱而非主機(jī)名稱。
      • 鍵入說明。
      • 對于“數(shù)據(jù)源服務(wù)名”,再次鍵入數(shù)據(jù)庫的名稱并指定 UserID。
      • 根據(jù)需要設(shè)置其他選項(xiàng),并相應(yīng)地更改預(yù)取數(shù)量。注意,應(yīng)用程序提取行所用的 Oracle 數(shù)據(jù)庫必須是 8.0.3 或更高版本。
      • 單擊“確定”兩次。注意,根據(jù)您的操作系統(tǒng)版本不同,您可能可以選擇在驅(qū)動程序配置中直接使用 TNS 名稱服務(wù)。
      • 在繼續(xù)操作之前,測試該連接。
  • 轉(zhuǎn)到 Access。
    • 選擇表。
    • 右鍵單擊“鏈接表”。
    • 在對話框中,轉(zhuǎn)到“文件類型”,選擇 ODBC Databases ()。
    • 轉(zhuǎn)到“機(jī)器數(shù)據(jù)源”選項(xiàng)卡,找到所需 DSN。選中它,單擊“確定”。
  • 如果尚未填寫服務(wù)名、用戶名和口令,則鍵入這些項(xiàng)。對于服務(wù)名,應(yīng)該使用該 DSN。
    • 如果尚未填寫服務(wù)名、用戶名和口令,則鍵入這些項(xiàng)。對于服務(wù)名,應(yīng)該使用 DSN。
      • 單擊“確定”,出現(xiàn)一系列的表和模式。選擇表。單擊“確定”。
      • 對于沒有主鍵的表,提示您選擇唯一的記錄標(biāo)識符。對于這些表,選擇“不顯示字段”,然后單擊“確定”?,F(xiàn)在您將看到 Access 中所有的鏈接表(在表的旁邊有一個球形標(biāo)志)。
    • 轉(zhuǎn)到“查詢”選項(xiàng)卡。
      • 選擇“新建”->“查找不匹配項(xiàng)查詢向?qū)?#8221;。
      • 選擇 Access 中的表。單擊“下一步”。
      • 選擇從 Oracle 中鏈接的表(現(xiàn)在位于 Access 中)。
        • 如果有主鍵,則對其進(jìn)行匹配。
        • 如果沒有主鍵,只需單擊“下一步。
        • 如果有多個主鍵,則只需匹配其中一個。
        • 單擊“下一步”,選擇所有字段,選擇“下一步”,單擊“修改設(shè)計(jì)”,然后單擊“完成”。
      • 轉(zhuǎn)到“查詢”->“追加查詢”。
        • 選擇表名作為所討論的鏈接表,如果尚未選擇,則選擇當(dāng)前數(shù)據(jù)庫,然后單擊“確定”。
        • 在“追加到”部分中,如果尚未選擇相應(yīng)列,則選擇這些列。
        • 轉(zhuǎn)到匹配主鍵列中,刪除出現(xiàn)在“追加到”部分中的任何內(nèi)容。
        • 保存該查詢。
        • 如果有一個主鍵,則此步驟即可完成。
        • 如果有多個主鍵,則轉(zhuǎn)到 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));
                          
          因?yàn)樗兄麈I列均非空,所以您需要在 WHERE 條件中使用 AND。
      • 對所有表重復(fù)以上步驟。
      • 如果表中沒有主鍵,則使用 AND 而非 OR 在所有列上進(jìn)行一次聯(lián)接并在所有列上進(jìn)行一次 null 檢查。
    • 轉(zhuǎn)到“宏”。
      • 在“操作”中選擇“OpenQuery”,并選擇追加的查詢之一。“視圖”將是“數(shù)據(jù)表”,而“數(shù)據(jù)模式”將是“編輯”。
      • 保存該宏。
      • 選擇該宏,并轉(zhuǎn)到“工具”-“宏”->“將宏轉(zhuǎn)換為 Visual Basic 代碼”。
      • 如果尚未選中“給生成的函數(shù)加入錯誤處理”和“包含宏注釋”,則選中此二者,并單擊“轉(zhuǎn)換”,將該宏轉(zhuǎn)換為具有函數(shù)名的模塊。
      • 保存該模塊。
    • 再次轉(zhuǎn)到該模塊,對其進(jìn)行更改,使用以下的模板:
      '------------------------------------------------------------
              ' 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
              
    • 對于所有的追加查詢,重復(fù)以上過程。
    • 在創(chuàng)建這些模塊之后,您可以刪除那些用于創(chuàng)建這些模塊的宏。
    • 再創(chuàng)建一個新的宏。
      • 在“操作”中選擇“RunCode”,并從剛才為其所創(chuàng)建的模塊中選擇或鍵入函數(shù)名。為此,雙擊“函數(shù)”->“數(shù)據(jù)庫”,選擇正確的模塊和函數(shù)。
    • 對于同一個宏中的所有追加查詢都執(zhí)行此過程。
    • 最后,在“操作”中選擇“Quit”,并選擇“退出”選項(xiàng)。
    • 現(xiàn)在執(zhí)行簡單的一步,但卻是最重要的一步:利用以下信息制作一個批處理文件:
      "C:\Program Files\Microsoft Office\Office\Msaccess.exe" "database path" /x  Macroname
              
    • 運(yùn)行該批處理文件。
您可以看到此方法需要大量手動工作。需要執(zhí)行很多步驟,并且該過程很容量出錯。即使您只做錯一步,也很難進(jìn)行反向跟蹤并調(diào)試什么地方出錯了。此外,如果您需要重新鏈接表,則會感到困難重重且很費(fèi)時,這取決于要轉(zhuǎn)換的表的數(shù)量。

自動方法

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

以數(shù)據(jù)類型轉(zhuǎn)換為例。OMW 提供一個向?qū)碇笇?dǎo)您完成此過程,從而簡化了移植過程。該工具推薦并提供了易于更改的默認(rèn)值。下表列出了一些推薦值:

訪問字段
默認(rèn)值
推薦值
文本 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ù)庫模式等轉(zhuǎn)換的完整支持??梢赞D(zhuǎn)換的 Microsoft Access 版本是 2.0、95、97 和 2000。

下表總結(jié)了 Oracle 與 Access 之間的轉(zhuǎn)換:

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


下圖演示了 OMW 在體系結(jié)構(gòu)級別上的運(yùn)作方式:

圖 1
圖 1:OMW 體系結(jié)構(gòu)

 

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

 

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

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

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

  • 啟動捕獲向?qū)А?
  • 單擊 Next。
  • 輸入連接目標(biāo) 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)一個進(jìn)度屏幕,顯示關(guān)于移植進(jìn)度的信息。復(fù)雜數(shù)據(jù)庫的移植過程可能需要很長時間。
  • 在具有 Microsoft Access 插件時,出現(xiàn)“Modify Microsoft Access Database”屏幕。您還可以更改 Microsoft Access 數(shù)據(jù)庫文件,以便 Microsoft Access 表單和報(bào)表使用 ODBC 連接來使用目標(biāo)數(shù)據(jù)庫:
    • 輸入 ODBC 連接的用戶名。ODBC 連接用戶名是被移植數(shù)據(jù)庫的名稱。
    • 輸入用戶的口令。
    • 輸入目標(biāo)數(shù)據(jù)庫的 ODBC 連接名稱。
    • 出現(xiàn)一個進(jìn)度屏幕,顯示關(guān)于移植進(jìn)度的信息。復(fù)雜數(shù)據(jù)庫的移植過程可能需要很長時間。

結(jié)論

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

 

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多