Oracle SQLPLUS:如何使用默认服务SYS$USERS进行连接
我们有一个使用SQLPLUS命令连接到Oracle DB的遗留代码:Oracle SQLPLUS:如何使用默认服务SYS$USERS进行连接,oracle,sqlplus,connect,sid,service-name,Oracle,Sqlplus,Connect,Sid,Service Name,我们有一个使用SQLPLUS命令连接到Oracle DB的遗留代码: sqlplus "$USERNAME/$PASSWORD@//$HOST:$PORT/$SERVICE_NAME" 使用外部属性文件配置变量USERNAME、PASSWORD、HOST、PORT和SERVICE_NAME的值。当DB具有服务名称时,此代码起作用。在我们的情况下,DB具有默认服务: SYS_CONTEXT('USERENV','SERVICE_NAME')
sqlplus "$USERNAME/$PASSWORD@//$HOST:$PORT/$SERVICE_NAME"
使用外部属性文件配置变量USERNAME、PASSWORD、HOST、PORT和SERVICE_NAME的值。当DB具有服务名称时,此代码起作用。在我们的情况下,DB具有默认服务:
SYS_CONTEXT('USERENV','SERVICE_NAME')
-------------------------------------
SYS$USERS
DB只有SID:
SYS_CONTEXT('USERENV','SID')
----------------------------
521
是否有任何方法可以使用默认服务名称连接到Oracle DB?e、 g
sqlplus "$USERNAME/$PASSWORD@//$HOST:$PORT/SYS$USERS"
它失败并出现错误:
错误:
我们还尝试使用SID作为:
sqlplus "$USERNAME/$PASSWORD@//$HOST:$PORT/521"
它失败并出现错误:
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor
没有范围更改此旧应用程序的代码或更改DB以添加服务名称。请告诉我是否有解决此问题的方法。您错误地使用sys\u上下文来确定服务名称或SID的正确值。这不是SYS_上下文报告的内容。这里的“sid”是您的会话id,而不是数据库的系统id。我不确定SYS.USERS在此上下文中究竟代表什么,但它肯定不是连接到数据库的服务名称。您应该查看v$参数:
select name, value from v$parameter where name='service_names';
或者更好的方法是,只需查看“lsnrctlstatus”的输出,向您展示侦听器所知道的内容
我从未见过一个听众为SYS$用户服务 您错误地使用sys\u上下文来确定服务名称或SID的正确值。这不是SYS_上下文报告的内容。这里的“sid”是您的会话id,而不是数据库的系统id。我不确定SYS.USERS在此上下文中究竟代表什么,但它肯定不是连接到数据库的服务名称。您应该查看v$参数:
select name, value from v$parameter where name='service_names';
或者更好的方法是,只需查看“lsnrctlstatus”的输出,向您展示侦听器所知道的内容
我从未见过一个听众为SYS$用户服务 SID将带有冒号:sqlplus“$USERNAME/$PASSWORD@/$HOST:$PORT:521”SYS$USERS是一种内部使用的特殊服务;它是未为连接指定“真实”服务名称时使用的默认服务。我不确定您是否可以显式连接到它,因为网络侦听器没有注册它。您必须使用已向侦听器注册的服务名称或SID来接收远程连接。除了@pmdba注释外,请注意,在shell脚本中,每次出现“$”都是一个标记,指示替换名称紧跟“$”的变量的值。这就是您在$USERNAME、$PASSWORD、$HOST、$PORT中使用的内容。现在,考虑“Sys$UsAs”发生了什么,同样的令牌,您不需要密码中的$,也不希望密码中有“@”。“SID”这个词在这里有多种含义。您的
SYS\u CONTEXT
查询实际上返回的是会话标识符,而不是系统标识符。请尝试以下操作:SYS_CONTEXT('userenv','db_name')
@JonHeller:即使使用db_name,我们也会得到ORA-12514错误:(SID将与冒号一起出现:sqlplus“$USERNAME/$PASSWORD@/$HOST:$PORT:521”SYS$USERS是一个内部使用的特殊服务;它是“真实”时使用的默认服务未为连接指定服务名称。我不确定您是否可以显式连接到它,因为网络侦听器尚未注册它。您必须使用已向侦听器注册的服务名称或SID来接收远程连接。除了@pmdba注释外,请注意,在shell脚本中,“$”的每一次出现都是一个标记指示替换变量名的值“$$”。这就是你使用的用户名、密码、$HOST、$PATH。现在,考虑“Sys$用户”会发生什么,同样的令牌,你不需要密码中的$,也不需要密码中的“@”。“SID”一词。这里有多种含义。您的SYS\u CONTEXT
查询实际上返回的是会话标识符,而不是系统标识符。请尝试以下操作:SYS\u CONTEXT('userenv','db\u name')
@JonHeller:即使使用db\u name,我们也会得到ORA-12514错误:(