Buscando una buena documentación de los archivos odbc.ini y odbcinst.ini en Linux

11

Vi información parcial, información antigua, pero nada tan bueno como los archivos de muestra reales con breves comentarios que tengo localmente.

Necesito entender la relación exacta entre odbc.iniy odbcinst.ini. Superficialmente es bastante obvio: en la parte superior del odbc.iniarchivo hay una sección como:

[ODBC Data Sources]
MYDSN = MyDriverName
...

Sin embargo, no estoy seguro si puedo, por ejemplo, tener configuraciones en el controlador o en la sección DSN.

1) Tengo una línea Driver = /path/to/file/.soen ambos archivos y los valores a veces difieren. ¿Esto tiene sentido? Si es así, ¿cuál prevalece?

2) ¿ odbcinst.iniPara odbc.iniqué sirve un "prototipo" similar a JavaScript ? En otras palabras, si estoy creando una serie de DSN con configuraciones comunes, ¿puedo promover configuraciones comunes desde odbc.inidentro odbcinst.ini?

3) ¿Cuál es la diferencia entre Drivery Setupen odbcinst.ini? Parecen tener los mismos valores. ¿Estas configuraciones son específicas de la base de datos o son universales?

Leonid
fuente
unixodbc.org/doc
PersianGulf
Creo que el enlace de arriba ayudaría a responder. Piénselo, si configura un archivo odbc.ini para el origen de datos ORACLE, ¿cómo sabe el sistema qué es ORACLE? Esto es lo que define odbcinst.ini. Esto puede ser local para un conjunto específico de rutas / software, en lugar de "todo el sistema".
Schrute

Respuestas:

9

Yo uso FreeTDSen Debianconectar una phppágina web impulsada a una MS-SQL Server 2005base de datos.

La explicación que puedo dar a los archivos de configuración:

/etc/odbc.ini

Contiene la instancia a la que se hace referencia dentro del controlador (p php. Ej. ) Que se conecta a la base de datos (consulte el ejemplo a continuación). La configuración define el servidor al que necesita conectarse.

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

-

/etc/odbcinst.ini

Mantiene la configuración para la Driversección en 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

phpCódigo de ejemplo para demostrar cómo configuro y uso la conexión.

  $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étera etcétera..

Estoy seguro de que hay muchas otras variables que se pueden configurar y usar, pero esta es la explicación más simple que puedo dar de los archivos que solicitó.

captcha
fuente
4

Si solo observa las implementaciones de Unix, obtendrá algunas ideas interesantes sobre cómo funciona ODBC. Ninguna de estas implementaciones es 100% comparable a la implementación de referencia en Windows, producida por el responsable de la especificación ODBC, es decir, Microsoft .

Hay dos administradores de controladores ODBC que se encuentran comúnmente en Unix. iODBC , cuya documentación relevante para esta pregunta está aquí , es mantenida y respaldada por mi empleador. UnixODBC es el otro, y se discutió en otras respuestas. Se supone que son API equivalentes entre sí y para la implementación de Windows, ya que ambas son implementaciones independientes de la plataforma del estándar.

En términos simples, odbcinst.inies un archivo de registro y configuración para controladores ODBC en un entorno, mientras que odbc.inies un archivo de registro y configuración para DSN de ODBC (nombres de origen de datos), generalmente basado en controladores registrados en el otro.

Tenías algunas preguntas específicas ...

1) Tengo una línea Driver = /path/to/file/.soen ambos archivos y los valores a veces difieren. ¿Esto tiene sentido? Si es así, ¿cuál prevalece?

En Driver = /path/to/file.sogeneral, debería ser el mismo en ambos archivos cuando ambos se expresan como rutas. En odbc.ini, esta entrada puede ser Driver = {name of driver}donde el nombre está indexado odbcinst.ini. En términos generales, las configuraciones odbc.iniprevalecen sobre las configuraciones conflictivas en odbcinst.inicaso de que existan.

2) ¿ odbcinst.iniPara odbc.iniqué sirve un "prototipo" similar a JavaScript ? En otras palabras, si estoy creando una serie de DSN con configuraciones comunes, ¿puedo promover configuraciones comunes desde odbc.inidentro odbcinst.ini?

No, odbcinst.inino es un "prototipo" de esta manera. odbcinst.inila configuración es relevante para el controlador , pero no para los DSN basados ​​en ese controlador.

3) ¿Cuál es la diferencia entre Drivery Setupen odbcinst.ini? Parecen tener los mismos valores. ¿Estas configuraciones son específicas de la base de datos o son universales?

En odbcinst.ini, se Driver =refiere a la biblioteca de controladores y Setup =a la biblioteca de configuración. Este último es completamente opcional, y cuando existe, puede pero no necesita ser usado durante una conexión de datos; está destinado principalmente para que lo use un administrador de ODBC cuando "configura" tales conexiones, para guardarlas como DSN. A veces, estas bibliotecas se encuentran en el mismo archivo físico, pero no es necesario que estén, y, por ejemplo, normalmente no se encuentran en el entorno OS X.

TallTed
fuente
1

Bien, simple diferencia entre odbcinst.ini y odbc.ini del sitio unixodbc , que es el primer éxito en google:

El archivo del sistema odbcinst.ini contiene información sobre los controladores ODBC disponibles para todos los usuarios, y el archivo odbc.ini contiene información sobre los DSN disponibles para todos los usuarios. Estos "DSN de sistema" son útiles para aplicaciones como servidores web que pueden no estar ejecutándose como un usuario real y, por lo tanto, no tendrán un directorio de inicio para contener un archivo .odbc.ini.

Ahmed Masud
fuente
Gracias. Olvidé mencionar que deduje mucho de la sintaxis; de hecho, cada DSN debe especificar un controlador en la parte superior de odbc.ini con la sintaxis {DSN} = {Driver}, pero todavía estoy muy confundido.
Leonid
0

Se supone que los manuales están aquí (haga clic Manualsluego User Manual). Pero desafortunadamente los enlaces para Administrator Manualy Programmer Manualestán rotos. (He informado esto y me dijeron que se solucionarán).

Así que por ahora...

Los manuales que faltan se encuentran descargando unixODBC-2.3.4.tar.gz de http://www.unixodbc.org/ y luego ábralo con el administrador de archivos (o similar) y mire estos tres manuales:

/doc/AdministratorManual/index.html
/doc/ProgrammerManual/index.html
/doc/ProgrammerManual/Tutorial/index.html
Vista elíptica
fuente