SQLPLUS:如何使用默认服务SYS$USERS进行连接?

问题描述 投票:1回答:1

我们有一个使用SQLPLUS命令连接到Oracle DB的传统代码。

sqlplus "$USERNAME/$PASSWORD@//$HOST:$PORT/$SERVICE_NAME"

变量USERNAME, PASSWORD, HOST, PORT和SERVICE_NAME的值是通过外部属性文件配置的。当我们拥有服务名的DB时,这段代码就会工作。在我们的例子中,DB有默认的serice。

SYS_CONTEXT('USERENV','SERVICE_NAME')                                                                                                                                                                                                                           
-------------------------------------
SYS$USERS

DB只有SID。

SYS_CONTEXT('USERENV','SID')                                                                                                                                                                                                                                    
----------------------------
521

有什么方法可以使用默认服务名连接到Oracle DB吗?

sqlplus "$USERNAME/$PASSWORD@//$HOST:$PORT/SYS$USERS"

它以错误:ERROR失败。

ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor

我们也试过用SID作为。

sqlplus "$USERNAME/$PASSWORD@//$HOST:$PORT/521"

It fails with error:

ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor

There is no scope to change code of this legacy app or change DB to add service names. 如果有任何解决这个问题的方法,请告诉我。

oracle sqlplus connect sid service-name
1个回答
0
投票

你误用了sys_context来确定SERVICE_NAME或SID的正确值。 这不是SYS_CONTEXT所报告的。这里的 "sid "是你的session_id,而不是数据库的系统id。 我不确定SYS.USERS在这个上下文中到底代表什么,但它肯定不是你连接数据库的服务名。你应该看看v$parameter。

 select name, value from v$parameter where name='service_names';

或者更好的办法是,看一下lsnrctl status的输出结果,就能知道监听器的内容了 是否 我知道

我有 从来没有 看到一个为SYS$USERS服务的监听器。

© www.soinside.com 2019 - 2024. All rights reserved.