如何从 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?的主要内容,如果未能解决你的问题,请参考以下文章
AWS Glue:如何使用 JDBC 连接 oracle db