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

Posted

技术标签:

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

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

要遵循哪些步骤?

【问题讨论】:

【参考方案1】:

Oracle 版本:11g -> 11.2.0.1.0

Windows 版本:Windows Server 2008

要完成的步骤:

    使用 Microsoft Access 驱动程序创建系统 DSN 修改listener.ora文件 创建文件initaccess.ora 修改tnsnames.ora文件 重启监听器 检查与 access 数据库的连接 在 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;

【讨论】:

以上是关于如何从 Oracle DB 查询外部 MS Access DB?的主要内容,如果未能解决你的问题,请参考以下文章

对 Oracle DB 的直通查询中的 MS 访问表达式

Oracle 到 Impala 查询转换

AWS Glue:如何使用 JDBC 连接 oracle db

如何在 Oracle 中使 Select 语句更快

如何将 MS-SQL Server SELECT 查询转换/迁移到 Oracle 和 MySQL?

19c 上的外部表读取问题