Oracle的SID和服务名;连接问题

7
我正在尝试通过SQL Developer连接到远程Oracle数据库。我将连接详细信息复制到了tnsnames中,我可以连接到数据库。
但是我有另一个与SQL Developer相同的数据库应用程序,当我尝试进行连接时,一直出现以下错误。该应用程序使用需要主机名和SID的Oracle JDBC Thin客户端。
我得到了以下错误:
java.sql.SQLException:侦听器拒绝了连接,并显示以下错误: ORA-12505,TNS:侦听器当前不知道在连接描述符中给定的SID
在排除故障时,我更改了SQL Developer中的tns选项,并选择基本选项以找出问题所在。我发现我能够连接到它是因为正确的服务名称,但是即使通过SQL Developer也无法通过SID名称连接到数据库。
我使用了一些数据库查询来查找SID名称,但仍然出现相同的错误。请帮助我进行故障排除。
感谢您的时间。

你能给我们提供在SQLDeveloper和应用程序中使用的连接字符串吗?如果需要,可以将IP地址留空! - KeyNone
连接 = (描述 = (地址 =(协议= TCP)(主机=)(端口= 1521)) (地址 =(协议= TCP)(主机=)(端口= 1521)) (负载平衡= 是) (连接数据 = (服务器= 专用) (服务名称=) (故障转移模式= (类型= 选择) (方法= 基本) (重试次数= 180) (延迟= 5) ) ) ) - user1751356
你说只能使用服务名连接,但在上面的连接字符串中并未指定服务名。你是如何得到这个连接字符串的?你是否尝试在应用程序中使用此连接字符串,并将服务名指定为与您在Sqldeveloper中指定的相同值? - Piotr Dobrogost
2个回答

11

ORA-12505表示您的客户端传递了一个在服务器端的监听程序完全未识别的SID。

在10G及以上版本中,您可以像这样使用EZ连接而无需配置服务器端:

sqlplus hr@liverpool:1521/DEMO

hr is the user name
liverpool is the server name
1521 is the port the listener for the DB is listening on
DEMO is the database SID

(或者)

如果您仍要使用tnsnames.ora,请尝试从客户端运行tnsping SID。

在LINUX上,您还可以让ORACLE从本地路径读取tnsnames.ora文件-只需将TNS_ADMIN设置为tnsnames.ora文件所在的目录。

否则,您需要在客户端的$ORACLE_HOME/network/admin中配置tnsnames.ora。


如果您需要知道数据库SID,请使用以下命令:

select sys_context('userenv','db_name') from dual;

请参阅此URL:

检查Oracle SID和数据库名称


我只有连接描述,其中指定了服务名称、主机名和端口。我不确定确切的SID名称。我也无法访问v$视图。有没有办法运行查询并找出实际的SID。 - user1751356
是的,我做了那个。它返回了一个值,我把它用作SID。但我仍然遇到同样的问题 :( - user1751356
你的连接字符串中有 (SERVICE_NAME = )。ORACLE 将会寻找一个已定义该服务的监听器;你是否尝试将 SID 放入其中,如 (SERVICE_NAME = your_db_sid)? - A B
确保连接字符串与运行数据库的DBA所提供的相匹配。请向DBA询问在服务器上运行tnsping SID并尝试其结果。 - A B

1

我也遇到了这个问题。使用 Oracle 11.2.0.1 的 Linux 系统。

我发现连接字符串必须是:

sqlplus hr@liverpool:1521:DEMO

和不是

sqlplus hr@liverpool:1521/DEMO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接