Eu instalei uma instância do DB2 dentro de um contêiner Docker. Agora estou tentando conectar a ele a partir de um aplicativo Golang simples, usando o Windows 11 x64, mas recebo este erro:
Erro ao conectar ao banco de dados: falha ao executar ping no banco de dados: SQLDriverConnect: {IM002} [Microsoft][Driver Manager ODBC] Nome da fonte de dados não encontrado e driver padrão não especificado.
Tentei baixar um driver DB2 da IBM ( https://www.ibm.com/support/pages/db2-odbc-cli-driver-download-and-installation-information ), descompactei/instalei em C:/Program Files, adicionei à minha variável env PATH, reiniciei meu pc. Depois disso, ainda não vejo o driver na lista de drivers do "ODBC Data Source Administrator".
Este é meu código para a conexão:
import (
"database/sql"
"fmt"
_ "github.com/alexbrainman/odbc"
)
func ConnectDB() (*sql.DB, error) {
connStr := "DATABASE=TEST1;HOSTNAME=localhost;PORT=50000;PROTOCOL=TCPIP;UID=db2inst1;PWD=db2inst1;"
db, err := sql.Open("odbc", connStr)
if err != nil {
return nil, fmt.Errorf("failed to open database: %v", err)
}
if err = db.Ping(); err != nil {
return nil, fmt.Errorf("failed to ping database: %v", err)
}
fmt.Println("Connected to DB2 database!")
return db, nil
}
E este é meu main.go:
import (
"database/sql"
"go-db-check/db"
"log"
)
func main() {
database, err := db.ConnectDB()
if err != nil {
log.Fatalf("Error connecting to database: %v", err)
}
defer func(database *sql.DB) {
closeErr := database.Close()
if closeErr != nil {
log.Println("Error during connection shutdown: ", err)
}
}(database)
}
Suponho que você queira executar go no ms-windows e conectar-se do golang a um banco de dados Db2 que esteja em um contêiner docker.
Use a interface da IBM para go, disponível em https://github.com/ibmdb/go_ibm_db
Vale a pena e é essencial compreender completamente todos os detalhes do leia-me e fazer o programa de exemplo da IBM funcionar.
Esta interface baixará automaticamente um driver odbc chamado "clidriver" (ele faz isso por padrão). Esse é um driver odbc de instalação zero e tamanho pequeno para Db2 que você pode operar com quase nenhuma configuração externa ou, alternativamente, pode configurar por meio de um arquivo xml chamado
db2dsdriver.cfg
. Ele não tem GUI, mas oferece ferramentas de linha de comando para configurá-lo, solucionar problemas e várias outras funções (como testar conectividade, obter informações de versão etc.). As ferramentas clidriver estão todas documentadas no principal centro de conhecimento do Db2 on-line em muitas páginas diferentes acessíveis indiretamente em https://www.ibm.com/docs/en/db2/11.5?topic=dsd-installing-data-server-driver-odbc-cli-software-windows-operating-systemsAo programar em go, você escolhe incluir a sequência de conexão completa dentro do seu script go ou incluir apenas um DSN (com todos os outros detalhes de conexão armazenados externamente em db2dsdriver.cfg, que você pode configurar com um editor de texto ou, alternativamente, por meio de linhas de comando especiais descritas aqui https://www.ibm.com/docs/en/db2/11.5?topic=commands-db2cli-db2-interactive-cli )
Ao começar, geralmente é mais fácil colocar a string de conexão inteira dentro do seu script go (pois isso significa que nenhuma configuração externa é necessária), mas isso pode não ser adequado para uso empresarial.
Se você precisar da ferramenta odbcad32 do MS-windows para mostrar a configuração adequada dos DSNs (
db2cli -setup
... edb2cli registerdsn
...) pode ajudar. Mas isso é opcional.Separadamente, você precisa garantir que a configuração do Docker exponha um número de porta na qual a instância do Db2 esteja escutando e que esse número de porta (mapeado) esteja aberto para tráfego TCP de entrada/saída no firewall do software MS Windows, e que você faça referência ao número de porta correto na sua sequência de conexão ou no arquivo de configuração externo.