【问题标题】:How to query an external MS Access DB from an Oracle DB?如何从 Oracle DB 查询外部 MS Access DB?
【发布时间】:2014-06-06 11:40:59
【问题描述】:

如何配置 Oracle 以便能够查询位于同一服务器 (localhost) 中的 MS Access 数据库 (.accdb)?

要遵循哪些步骤?

【问题讨论】:

    标签: oracle ms-access oracle11g odbc


    【解决方案1】:

    Oracle 版本:11g -> 11.2.0.1.0

    Windows 版本:Windows Server 2008

    要完成的步骤:

    1. 使用 Microsoft Access 驱动程序创建系统 DSN
    2. 修改listener.ora文件
    3. 创建文件initaccess.ora
    4. 修改tnsnames.ora文件
    5. 重启监听器
    6. 检查与 access 数据库的连接
    7. 在 Oracle 中创建 DB 链接

    第 1 步:创建系统 DSN

    首先进入 ODBC 数据源管理器,点击系统 DSN 选项卡。使用以下参数创建 DSN(您可以选择您喜欢的名称链接,但您需要在整个过程中保持相同的名称)。

    在我们的例子中:

    • 驱动程序:Microsoft Access 驱动程序 (*.mdb,*.accdb)
    • 姓名:访问权限
    • 说明:(没关系)
    • 数据库 -> 选择 ->(选择 .accdb 或 .mdb 数据库)
    • 保存配置
    • 确保您在保存后看到它:

      姓名 - 司机

      访问 - Microsoft Access 驱动程序 (*.mdb,*.accdb)

    第 2 步:修改 listener.ora 文件

    让我们找到文件。在我们的例子中:

    • E:\app\Administrador\product\11.2.0\dbhome_1\NETWORK\ADMIN

    我们需要在末尾添加以下文本。顺便说一下,看看我在 C: 驱动器中发布为“oracle_home”的目录。那是因为我有多个与 Oracle 相关的目录,我仍然不理解它,但在我的情况下工作。也许你的只有一个。

    需要修改的参数:

    在第一个区块中:

    • SID_NAME:在上述步骤中选择的名称。创建的 dsn 的名称(在我们的例子中为“访问”)
    • ORACLE_HOME:Oracle 的主目录
    • PROGRAM = dg4odbc(我认为从 Oracle 11g 及更高版本开始,'dg4odbc' 是强制性的。

    在第二块:

    • HOST:主机名的名称(不确定是否支持 localhost' 或 IP 地址,但我猜它们是)

    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC=
          (SID_NAME = access)
          (ORACLE_HOME = C:\app\Administrador\product\11.2.0\dbhome_1)
          (PROGRAM = dg4odbc)
        )
      )
    

    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = host_name)(PORT = 1521))   
        )
      )
    

    确保您修改的文件中“SID_LIST_LISTENER”或“LISTENER”之前没有空格:

    第 3 步:创建 initaccess.ora 文件

    转到:

    • E:\app\Administrador\product\11.2.0\dbhome_1\hs\admin

    在那里,复制“initdg4odbc.ora”文件(我复制后删除了它)。将以下文本添加到文件中:

    HS_FDS_CONNECT_INFO = access 
    HS_FDS_TRACE_LEVEL = 0
    
    • HS_FDS_CONNECT_INFO:这里我们写上第一步在ODBC源工具中创建的链接的名称,所以是'access'
    • HS_FDS_TRACE_LEVEL:保留为 0

    第四步:修改 tnsnames.ora 文件:

    让我们找到文件。在我们的例子中:

    • E:\app\Administrador\product\11.2.0\dbhome_1\NETWORK\ADMIN

    要修改的参数:

    • HOST:服务器的主机名
    • SID:这是“initaccess.ora”文件的名称,但去掉了“init”部分和“.ora”文件扩展名:然后是“access”。
    • (HS=OK) = 不要忘记这一点。

    access =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = host_name) (PORT = 1521))
        (CONNECT_DATA =
          (SID = access)
        )
        (HS=OK)
      )
    

    请确保不要在 'access =' 参数之前留有空格。

    第 5 步:重启监听器

    • 打开命令行终端
    • 转到:C:\app\Administrador\product\11.2.0\dbhome_1\BIN
    • 停止监听器
      • C:\app\Administrador\product\11.2.0\dbhome_1\BIN>LSNRCTL.EXE 停止
      • 你应该会看到一条消息说它成功了
    • 重启监听器
      • C:\app\Administrador\product\11.2.0\dbhome_1\BIN>LSNRCTL.EXE 启动
      • 你应该会看到一条消息说它成功了
      • 您还应该看到,(在重新启动服务器时的输出中)一条消息谈论我们刚刚添加的“访问”服务

    El servicio "access" tiene 1 instancia(s).

    La instancia "access", con estado UNKNOWN, tiene 1 manejador(es) para este ser 副...

    El comando ha Terminado Correctamente

    第 6 步:测试与 access 数据库的连接

    • 打开命令行终端
    • 转到:C:\app\Administrador\product\11.2.0\dbhome_1\BIN
    • 运行 tnsping.exe(作为参数,传递链接的名称:'access'):
    • C:\app\Administrador\product\11.2.0\dbhome_1\BIN>tnsping.exe 访问权限
    • 您应该会看到一条消息,说明它已正确运行并以毫秒为单位显示延迟

    TNS Ping Utility for 64-bit Windows: Version 11.2.0.1.0 - Production on 06-JUN-2
    014 11:04:35
    
    Copyright (c) 1997, 2010, Oracle.  All rights reserved.
    
    Archivos de parßmetros utilizados:
    E:\app\Administrador\product\11.2.0\dbhome_1\network\admin\sqlnet.ora
    
    
    Adaptador TNSNAMES utilizado para resolver el alias
    Intentando contactar con (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = CUPCA
    KE) (PORT = 1521)) (CONNECT_DATA = (SID = access)) (HS=OK))
    Realizado correctamente (20 mseg)
    

    第 7 步:在 Oracle 中创建 DB Link 并查询 Ms Access 数据库:

    创建数据库链接(始终为 **sys):**

    CREATE public DATABASE LINK accessdblink USING 'access';
    

    * 'access':与 tnsnames.ora 中的名称相同 -> 'access = '

    查询数据库:

    SELECT * FROM table_name@accessdblink;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多