【问题标题】:How do I connect to Oracle database link directly using SQLPLUS如何使用 SQLPLUS 直接连接到 Oracle 数据库链接
【发布时间】:2018-11-11 00:41:25
【问题描述】:

我尝试了以下每一个 - 没有一个成功:

[oracle@localhost]$ sqlplus system/oracle@SID_NAME

[oracle@localhost]$ sqlplus system/oracle@localhost:1521/SID_NAME

[oracle@localhost]$ sqlplus system/oracle@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=localhost)(Port=1521))(CONNECT_DATA=(SID=SID_NAME)))

[oracle@localhost]$ sqlplus "system/oracle@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=localhost)(Port=1521))(CONNECT_DATA=(SID=SID_NAME)))"

SQL*Plus 是否支持在初始命令提示符下直接连接到“Oracle 数据库链接”?如果是这样 - 如何?

SID_NAME 指向的不是数据库而是“Oracle 数据库链接”:https://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_concepts002.htm#i1007709

我可以在连接到本地 Oracle 数据库后查询“Oracle 数据库链接”。本地 Oracle 数据库是创建链接并指向远程数据库的位置。它通过 ODBC DSN 连接。

但是,我有兴趣在初始 sqlplus 命令提示符处直接连接到 Oracle 数据库链接。

本地Oracle数据库端口为1521。

我得到的错误信息:

错误:ORA-01017:用户名/密码无效;登录被拒绝

重点是调试 (GDB) ODBC 驱动程序。使用 isql - 在命令提示符处 - 我可以提供 ODBC DSN,当我在 GDB 提示符处运行 info sharedlibrary 时 - 我可以看到我加载的库并因此进行调试。我有兴趣使用 sqlplus 以相同的方式加载驱动程序。我无法看到加载的库后连接。因此 - 尝试像 isql 一样在初始命令中加载库。

sqlplus 在什么时候实际加载远程数据库的 ODBC 驱动程序?我知道在执行查询并在退出时将其卸载时会这样做。但我无法捕获它 - 即使存在断点。

【问题讨论】:

  • 如果您有一个恰好与您的本地 SID 同名的数据库链接,它指向哪里,它以谁的身份连接?您无法连接到链接本身,但您可以直接连接到链接指向的任何位置(除非两个 DB 都是远程的,并且网络限制允许两个 DB 通信但您只能访问一个),这 似乎 i> 成为你实际在做的事情。但是...错误信息相当清楚...
  • 与数据库链接(“SID_NAME”)相比,我的本地 SID 具有不同的名称(“orcl12c”)。我可以使用 ODBC DSN 直接连接到数据库。那么sqlplus不允许直接连接链接吗?
  • SQLPlus 不使用 ODBC,它使用 OCI,编译 C 二进制文件,通过 SQLNet 连接到数据库...除非它与数据库在同一台机器上,然后它可以使用 bequeath
  • 本地主机在连接字符串中做了什么?如果您从 PC 连接到不同服务器上的数据库,则该数据库指的是“localhost”,它指的是服务器,而 PC 的“localhost”是 PC。
  • 简单的答案是永远不会加载 ODBC 驱动程序。所以无法以这种方式调试。

标签: oracle command-line sqlplus database-link


【解决方案1】:

一个没有连接到数据库链接。

数据库链接告诉数据库 A 如何到达数据库 B。

假设您有 DB_LINK 定义,您可以使用相同的详细信息直接连接到数据库 B。

所以在某种程度上,是的,SQL*Plus 可以连接。

您的连接字符串是说,将我连接到一个名为 SID_NAME 的数据库,该数据库在我的计算机上运行,​​通过端口 #1521。

错误消息告诉您用户名和密码组合不正确。所以你已经成功了 90%——你只需要正确的“钥匙”来打开锁。

【讨论】:

  • 另外,“数据库链接”并不是您想象的那样。数据库链接是数据库 A 可以与数据库 B 建立的连接,因此可以从两个实例之间查询数据。
  • 那么我该如何调试 (GDB) 驱动程序以发现 sqlplus 的作用?我能够看到 ODBC 调用 isql 的内容。当我使用 Oracle DB 链接查询时,我还可以看到 ODBC 日志。但是,我无法调试 sqlplus。
  • @KapilVyas 你的计划有缺陷 - 使用 SQLPlus 调试 ODBC 没有任何意义,因为 SQLPlus 不使用 ODBC。在 Excel 或 Access 中创建 ODBC 数据源并在那里“测试”您的 ODBC 连接会更有意义。
【解决方案2】:

SQLPlus 使用 Oracle DB Link 与远程数据库通信。 SQLPlus 不直接进行 ODBC 调用。 SQLPlus 直接与数据库对话。数据库通过 DB Links 相互通信,在这种情况下,Oracle DB Link 通过“Oracle Heterogeneous Services (HS)”。 ODBC 驱动程序“从不”由 SQLPlus 加载,因此,无法使用此方法调试驱动程序。此外,SQLPlus 连接的数据库也不会加载 ODBC 驱动程序。它使用 OCI/C 代码,就像 SQLPlus 连接到另一个数据库一样。

【讨论】:

    猜你喜欢
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2010-09-10
    • 1970-01-01
    相关资源
    最近更新 更多