我有一个继承的遗留VB6应用程序。我面临的问题是我得到了臭名昭着的
ORA-12638: Credential retrieval failed
每当它尝试连接到我们的某个Oracle数据库时出现错误消息。但是,我可以从SQLPlus和Toad连接好。我已经用Google搜索了,似乎每个人都说将sqlnet.ora文件修改为
SQLNET.AUTHENTICATION_SERVICES=(NONE)
做了这个伎俩。我还没有找到任何人有替代修复。这是我的连接字符串的样子:
"PROVIDER=OraOLEDB.Oracle;DATA SOURCE=(DESCRIPTION = " & _
"(ADDRESS = (PROTOCOL = TCP)(HOST = server1)
(PORT = 1521))" & _
"(ADDRESS = (PROTOCOL = TCP)(HOST = server2)
(PORT = 1521))" & _
"(LOAD_BALANCE = yes) " & _
"(CONNECT_DATA = " & _
"(SERVER = DEDICATED) " & _
"(SERVICE_NAME = database_name_here) " & _
") " & _
"); " & _
"User Id=username_here;Password=password_here;"
至于我的VB代码,它很简单。
Private oracleDatabaseConnection As ADODB.Connection
Set oracleDatabaseConnection = New ADODB.Connection
oracleDatabaseConnection.Open oracleConnectionString
有人有什么想法吗?
谢谢。 :)
答案 0 :(得分:40)
我知道这是一篇非常古老的帖子,但我找到了一个对我有用的解决方案(Legacy VB6 Application):
更改sqlnet.ora文件中的以下条目:
Original Entry - SQLNET.AUTHENTICATION_SERVICES= (NTS)
Modified Entry - SQLNET.AUTHENTICATION_SERVICES= (NONE)
以下是解决方案的LINK
答案 1 :(得分:5)
老实说,这是许多不同根问题可能导致的错误之一。
假设您的数据库服务器是Windows,请检查其事件日志,包括系统和应用程序。你可能会发现有用的东西。
我在某些情况下遇到此错误,因为运行Oracle服务的帐户已被锁定。
在我们从未找到解释的情况下,我也遇到过这种情况,但我们总是能够通过让用户锁定并解锁他们的PC来解决问题。
VB应用程序是否在与可以连接的客户端不同的机器上运行?如果是这样,是否可以在同一台机器上使用不同的客户端程序进行测试 - 或者是否可以在您的机器上尝试VB应用程序?
答案 2 :(得分:2)
知道这是一个老问题,但它已经开始出现在最近的Windows更新中。 轻松解决它的方法是设置
SQLNET.AUTHENTICATION_SERVICES= (NONE)
在sqlnet.ora中。
答案 3 :(得分:1)
如果您在IIS下运行Web应用程序,则重新启动IIS似乎有所帮助。但这是一个没有太多理由背后的问题的傻瓜。
答案 4 :(得分:0)
我在Windows 10专业版64位(西班牙语版)上安装了32位Oracle Database 11g Express Edition。
重启PC后一切正常。
但是第二天,使用SQL * PLus和SQLTools 1.9 build 15会出错:
ORA-12638: Credential retrieval failed
我将sqlnet.ora文件修改为:
SQLNET.AUTHENTICATION_SERVICES= (NONE)
现在我可以使用SQLPlus,SQLTools 1.9 build 15进行连接。
答案 5 :(得分:0)
如果使用 IIS 和 VB 应用程序,在 ODBC 管理器中创建一个新的数据源并在连接字符串中按名称(而不是提供程序)引用它可能会有所帮助。
例如,如果数据源的名称是“test_ds”,我会替换
ObjConn.open "Provider=MSDAORA;User ID=myuser;password=mypassword;Data Source=MYDATASOURCEFROMTNSNAMES;Persist Security Info=False"
为了
ObjConn.open "dsn=test_ds;pwd=mypassword"
无法真正解释解决方案背后的逻辑,但它对我有用。