我正在将.Net 4.6.2应用程序从使用Microsoft的System.Data.OracleClient迁移到Oracle自己的托管ODP.Net(Nuget包,版本12.2.11)以连接到Oracle数据库。我安装了Oracle客户端(11gR2),除了更改引用,使用子句,类型名称等,代码几乎相同。但是,虽然我的迁移前代码非常愉快地连接,但迁移后的代码将无法连接。相反,它会抛出OracleException
$config['sess_save_path'] = BASEPATH . 'cache/';
tnsnames.ora文件是相同的,应用程序的连接字符串是相同的,我以前从未需要指定服务名称。
TNSNAMES.ORA:
ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA.
连接字符串:
ORACLEDBSERVER2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = OracleDBServer2)(PORT = 1521))
)
(CONNECT_DATA =
(SID = orcdb10g)
(SERVER = DEDICATED)
)
为什么要求服务名称?即使我向CONNECT_DATA部分USER ID=MATTESTNHADMIN;PASSWORD=XXXXX;DATA SOURCE=oracledbserver2
添加了一个子句,我也会得到同样的错误。
答案 0 :(得分:1)
我认为您的程序找不到tnsnames.ora
文件。与旧驱动程序不同,ODP.NET托管驱动程序不会从Registy读取TNS_ADMIN
值。
请参阅此答案https://stackoverflow.com/a/28283924/3027266,了解ODP.NET托管驱动程序如何查找tnsnames.ora
文件。
注意,当您使用ODP.NET托管驱动程序时,您不必再安装任何其他Oracle客户端。