在Linux上寻找odbc.ini和odbcinst.ini文件的良好文档


11

我看到了部分信息,旧信息,但没有实际的样本文件以及本地的简短注释那样好。

我需要了解odbc.ini和之间的确切关系odbcinst.ini。从表面上看,这是很明显的-在odbc.ini文件的顶部,有一个部分:

[ODBC Data Sources]
MYDSN = MyDriverName
...

但是,我不确定是否可以在驱动程序或DSN部分中进行设置。

1)我Driver = /path/to/file/.so在两个文件中都有一行,有时值会有所不同。这有道理吗?如果是这样,哪个占上风?

2)是odbcinst.ini类似于JavaScript的“原型” odbc.ini吗?换句话说,如果我要创建许多具有通用设置的DSN,可以将通用设置从升级odbc.iniodbcinst.ini吗?

3)DriverSetupin有odbcinst.ini什么区别?它们似乎具有相同的价值。这些设置是特定于数据库的还是通用的?



我认为上面的链接将有助于回答。仔细考虑一下,如果为ORACLE数据源配置odbc.ini文件,系统如何知道ORACLE是什么,这就是odbcinst.ini定义的。这可能只是特定于一组路径/软件的局部,而不是“系统范围的”。
Schrute 2014年

Answers:


9

我使用FreeTDSDebian的连接php驱动的网站到一个MS-SQL Server 2005数据库。

我可以给配置文件的解释:

/etc/odbc.ini

保存在php连接到数据库的处理程序(例如)内引用的实例(请参见下面的示例)。该配置定义了它需要连接到的服务器。

[freetds_odbc_connection]
Driver          =       FreeTDS
Description     =       test
Database        =       MyCompanyDb
Server          =       frodo
Readonly        =       Yes
Port            =       1433
Trace           =       No

--

/etc/odbcinst.ini

在中保存该Driver部分的配置odbc.ini

[FreeTDS]
Description     = TDS connection
Driver          = /usr/lib/odbc/libtdsodbc.so
Setup           = /usr/lib/odbc/libtdsS.so
UsageCount      = 1
FileUsage       = 1
Trace           = Yes
TraceFile       = /tmp/odbcinst_tr

--

show-companies.php

示例php代码演示了如何设置和使用连接。

  $host="freetds_odbc_connection";
  $user="freetds";
  $password="secretpassword";
  $conn_id = odbc_connect($host, $user ,$password) or die (odbc_errormsg());

  $sql_companies =  "SELECT * from AMGR_Client_Tbl WHERE Record_Type='1'";

  $query_companies = odbc_exec($conn_id, $sql_companies);
  while (odbc_fetch_row($query_companies))
  {
    $client_id     = odbc_result($query_companies, 6);
    $company_name  = odbc_result($query_companies, 9);
  }

等..等等

我确定还有很多其他变量可以设置和使用,但这是我对所要询问的文件的最简单的解释。


4

如果仅查看Unix实现,您将获得有关ODBC如何工作的一些有趣的想法。这些实现都不能与ODBC规范的维护者Microsoft所生产的Windows上的参考实现100%相提并论。

在Unix上通常有两种ODBC驱动程序管理器。 iODBC相关文档在此处,由我的雇主维护和支持。 另一个是UnixODBC,其他答案中对此进行了讨论。这些都是彼此等同的API,并且等同于Windows实现,因为两者都是与该平台无关的标准实现。

简而言之,odbcinst.ini是环境中ODBC驱动程序odbc.ini的注册表和配置文件,而ODBC DSN(数据源名称)的注册表和配置文件通常基于在另一个驱动程序中注册的驱动程序。

您有几个具体问题...

1)我Driver = /path/to/file/.so在两个文件中都有一行,有时值会有所不同。这有道理吗?如果是这样,哪个占上风?

Driver = /path/to/file.so当两个文件都表示为路径时,通常在两个文件中的都应相同。在中odbc.ini,此条目可能是Driver = {name of driver}在中建立索引的地方odbcinst.ini。一般而言,存在odbc.ini冲突的设置优先于冲突设置odbcinst.ini

2)是odbcinst.ini类似于JavaScript的“原型” odbc.ini吗?换句话说,如果我要创建许多具有通用设置的DSN,可以将通用设置从升级odbc.iniodbcinst.ini吗?

不,odbcinst.ini不是这种方式的“原型”。odbcinst.ini设置与驱动程序相关,但与基于该驱动程序的DSN无关。

3)DriverSetupin有odbcinst.ini什么区别?它们似乎具有相同的价值。这些设置是特定于数据库的还是通用的?

在中odbcinst.iniDriver =指向驱动程序库和Setup =设置库。后者是完全可选的,并且当确实存在时,可以但不必在数据连接过程中使用它。它主要供ODBC管理员在“设置”此类连接时使用,以保存为DSN。有时,这些库位于同一物理文件中,但不一定需要找到它们,例如,通常不在OS X环境中。


1

好吧,unixodbc网站上的odbcinst.ini和odbc.ini之间的简单区别是google上的第一个热门产品:

系统文件odbcinst.ini包含有关所有用户均可使用的ODBC驱动程序的信息,而odbc.ini文件包含有关所有用户均可使用的DSN的信息。这些“系统DSN”对于诸如Web服务器之类的应用程序很有用,这些应用程序可能没有以真实用户身份运行,因此没有主目录来包含.odbc.ini文件。


谢谢。我忘了提到我从语法中得出的结论-实际上,每个DSN都必须使用{DSN} = {Driver}语法在odbc.ini的最上方指定一个驱动程序,但我仍然很困惑。
列昂尼德

0

这些手册应该在这里(单击,Manuals然后单击User Manual)。 但是很遗憾,Administrator Manual和的链接Programmer Manual已断开。(我已经报告了此事,并被告知他们将对其进行修复。)

所以现在

可从http://www.unixodbc.org/下载unixODBC-2.3.4.tar.gz ,然后使用存档管理器(或类似工具)将其打开,然后查看以下三本手册,以找到缺少的手册:

/doc/AdministratorManual/index.html
/doc/ProgrammerManual/index.html
/doc/ProgrammerManual/Tutorial/index.html
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.