OracleClient+;与.NET的无故障连接

OracleClient+;与.NET的无故障连接,.net,oracle,database-connection,ora-12514,.net,Oracle,Database Connection,Ora 12514,我们使用System.Data.OracleClient和抽象基类DbConnection、DbCommand(etc)连接到Oracle 这种连接在我们的开发阶段运行良好。在转移过程中,我们遇到错误ORA-12514:TNS:listener当前不知道连接描述符中请求的服务 我们的目标是在不使用TNS条目的情况下进行连接,并在连接字符串中提供所有相关信息(www.connectionstrings.com/oracle#19) 我可以确认SQL plus将从登台服务器连接到所需的模式(侦听器正

我们使用System.Data.OracleClient和抽象基类DbConnection、DbCommand(etc)连接到Oracle

这种连接在我们的开发阶段运行良好。在转移过程中,我们遇到错误ORA-12514:TNS:listener当前不知道连接描述符中请求的服务

我们的目标是在不使用TNS条目的情况下进行连接,并在连接字符串中提供所有相关信息(www.connectionstrings.com/oracle#19)

我可以确认SQL plus将从登台服务器连接到所需的模式(侦听器正在侦听)。挂接到SQLPlus中的TNS条目匹配正在生成的查询字符串的所有凭据

SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort))(CONNECT_DATA=(SERVICE_NAME=MyOracleSID)));uid=myUsername;pwd=myPassword;
我们错过的服务器上有安装吗?我们可以调整的东西


非常感谢您的帮助。

如果我没记错的话,我也遇到了同样的问题,直到我改用Oracle providers和OracleDbConnection以及OracleDbCommand。在所有情况下,通用的提供者并不总是实例化正确的提供者。

Microsoft不推荐使用System.Data.OracleClient
请参阅本文:

SID不是服务名称。服务名称通常是完全限定的数据库名称,而SID是一个短标识符

服务名称可能是dbname.company.com,而SID为dbname。一个实例实际上可以有多个与之关联的服务名称,但只有一个SID


将连接字符串中的服务名称更改为SID,或为服务名称选项指定服务名称。

如果Oracle客户端的版本为10+,也可以使用(代表)。然后,您的连接字符串将如下所示:

"Data Source=MyHost:MyPort/MyServiceName;User ID=myUserName;Password=myPassword"

与之相结合,它让Oracle的使用感觉近乎专业

嗯。。。我确实具体实例化了OracleDbConnection。我使用的句柄是基类,所以我不确定为什么这会是一个问题。DbConnection conn=新的OracleConnection(str);事实上,这很有帮助。谢谢,罗布。很高兴我能帮上忙。在我意识到区别之前,我的头撞了很多墙。SID是系统上的物理实例名,对应于运行该实例的操作系统服务。服务名称是数据库的逻辑名称。它比SID更灵活,因为只需使新实例的服务名称与旧实例的服务名称相同,就可以对客户端透明地替换另一个实例。它还可以用于负载平衡,因为您可以有多个具有相同服务名称的实例。实例的默认服务名称是实例名称,该名称与点和db_域连接在一起。