如何修复[unixODBC] [驱动程序管理器]未找到的数据源名称,并且未指定默认驱动程序(ODBC ::错误)

时间:2014-01-20 15:21:45

标签: ruby-on-rails ruby-on-rails-3 odbc unixodbc

/local/rvm/gems/ruby-1.9.2-p320/gems/activerecord-sqlserver-adapter-3.2.12/lib/active_record/connection_adapters/sqlserver_adapter.rb:455:in `initialize': IM002 (0) [unixODBC][Driver Manager]Data source name not found, and no default driver specified (ODBC::Error)

我有我的应用程序的工作副本,但突然间我离开了我的系统,这个错误开始浮出水面。有谁能告诉你如何解决这个问题?

4 个答案:

答案 0 :(得分:9)

由于您没有给我们任何工作,因此您的问题没有明确的答案。

然而,可能的原因是:

  1. 在您的用户或系统odbc.ini文件中找不到您指定的DSN 运行odbcinst -j以查找这些文件的位置 有人改变/删除了吗?

  2. 您将ODBCINI env var或ODBCSYSINI env var设置为指向odbc.ini和odbcinst.ini文件位置的unixODBC,现在它们未设置(或更改)。

  3. 有人删除或移动了您的ODBC驱动程序

  4. 您通常以用户A的身份运行代码,现在您以用户B的身份运行它,并且您正在使用用户数据源或设置ODBCINI env var。

  5. ...可能是其他人,但如果你给了我们更好的信息,我们就不用猜了。

答案 1 :(得分:7)

您应该从setting up and configuring FreeTDS开始。以下是我的文件中的示例配置,但我确定其他变体也可以使用。一个区别是我使用Django,但下面的结果最终仍然有效,但是使用SQL身份验证比使用Windows身份验证更好。

来自/etc/freetds/freetds.conf(如果DNS未对服务器名称有效,请使用服务器的IP)。

# A typical Microsoft server
[MyServer]
        host = 10.0.0.10\path
        port = 1433
        tds version = 7.0

来自/etc/odbcinst.ini

[FreeTDS]
Description = FreeTDS
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

来自/etc/odbc.ini

[ServerDSN]
Description = "Some Description"
Driver = FreeTDS
ServerName = MyServer
Server = ip_address
Port = 1433
Database = DBNAME

然后这个命令将我连接到数据库。

tsql -S MyServer -U username@servername -P password

答案 2 :(得分:0)

只是一个提示,在我的情况下,无法使用Driver = FreeTDS以及odbc.ini中的两个变量“servername”和“server”。我只允许“server = ip”和 “Driver = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so”,工作正常。

答案 3 :(得分:0)

请验证以下内容:

  1. 驱动程序配置文件名为odbcinst.ini,与odbc.ini位于同一路径/目录/文件夹中。
  2. ODBC初始化路径是路径/目录,而不是文件的实际路径(即/root/odbc.ini)。请提供odbcinst.ini和odbc.ini文件都存在的目录路径。
  3. odbcinst.ini中定义的驱动程序名称与odbc.ini数据源中定义的Driver属性相同。
  4. 注意:如果odbcinst.ini的驱动程序定义为“ [SQL Server ODBC驱动程序13]”,则验证odbc.ini引用“ SQL Server的驱动程序= ODBC驱动程序13”

这解决了我的问题。

来源:https://support.microfocus.com/kb/doc.php?id=7017884