0

我尝试了以下每一项 - 都没有奏效:

[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,当我info sharedlibrary在 GDB 提示符下运行时 - 我可以看到我加载的库并因此进行调试。我有兴趣使用 sqlplus 以相同的方式加载驱动程序。我无法看到加载的库后连接。因此 - 尝试像 isql 一样在初始命令中加载库。

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

4

2 回答 2

1

一个不连接到数据库链接。

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

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

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

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

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

于 2018-05-31T22:59:24.350 回答
0

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

于 2018-07-10T22:15:30.467 回答