Auf der Suche nach einer guten Dokumentation der Dateien odbc.ini und odbcinst.ini unter Linux


11

Ich habe Teilinformationen gesehen, alte Informationen, aber nichts ist so gut wie die tatsächlichen Beispieldateien mit kurzen Kommentaren, die ich lokal habe.

Ich muss die genaue Beziehung zwischen odbc.iniund verstehen odbcinst.ini. Oberflächlich gesehen ist es ziemlich offensichtlich - oben in der odbc.iniDatei befindet sich ein Abschnitt wie:

[ODBC Data Sources]
MYDSN = MyDriverName
...

Ich bin mir jedoch nicht sicher, ob ich beispielsweise Einstellungen entweder im Treiber- oder im DSN-Bereich vornehmen kann.

1) Ich habe eine Zeile Driver = /path/to/file/.soin beiden Dateien und die Werte unterscheiden sich manchmal. Macht das überhaupt Sinn? Wenn ja, welche herrscht vor?

2) Ist odbcinst.iniein JavaScript-ähnlicher "Prototyp" für odbc.ini? Mit anderen Worten, wenn ich eine Reihe von DSNs mit gemeinsamen Einstellungen erstelle, kann ich gemeinsame Einstellungen von odbc.iniin heraufstufen odbcinst.ini?

3) Was ist der Unterschied zwischen Driverund Setupin odbcinst.ini? Sie scheinen die gleichen Werte zu haben. Sind diese Einstellungen datenbankspezifisch oder universell?



Ich denke, der obige Link würde helfen, zu antworten. Denken Sie darüber nach: Wenn Sie eine odbc.ini-Datei für die ORACLE-Datenquelle konfigurieren, woher weiß das System, was ORACLE ist, und definiert dies in der Datei odbcinst.ini. Dies kann nur lokal für einen bestimmten Satz von Pfaden / Software sein, anstatt "systemweit".
Schrute

Antworten:


9

Ich verwende FreeTDSon Debian, um eine phpgesteuerte Website mit einer MS-SQL Server 2005Datenbank zu verbinden .

Die Erklärung, die ich den Konfigurationsdateien geben kann:

/etc/odbc.ini

Enthält die Instanz, auf die im Handler verwiesen wird (z. B. php), der eine Verbindung zur Datenbank herstellt (siehe Beispiel unten). Die Konfiguration definiert den Server, zu dem eine Verbindung hergestellt werden muss.

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

- -

/etc/odbcinst.ini

Enthält die Konfiguration für den DriverAbschnitt in 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

Beispielcode php, um zu demonstrieren, wie ich die Verbindung eingerichtet und verwendet habe.

  $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);
  }

etc .. etc ..

Ich bin sicher, dass es viele andere Variablen gibt, die festgelegt und verwendet werden können, aber dies ist die einfachste Erklärung, die ich für die Dateien geben kann, nach denen Sie gefragt haben.


4

Wenn Sie sich nur Unix-Implementierungen ansehen, erhalten Sie einige interessante Ideen zur Funktionsweise von ODBC. Keine dieser Implementierungen ist zu 100% mit der Referenzimplementierung unter Windows vergleichbar, die vom Betreuer der ODBC-Spezifikation, dh Microsoft, erstellt wurde .

Unter Unix gibt es zwei ODBC-Treibermanager. iODBC , dessen Dokumentation für diese Frage relevant ist , wird von meinem Arbeitgeber gepflegt und unterstützt. UnixODBC ist das andere und wurde in anderen Antworten diskutiert. Diese sollen APIs sein, die einander und der Windows-Implementierung entsprechen, da beide plattformunabhängige Implementierungen des Standards sind.

In einfachen Worten, odbcinst.iniist eine Registrierungs- und Konfigurationsdatei für ODBC-Treiber in einer Umgebung, während odbc.inies sich um eine Registrierungs- und Konfigurationsdatei für ODBC-DSNs (Datenquellennamen) handelt, die normalerweise auf in der anderen registrierten Treibern basiert.

Sie hatten einige spezifische Fragen ...

1) Ich habe eine Zeile Driver = /path/to/file/.soin beiden Dateien und die Werte unterscheiden sich manchmal. Macht das überhaupt Sinn? Wenn ja, welche herrscht vor?

Die Driver = /path/to/file.sosollten in beiden Dateien im Allgemeinen gleich sein, wenn beide als Pfade ausgedrückt werden. In odbc.inikann sich dieser Eintrag stattdessen dort befinden, Driver = {name of driver}wo der Name wie indiziert ist odbcinst.ini. Im Allgemeinen haben Einstellungen odbc.iniVorrang vor widersprüchlichen Einstellungen, odbcinst.iniwenn solche vorhanden sind.

2) Ist odbcinst.iniein JavaScript-ähnlicher "Prototyp" für odbc.ini? Mit anderen Worten, wenn ich eine Reihe von DSNs mit gemeinsamen Einstellungen erstelle, kann ich gemeinsame Einstellungen von odbc.iniin heraufstufen odbcinst.ini?

Nein, odbcinst.iniist auf diese Weise kein "Prototyp". odbcinst.iniEinstellungen sind für den Treiber relevant , jedoch nicht für die auf diesem Treiber basierenden DSNs .

3) Was ist der Unterschied zwischen Driverund Setupin odbcinst.ini? Sie scheinen die gleichen Werte zu haben. Sind diese Einstellungen datenbankspezifisch oder universell?

In odbcinst.inider Driver =bezieht sich auf die Treiberbibliothek, und Setup =zum Setup - Bibliothek. Letzteres ist völlig optional, und wenn es vorhanden ist, kann es während einer Datenverbindung verwendet werden, muss es aber nicht. Es ist in erster Linie für die Verwendung durch einen ODBC-Administrator beim "Einrichten" solcher Verbindungen vorgesehen, um als DSNs gespeichert zu werden. Manchmal befinden sich diese Bibliotheken in derselben physischen Datei, müssen es aber nicht sein und befinden sich beispielsweise normalerweise nicht in der OS X-Umgebung.


1

Okay, einfacher Unterschied zwischen odbcinst.ini und odbc.ini von der unixodbc- Site, die der erste Treffer bei Google ist:

Die Systemdatei odbcinst.ini enthält Informationen zu ODBC-Treibern, die allen Benutzern zur Verfügung stehen, und die Datei odbc.ini enthält Informationen zu DSNs, die allen Benutzern zur Verfügung stehen. Diese "System-DSNs" sind nützlich für Anwendungen wie Webserver, die möglicherweise nicht als echter Benutzer ausgeführt werden und daher kein Basisverzeichnis für eine .odbc.ini-Datei haben.


Vielen Dank. Ich habe vergessen zu erwähnen, dass ich so viel aus der Syntax abgeleitet habe - tatsächlich muss jeder DSN einen Treiber ganz oben in odbc.ini mit der Syntax {DSN} = {Driver} angeben, aber ich bin immer noch sehr verwirrt.
Leonid

0

Die Handbücher sollen hier sein ( Manualsdann klicken User Manual). Aber leider sind die Links für Administrator Manualund die Programmer Manualkaputt. (Ich habe dies gemeldet und mir wurde gesagt, dass sie repariert werden.)

Also für jetzt...

Die fehlenden Handbücher werden gefunden, indem Sie unixODBC-2.3.4.tar.gz von http://www.unixodbc.org/ herunterladen und dann mit dem Archivmanager (oder ähnlichem) öffnen und diese drei Handbücher ansehen:

/doc/AdministratorManual/index.html
/doc/ProgrammerManual/index.html
/doc/ProgrammerManual/Tutorial/index.html
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.