如何从Oracle DB查询外部MS Access DB?

时间:2014-06-06 11:41:00

标签: oracle ms-access oracle11g odbc

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

要遵循哪些步骤?

1 个答案:

答案 0 :(得分:3)

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. 检查与访问数据库的连接
  7. 在Oracle中创建数据库链接
  8. 第1步:创建系统DSN

    首先转到ODBC数据源管理员,单击“系统DSN”选项卡。使用以下参数创建DSN(您可以选择您喜欢的名称链接,但是您需要在整个过程中保持相同的名称)。 Link creation

    在我们的案例中:

    • 驱动程序:Microsoft Access驱动程序(* .mdb,*。accdb)
    • 姓名:访问
    • 描述:(没关系)
    • 数据库 - >选择 - > (选择.accdb或.mdb数据库)
    • 保存配置
    • 确保在保存后列出此列表:

      名称 - 驱动程序

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

    第2步:修改listener.ora文件

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

    • E:\应用\ Administrador \产品\ 11.2.0 \ dbhome_1 \ NETWORK \管理员

    我们需要在最后添加以下文字。顺便说一句,看看我发布的“oracle_home' C:驱动器中的目录。那是因为我有多个与Oracle相关的目录,我仍然不理解它但在我的案例中工作。也许在你的那里只有一个。

    您需要修改的参数:

    在第一个区块中:

    • SID_NAME:在上一步中选择的名称。创建了dsn的名称(在我们的例子中是' access')
    • 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'在您修改的文件中:

    listener.ora file

    第3步:创建initaccess.ora文件

    转到:

    • E:\应用\ Administrador \产品\ 11.2.0 \ dbhome_1 \ HS \管理员

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

    HS_FDS_CONNECT_INFO = access 
    HS_FDS_TRACE_LEVEL = 0
    
    • HS_FDS_CONNECT_INFO :在这里,我们在第一步中编写在ODBC源工具中创建的链接的名称,以便它访问'
    • HS_FDS_TRACE_LEVEL :保留0

    enter image description here

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

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

    • E:\应用\ Administrador \产品\ 11.2.0 \ dbhome_1 \ NETWORK \管理员

    要修改的参数:

    • HOST:服务器的主机名
    • SID:这是' initaccess.ora'的名称。文件但是带走了' init'部分和' .ora'文件扩展名:然后'访问'。
    • (HS = OK)=不要忘记这一点。

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

    请确保在“访问权限”之前不要留空格。参数。

    tnsnames.ora file

    第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     vicio ...

             

    El comando ha terminado correctamente

      

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

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

    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)
    

    STEP 7:在Oracle中创建数据库链接并查询Ms Access数据库:

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

    CREATE public DATABASE LINK accessdblink USING 'access';
    

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

    查询数据库:

    SELECT * FROM table_name@accessdblink;