Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQLPLUS:如何使用默认服务SYS$USERS进行连接_Oracle_Sqlplus_Connect_Sid_Service Name - Fatal编程技术网

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

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命令连接到Oracle DB的遗留代码:

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错误:(