ORA-12560: TNS:protocol adapter error
报错信息
使用VB.net 连接Oracle DB时, 遇到以下两个报错:
ORA-12560: TNS:protocol adapter error, TNS: 协议适配器错误The 'OraOLEDB.Oracle' provider is not registered on the local machine.
前期基础检查
先检查一些基础的配置是否有问题。如 配置的DB Connect String
- Oracle DB Connect String 的信息 是否与 TNS文件(
tnsnames.ora)设定的 是否一致。 - Oracle DB Connect String 是否配置有误等等。
- 例如
<add key="CommonDB" value="Provider=OraOLEDB.Oracle;Data Source=testDB;User Id =test;password=test"/>
<!--缺少了 [Data Source=]-->
<add key="CommonDB" value="Provider=OraOLEDB.Oracle;testDB;User Id =test;password=test"/>
DB Connect String 缺少了 Data Source=, 也会报错:ORA-12560: TNS:protocol adapter error,
进一下检查,其他解决方法
一:检查监听口是否开启。在开始-运行,输入services.msc或者在控制面板-管理工具,进入服务。找到OracleOraDb11g_home1TNSListener,检查是否开启。
二:检查实例的服务是否开启。同步骤1,进入服务,找到OracleService数据库名,检查是否开启。
二:找到xxxxx\product\11.2.0\dbhome_1\NETWORK\ADMIN文件夹下的listener.ora文件和tnsnames.ora文件
查看
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
即HOST=xxxxxx都修改成为HOST = localhost 或者是当前ip地址(地址可能和本机地址不匹配)
重新执行lsnrctl start
The ‘OraOLEDB.Oracle’ provider is not registered on the local machine的原因
在网上查了一下是OraOLEDB.dll 没有注册到注册表中。
找到11g相应的OraOLEDB11.dll所在位置,在命令行中进行注册
regsvr32 app/<user>/product/11.1.0/db_1/BIN/OraOLEDB11.dll (dll的路徑)
这种情况有3种可能的原因
1.装Oracle 的机器是不是NTFS的?如果是的话,将/Ora81下的BIN的权限,全部放开,给所有用户。
(不然在B/S结构下会因为没有权限访问目录而报这个错误)
2.如果数据库服务器是Oracle816的。在服务器的那台机器上找Ora81/network/ADMIN下的sqlnet.ora文件,把里面的
SQLNET.AUTHENTICATION_SERVICES= (NTS)改成
SQLNET.AUTHENTICATION_SERVICES= (NONE)
(这种会造成某些机器上报驱动初始化失败的错误,在用OracleClient下出现过一次)
3.如果以上都没有解决问题。可以考虑是不是注册表里的注册真的丢失了。(可能性比较小,windows还是比较安全的)
regsvr32 …/ORACLE_HOME/bin/OraOLEDB.dll
再不行可以重装一下客户端试试。

本文介绍了在VB.net中遇到ORA-12560: TNS:protocol adapter error和OraOLEDB.Oracle provider is not registered on the local machine错误时的解决办法。首先检查DB Connect String是否正确,其次确认Oracle服务和监听口是否开启。针对OraOLEDB.Oracle提供者未注册的问题,可能的原因包括权限问题、sqlnet.ora配置错误或注册表注册丢失,可通过修改配置、注册dll或重装客户端来解决。
2306

被折叠的 条评论
为什么被折叠?



