【发布时间】: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