Olá pessoal!
Na ultima sexta-feira tive o imenso prazer de voltar a brincar na plataforma do pinguim. (Para quem não sabe fui um feliz sysadmin rodando Debian nos servidores e Ubuntu nas estações por 4 anos, depois de 6 meses usando Win Server nos servidores e WinXP nas estações pedi demição).
Tarefa: Fazer com que uma aplicação rodando sob Apache 2.2 + PHP 5 se connect em um servidor SQLServer 2005 como seu SGBD padrão. Até aí tudo bem, pensei se ambos os servidores estiverem na internet ta resolvido, a conexão vai ser via http mesmo, sem stress, ao invéz de usar mysql/mysqli uso mssql e boas, não ha muito de diferente a fazer.
Mas como sempre o manganal aqui se precipitiou no julgamento e descobriu que o SQL Server não estava disponível com um endereço http, como um estalo pensei "Vixe fudeu!".
Bom, comecei a juntar pedaços do que eu precisava saber para fazer com que o Ubuntu se conectasse via rede diretamente em um servidor SQL Server, e nessa pesquisa descobri o FreeTDS, que deixa essa tarefa bem mais fácil.
Com o passar dos anos, fui deixando de mecher com linux, depois que comprei um Mac, uso muito a linha de comando com Rails, mas nem se compara as aquelas incansáveis horas que passava na frente de uma tela preta, recompilando kernel e pacote, procurando .deb etc. Ai pensei, Ubuntu mamão com açucar, dou logo um sudo apt-get install FreeTDS ele faz tudo pra mim e eu saio pro abraço, afinal era sexta-feira a noite pô.
Novamente estava enganado, aparentemente a instalação via apt-get não funciona e não instala o pacote FreeTDS corretamente, foi assim que tirei a poeira das teclas M A K E. Hehehe, isso mesmo, a seguir vou dar o caminho para você baixar, compilar e installar o FreeTDS "compretim" como dizem os contarrâneos.
Ps: Não vou me apegar aos comandos do linux, nem na configuração do SQL Server, basta saber que o SQL Server deve estar aceitando conexões remotas, tenha um usuário e senha cadastrado (no meu caso usa a sa mesmo) e com os protocolos TCP/IP ativos e ouvindo a porta 1433
1 - Abra o terminal e no seu diretório home crie uma pasta chamada freetds.
mkdir -v freetds
2 - Dentro do diretorio freetds, digite o seguinte comando para obter a versão mais rescente do freetds
wget http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz
3 - Em seguinda extraia o arquivo com o comando
tar -zxvf freetds-stable.tgz
4 - Agora dentro do diretório com os fontes do freetds rode o seguinte comando (Esse comando demora um cadim)
sudo ./configure --with-tdsver=8.0
Essse comando ira compilar o freetds com suporte a versão 8.0 do tdserver, que é o que precisamos para conectar nas versões do SQL Server àpartir da 2000.
5 - Em seguida sudo make install para que ele instale o freetds no seu linux( nesse caso ubuntu 9.04 ).
Bom, a instalação do freetds está completa, para verificar se tudo está OK, basta dar um which tsql se ele te retornar /usr/local/bin/tsql seu danado foi instalado corretamente, mas ainda não esta acabado. Você precisa de outros pacotes para que o freetds funcione corretamente. Eestes não precisam ser compilados na unha como fizemos com o freetds, basta que você instale-os usando o bom e velho apt-get, eles são:
apt-get install tdsodbc unixodbc unixodbc-bin
Uffa, ok agora eu vou conectar naquele maldido sgbd embarcado? Nãaaaaaaao ainda não, precisamos configurar alguns scripts. (Nesse momento encontrei muita confusão no material que pesquisei na internet, sendo assim resolvi não usar nenhum deles, e criar os meus pŕoprios com base na documentação do freetds. Abaixo os arquivos necessários para a configuração, com as minhas configurações, o que for opcional vai estar com um #opcional na frente.
Arquivo: /etc/odbcinst.ini
[FreeTDS]
Description = Descrição para a configuração #opcional
Driver = /usr/lib/odbc/libtdsodbc.so
Driver64 = /usr/lib
Setup = /usr/lib/odbc/libtdsS.so
Setup64 = /usr/lib
UsageCount = 1
Arquivo: /etc/freetds/freetds.conf - Se seu arquivo não estiver vázio coloque o código abaixo após a ultima declaração do arquivo.
[SQLSERVER2005] #preste atenção nisso daqui, é importante, pode ser qualquer nome.
host = IP_DO_SERVIDOR
port = 1433
tds version = 8.0
E por fim:
Arquivo: /etc/odbc.ini
[SQLSERVER2005] #pode ser qualquer nome
Description = outra descrição da configuração #opcional
Driver = FreeTDS
Servername = SQLSERVER2005 #falei para prestar atenção, isso tem que ser igual ao que você colocou lá no freetds.conf
Database = seubanco #opcional
UID = seuusuario
PWD = suasenha
Port = 1433
Agora já posso conectar no danado do SQL Server? Pode, pode, pode agora pode, hehehehe. Como?
Se você quer só testar para saber se esta funcionando antes de começar a codificar alguma coisa, basta digitar o comando a seguir no terminal:
tsql -S IP_DO_SERVIDOR -U usuario -P senha
em seguida o os comandos
select @@version
go
algo assim deve lhe ser apresentado:
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
Nov 24 2008 13:01:59
Copyright (c) 1988-2005 Microsoft Corporation
Express Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
E assim, acaba essa confusão e tu pode começar a codificar seus sistemas para SQL Server sem problema. No meu caso Rails (tem umas outras para esse, melhor olhar aqui) e php.
Espero que ajude alguém, abraço gente.
Por: La Miscela
Fonte: http://www.lamiscela.net/2009/07/13/ubuntu-freetds-sql-server-2005-conectado/comment-page-1/#comment-54
Tomei a liberdade de complementar alguns passos:
Here are instructions for getting tsql and isql to play nice together. Apt-getting doesn't always get you all the tools you need to develop against SQLserver and Sybase. Gather some important packages
Download and extract FreeTDS
(Vesion of TDS changes sometimes)
Create a file named tds.driver.template with the following contents:
Register the driver with ODBC
On 64 bit Debian, I've run into the situation where freetds won't compile against the distribution's ODBC. To resolve this, it was necessary to compile and install a parallel ODBC and compile freetds against it.
If this is a server, you may not have a GUI, so don't try to compile with it
Now, follow the above instructions replacing the configure line for freetds with this:
Fonte: http://it.toolbox.com/wiki/index.php/Ubuntu_Debian_FreeTDS_ODBC
Na ultima sexta-feira tive o imenso prazer de voltar a brincar na plataforma do pinguim. (Para quem não sabe fui um feliz sysadmin rodando Debian nos servidores e Ubuntu nas estações por 4 anos, depois de 6 meses usando Win Server nos servidores e WinXP nas estações pedi demição).
Tarefa: Fazer com que uma aplicação rodando sob Apache 2.2 + PHP 5 se connect em um servidor SQLServer 2005 como seu SGBD padrão. Até aí tudo bem, pensei se ambos os servidores estiverem na internet ta resolvido, a conexão vai ser via http mesmo, sem stress, ao invéz de usar mysql/mysqli uso mssql e boas, não ha muito de diferente a fazer.
Mas como sempre o manganal aqui se precipitiou no julgamento e descobriu que o SQL Server não estava disponível com um endereço http, como um estalo pensei "Vixe fudeu!".
Bom, comecei a juntar pedaços do que eu precisava saber para fazer com que o Ubuntu se conectasse via rede diretamente em um servidor SQL Server, e nessa pesquisa descobri o FreeTDS, que deixa essa tarefa bem mais fácil.
Com o passar dos anos, fui deixando de mecher com linux, depois que comprei um Mac, uso muito a linha de comando com Rails, mas nem se compara as aquelas incansáveis horas que passava na frente de uma tela preta, recompilando kernel e pacote, procurando .deb etc. Ai pensei, Ubuntu mamão com açucar, dou logo um sudo apt-get install FreeTDS ele faz tudo pra mim e eu saio pro abraço, afinal era sexta-feira a noite pô.
Novamente estava enganado, aparentemente a instalação via apt-get não funciona e não instala o pacote FreeTDS corretamente, foi assim que tirei a poeira das teclas M A K E. Hehehe, isso mesmo, a seguir vou dar o caminho para você baixar, compilar e installar o FreeTDS "compretim" como dizem os contarrâneos.
Ps: Não vou me apegar aos comandos do linux, nem na configuração do SQL Server, basta saber que o SQL Server deve estar aceitando conexões remotas, tenha um usuário e senha cadastrado (no meu caso usa a sa mesmo) e com os protocolos TCP/IP ativos e ouvindo a porta 1433
1 - Abra o terminal e no seu diretório home crie uma pasta chamada freetds.
mkdir -v freetds
2 - Dentro do diretorio freetds, digite o seguinte comando para obter a versão mais rescente do freetds
wget http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz
3 - Em seguinda extraia o arquivo com o comando
tar -zxvf freetds-stable.tgz
4 - Agora dentro do diretório com os fontes do freetds rode o seguinte comando (Esse comando demora um cadim)
sudo ./configure --with-tdsver=8.0
Essse comando ira compilar o freetds com suporte a versão 8.0 do tdserver, que é o que precisamos para conectar nas versões do SQL Server àpartir da 2000.
5 - Em seguida sudo make install para que ele instale o freetds no seu linux( nesse caso ubuntu 9.04 ).
Bom, a instalação do freetds está completa, para verificar se tudo está OK, basta dar um which tsql se ele te retornar /usr/local/bin/tsql seu danado foi instalado corretamente, mas ainda não esta acabado. Você precisa de outros pacotes para que o freetds funcione corretamente. Eestes não precisam ser compilados na unha como fizemos com o freetds, basta que você instale-os usando o bom e velho apt-get, eles são:
apt-get install tdsodbc unixodbc unixodbc-bin
Uffa, ok agora eu vou conectar naquele maldido sgbd embarcado? Nãaaaaaaao ainda não, precisamos configurar alguns scripts. (Nesse momento encontrei muita confusão no material que pesquisei na internet, sendo assim resolvi não usar nenhum deles, e criar os meus pŕoprios com base na documentação do freetds. Abaixo os arquivos necessários para a configuração, com as minhas configurações, o que for opcional vai estar com um #opcional na frente.
Arquivo: /etc/odbcinst.ini
[FreeTDS]
Description = Descrição para a configuração #opcional
Driver = /usr/lib/odbc/libtdsodbc.so
Driver64 = /usr/lib
Setup = /usr/lib/odbc/libtdsS.so
Setup64 = /usr/lib
UsageCount = 1
Arquivo: /etc/freetds/freetds.conf - Se seu arquivo não estiver vázio coloque o código abaixo após a ultima declaração do arquivo.
[SQLSERVER2005] #preste atenção nisso daqui, é importante, pode ser qualquer nome.
host = IP_DO_SERVIDOR
port = 1433
tds version = 8.0
E por fim:
Arquivo: /etc/odbc.ini
[SQLSERVER2005] #pode ser qualquer nome
Description = outra descrição da configuração #opcional
Driver = FreeTDS
Servername = SQLSERVER2005 #falei para prestar atenção, isso tem que ser igual ao que você colocou lá no freetds.conf
Database = seubanco #opcional
UID = seuusuario
PWD = suasenha
Port = 1433
Agora já posso conectar no danado do SQL Server? Pode, pode, pode agora pode, hehehehe. Como?
Se você quer só testar para saber se esta funcionando antes de começar a codificar alguma coisa, basta digitar o comando a seguir no terminal:
tsql -S IP_DO_SERVIDOR -U usuario -P senha
em seguida o os comandos
select @@version
go
algo assim deve lhe ser apresentado:
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
Nov 24 2008 13:01:59
Copyright (c) 1988-2005 Microsoft Corporation
Express Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
E assim, acaba essa confusão e tu pode começar a codificar seus sistemas para SQL Server sem problema. No meu caso Rails (tem umas outras para esse, melhor olhar aqui) e php.
Espero que ajude alguém, abraço gente.
Here are instructions for getting tsql and isql to play nice together. Apt-getting doesn't always get you all the tools you need to develop against SQLserver and Sybase. Gather some important packages
apt-get install libtool bison autotools-dev g++ build-essential tcsh unixodbc-dev tdsodbc
Download and extract FreeTDS
wget ftp://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz tar xzvf freetds-stable.tgz
(Vesion of TDS changes sometimes)
cd freetds-0.82/ ./configure --prefix=/usr --sysconfdir=/etc --with-unixodbc=/usr --with-tdsver=8.0 make && make install clean
Create a file named tds.driver.template with the following contents:
[FreeTDS] Description = v0.82 with protocol v8.0 Driver = /usr/lib/libtdsodbc.so
Register the driver with ODBC
odbcinst -i -d -f tds.driver.template
On 64 bit Debian, I've run into the situation where freetds won't compile against the distribution's ODBC. To resolve this, it was necessary to compile and install a parallel ODBC and compile freetds against it.
wget http://www.unixodbc.org/unixODBC-2.2.14.tar.gz tar xvf unixODBC-2.2.14.tar cd unixODBC-2.2.14
If this is a server, you may not have a GUI, so don't try to compile with it
./configure --enable-gui=no make make install
Now, follow the above instructions replacing the configure line for freetds with this:
./configure --prefix=/usr --sysconfdir=/etc --with-unixodbc=/usr/local --with-tdsver=8.0
Fonte: http://it.toolbox.com/wiki/index.php/Ubuntu_Debian_FreeTDS_ODBC
Comentários
locale is "pt_BR.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Error 20009 (severity 9):
Unable to connect: Adaptive Server is unavailable or does not exist
OS error 111, "Conexão recusada"
There was a problem connecting to the server
Saberia me dizer qual é o problema? uso o Ubuntu 10.04 LTS - Lucid Lynx e o SQL server é o SQLserver 2005.
Meu e-mail hericax@gmail.com
obrigado.
locale is "pt_BR.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Error 20009 (severity 9):
Unable to connect: Adaptive Server is unavailable or does not exist
OS error 111, "Conexão recusada"
There was a problem connecting to the server
Alguma resolução para isso?