Procurando uma boa documentação dos arquivos odbc.ini e odbcinst.ini no Linux

11

Vi informações parciais, informações antigas, mas nada tão bom quanto os arquivos de amostra reais com breves comentários que tenho localmente.

Eu preciso entender a relação exata entre odbc.inie odbcinst.ini. Superficialmente, é bastante óbvio - no topo do odbc.iniarquivo há uma seção como:

[ODBC Data Sources]
MYDSN = MyDriverName
...

No entanto, não tenho certeza se posso, por exemplo, ter configurações na seção driver ou DSN.

1) Eu tenho uma linha Driver = /path/to/file/.sonos dois arquivos e os valores às vezes diferem. Isso faz algum sentido? Se sim, qual prevalece?

2) É odbcinst.inium "protótipo" semelhante ao JavaScript odbc.ini? Em outras palavras, se estou criando vários DSNs com configurações comuns, posso promover configurações comuns de odbc.inipara odbcinst.ini?

3) Qual é a diferença entre Drivere Setupem odbcinst.ini? Eles parecem ter os mesmos valores. Essas configurações são específicas do banco de dados ou são universais?

Leonid
fonte
unixodbc.org/doc
PersianGulf
Eu acho que o link acima ajudaria a responder. Pense nisso: se você configurar um arquivo odbc.ini para a fonte de dados ORACLE, como o sistema sabe o que é o ORACLE, é isso que o odbcinst.ini define. Isso pode ser apenas local para um conjunto específico de caminhos / software, em vez de "em todo o sistema".
Schrute

Respostas:

9

Eu uso FreeTDSem Debianconectar um phpwebsite -driven a um MS-SQL Server 2005banco de dados.

A explicação que posso dar aos arquivos de configuração:

/etc/odbc.ini

Contém a instância mencionada no manipulador (por exemplo php) que se conecta ao banco de dados (veja o exemplo abaixo). A configuração define o servidor ao qual ele precisa se conectar.

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

-

/etc/odbcinst.ini

Mantém a configuração da Driverseção em 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 exemplo para demonstrar como eu configuro e uso a conexão.

  $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..

Tenho certeza de que há muitas outras variáveis ​​que podem ser definidas e usadas, mas esta é a explicação mais simples que posso dar sobre os arquivos que você perguntou.

CAPTCHA
fonte
4

Se você observar apenas as implementações do Unix, terá algumas idéias interessantes sobre como o ODBC funciona. Nenhuma dessas implementações é 100% comparável à implementação de referência no Windows, produzida pelo mantenedor da especificação ODBC, ou seja, Microsoft .

Existem dois gerenciadores de driver ODBC comumente encontrados no Unix. O iODBC , cuja documentação relevante para esta pergunta está aqui , é mantido e suportado pelo meu empregador. O UnixODBC é o outro, e foi discutido em outras respostas. Elas devem ser equivalentes à API e à implementação do Windows, pois ambas são implementações independentes de plataforma do padrão.

Em termos simples, odbcinst.inié um arquivo de registro e configuração para drivers ODBC em um ambiente, enquanto odbc.inié um arquivo de registro e configuração para DSNs ODBC (nomes de fonte de dados), geralmente baseados em drivers registrados no outro.

Você teve algumas perguntas específicas ...

1) Eu tenho uma linha Driver = /path/to/file/.sonos dois arquivos e os valores às vezes diferem. Isso faz algum sentido? Se sim, qual prevalece?

O Driver = /path/to/file.sogeralmente deve ser o mesmo em ambos os arquivos quando ambos são expressos como caminhos. Em odbc.ini, essa entrada pode ser Driver = {name of driver}onde o nome está indexado odbcinst.ini. De um modo geral, as configurações odbc.iniprevalecem sobre as configurações conflitantes, odbcinst.inise existirem.

2) É odbcinst.inium "protótipo" semelhante ao JavaScript odbc.ini? Em outras palavras, se estou criando vários DSNs com configurações comuns, posso promover configurações comuns de odbc.inipara odbcinst.ini?

Não, odbcinst.ininão é um "protótipo" dessa maneira. odbcinst.inias configurações são relevantes para o driver , mas não para os DSNs baseados nesse driver.

3) Qual é a diferença entre Drivere Setupem odbcinst.ini? Eles parecem ter os mesmos valores. Essas configurações são específicas do banco de dados ou são universais?

Em odbcinst.ini, Driver =refere-se à biblioteca de drivers e Setup =à biblioteca de instalação. O último é totalmente opcional e, quando existe, pode mas não precisa ser usado durante uma conexão de dados; destina-se principalmente ao uso de um Administrador ODBC ao "configurar" essas conexões, para serem salvas como DSNs. Às vezes, essas bibliotecas são encontradas no mesmo arquivo físico, mas não precisam estar e, por exemplo, normalmente não estão no ambiente OS X.

TallTed
fonte
1

Ok, diferença simples entre odbcinst.ini e odbc.ini do site unixodbc, que é o primeiro hit no google:

O arquivo do sistema odbcinst.ini contém informações sobre os drivers ODBC disponíveis para todos os usuários e o arquivo odbc.ini contém informações sobre os DSNs disponíveis para todos os usuários. Esses "DSNs do sistema" são úteis para aplicativos como servidores Web que podem não estar sendo executados como um usuário real e, portanto, não terão um diretório inicial para conter um arquivo .odbc.ini.

Ahmed Masud
fonte
Obrigado. Esqueci de mencionar que deduzi muito disso da sintaxe - de fato, todo DSN deve especificar um driver no topo do odbc.ini com a sintaxe {DSN} = {Driver}, mas ainda estou muito confuso.
Leonid
0

Os manuais devem estar aqui (clique Manualsentão User Manual). Infelizmente, os links para Administrator Manuale o Programmer Manualestão quebrados. (Eu relatei isso e me disseram que eles serão corrigidos.)

Então por agora...

Os manuais ausentes são encontrados baixando o unixODBC-2.3.4.tar.gz em http://www.unixodbc.org/ e, em seguida, abra-o com o gerenciador de arquivos (ou algo semelhante) e veja estes três manuais:

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