Uso do ODBC para conectar-se a um cluster
No GaussDB(DWS), você pode usar um driver ODBC para se conectar ao banco de dados. O driver pode se conectar ao banco de dados por meio de um ECS na plataforma da Huawei Cloud ou pela Internet.
Para obter detalhes sobre como usar a API de ODBC, consulte o documento oficial.
Pré-requisitos
- Você baixou os pacotes de driver ODBC dws_x.x.x_odbc_driver_for_xxx.zip (para Linux) e dws_odbc_driver_for_windows.zip (para Windows). Para mais detalhes, consulte Baixa do driver JDBC ou ODBC.
GaussDB(DWS) também suporta driver ODBC de código aberto: PostgreSQL ODBC 09.01.0200 ou mais recente.
- Você baixou o arquivo de código unixODBC de código aberto 2.3.0 de https://sourceforge.net/projects/unixodbc/files/unixODBC/2.3.0/unixODBC-2.3.0.tar.gz/download.
- Você baixou o arquivo do certificado SSL. Para obter detalhes, consulte Baixa de um certificado SSL.
Usar um driver ODBC para se conectar a um banco de dados (Linux)
- Carregue o pacote ODBC e o arquivo de código para o ambiente Linux e descompactá-los no diretório especificado.
- Efetue logon no ambiente Linux como usuário root.
- Prepare unixODBC.
- Descompacte o arquivo de código unixODBC.
tar -xvf unixODBC-2.3.0.tar.gz
- Compile o arquivo de código e instale o driver.
1 2 3 4
cd unixODBC-2.3.0 ./configure --enable-gui=no make make install
- Depois que o unixODBC for compilado e instalado, o arquivo de biblioteca *.so.2 estará no diretório de instalação. Para criar o arquivo de biblioteca *.so.1, altere LIB_VERSION no arquivo de configuração para 1:0:0.
1
LIB_VERSION="1:0:0"
- Este driver carrega dinamicamente os arquivos da biblioteca libodbcinst.so.*. Se um dos arquivos de biblioteca for carregado com sucesso, o arquivo de biblioteca será carregado. A prioridade de carregamento é libodbcinst.so > libodbcinst.so.1 > libodbcinst.so.1.0.0 > libodbcinst.so.2 > libodbcinst.so.2.0.0.
Por exemplo, um diretório pode ser vinculado dinamicamente a libodbcinst.so.1, libodbcinst.so.1.0.0 e libodbcinst.so.2. O arquivo de driver carrega libodbcinst.so primeiro. Se libodbcinst.so não puder ser encontrado no ambiente atual, o arquivo de driver procurará por libodbcinst.so.1, que tem uma prioridade mais baixa. Depois que libodbcinst.so.1 é carregado, o carregamento está completo.
- Depois que o unixODBC for compilado e instalado, o arquivo de biblioteca *.so.2 estará no diretório de instalação. Para criar o arquivo de biblioteca *.so.1, altere LIB_VERSION no arquivo de configuração para 1:0:0.
- Descompacte o arquivo de código unixODBC.
- Substitua o arquivo do driver. (Este documento usa o pacote dws_8.1.x_odbc_driver_for_x86_redhat.zip da Red Hat como exemplo.)
- Descompacte o pacote dws_8.1.x_odbc_driver_for_x86_redhat.zip.
unzip dws_8.1.x_odbc_driver_for_x86_redhat.zip
- Copie todos os arquivos no diretório lib para /usr/local/lib. Se houver arquivos com o mesmo nome, sobrescreva-os.
- Copie psqlodbcw.la e psqlodbcw.so no diretório odbc/lib para /usr/local/lib.
- Descompacte o pacote dws_8.1.x_odbc_driver_for_x86_redhat.zip.
- Execute o seguinte comando para modificar a configuração do arquivo de driver:
vi /usr/local/etc/odbcinst.ini
Copie o seguinte conteúdo ao arquivo:
[DWS] Driver64=/usr/local/lib/psqlodbcw.so
Os parâmetros são os seguintes:
- [DWS]: indica o nome do driver. Você pode personalizar o nome.
- Driver64 ou Driver: indica o caminho onde a biblioteca dinâmica do driver reside. Para um sistema operacional de 64 bits, procure Driver64 primeiro. Se Driver64 não estiver configurado, procure por Driver.
- Execute o seguinte comando para modificar o arquivo de origem de dados:
vi /usr/local/etc/odbc.ini
Copie o seguinte conteúdo para o arquivo de configuração, salve a modificação e saia.
[DWSODBC] Driver=DWS Servername=10.10.0.13 Database=gaussdb Username=dbadmin Password=password Port=8000 Sslmode=allow
Parâmetro
Descrição
Exemplo de valor
[DSN]
Nome da fonte de dados.
[DWSODBC]
Driver
Nome do driver, correspondente a DriverName em odbcinst.ini.
Driver=DWS
Servername
Endereço IP do servidor. Quando o cluster estiver vinculado a um ELB, defina esse parâmetro como o endereço IP do ELB.
Servername=10.10.0.13
Database
Nome do banco de dados ao qual será conectado.
Database=gaussdb
Username
Nome de usuário do banco de dados.
Username=dbadmin
Password
Senha do usuário do banco de dados.
Password=password
Port
Número da porta do servidor.
Port=8000
Sslmode
Modo de certificação SSL. Este parâmetro é ativado para o cluster por padrão.
Valores e significados:
- disable: apenas tenta estabelecer uma conexão não-SSL.
- allow: tenta estabelecer uma conexão não-SSL primeiro e, em seguida, uma conexão SSL se a tentativa falhar.
- prefer: tenta estabelecer uma conexão SSL primeiro e, em seguida, uma conexão não-SSL se a tentativa falhar.
- require: apenas tenta estabelecer uma conexão SSL. Se houver um arquivo de AC, execute a verificação de acordo com o cenário no qual o parâmetro está definido como verify-ca.
- verify-ca: tenta estabelecer uma conexão SSL e verifica se o certificado do servidor é emitido por uma AC confiável.
- verify-full: não suportado pelo GaussDB(DWS)
NOTA:O modo SSL oferece maior segurança do que o modo comum. Por padrão, a função de SSL é habilitada em um cluster para permitir conexões SSL ou não-SSL do cliente. É aconselhável usar o modo SSL ao usar o ODBC para se conectar a um cluster do GaussDB(DWS).
Sslmode=allow
Você pode ver os valores de Servername e Port no console de gerenciamento do GaussDB(DWS). Efetue logon no console de gerenciamento do GaussDB(DWS) e clique em Client Connections. Na área Data Warehouse Connection String, selecione o cluster de destino e obtenha Private Network Address ou Public Network Address. Para mais detalhes, consulte Obtenção do endereço de conexão do cluster.
- Configure variáveis de ambiente.
vi ~/.bashrc
Adicione as seguintes informações ao arquivo de configuração:
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH export ODBCSYSINI=/usr/local/etc export ODBCINI=/usr/local/etc/odbc.ini
- Importe variáveis de ambiente.
source ~/.bashrc
- Execute os seguintes comandos para se conectar ao banco de dados:
/usr/local/bin/isql -v DWSODBC
Se as informações a seguir forem exibidas, a conexão será bem-sucedida:
1 2 3 4 5 6 7 8 9
+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>
Usar um driver ODBC para se conectar a um banco de dados (Windows)
- Descompacte o pacote de driver ODBC dws_odbc_driver_for_windows.zip (para Windows) e instale psqlodbc.msi.
- Descompacte o pacote de certificados SSL para obter o arquivo de certificado.
Você pode optar por implantar o certificado automaticamente ou manualmente com base em suas necessidades.
Implementação automática:
Clique duas vezes no arquivo sslcert_env.bat. O certificado é implementado automaticamente em um local padrão.
O arquivo sslcert_env.bat garante a pureza do ambiente de certificado. Quando o diretório %APPDATA%\postgresql existir, uma mensagem será exibida perguntando se você deseja remover diretórios relacionados. Se você quiser remover diretórios relacionados, faça backup dos arquivos no diretório.
Implementação manual:- Crie uma nova pasta chamada postgresql no diretório %APPDATA%\.
- Copie os arquivos client.crt, client.key, client.key.cipher e client.key.rand para o diretório %APPDATA%\postgresql e altere o client no nome do arquivo para postgres. Por exemplo, altere o nome de client.key para postgres.key.
- Copie cacert.pem para %APPDATA%\postgresql e altere o nome de cacert.pem para root.crt.
- Abra o Driver Manager.
GaussDB(DWS) fornece drivers ODBC de 32 e 64 bits. Escolha a versão adequada para o seu sistema ao configurar a fonte de dados. (Suponha que a unidade de sistema do Windows seja a unidade C. Se outra unidade de disco for usada, modifique o caminho de acordo.)
- Se você quiser desenvolver programas de 32 bits no sistema operacional de 64 bits e tiver instalado o driver de 32 bits, abra o Driver Manager de 32 bits em C:\Windows\SysWOW64\odbcad32.exe.
Não escolha Control Panel > System and Security > Administrative Tools > Data Sources (ODBC) diretamente.
WOW64 é o acrônimo para Windows de 32 bits no Windows de 64 bits. C:\Windows\SysWOW64\ armazena o ambiente de 32 bits em um sistema de 64 bits.
- Se você quiser desenvolver programas de 64 bits no sistema operacional de 64 bits e tiver instalado o driver de 64 bits, abra o Driver Manager de 64 bits em C:\Windows\System32\odbcad32.exe.
Não escolha Control Panel > System and Security > Administrative Tools > Data Sources (ODBC) diretamente.
C:\Windows\System32\ armazena o ambiente consistente com o sistema operacional atual. Para obter detalhes técnicos, consulte Documentos técnicos do Windows.
- Em um sistema operacional de 32 bits, abra C:\Windows\System32\odbcad32.exe.
Como alternativa, clique em Computer e escolha Control Panel. Clique em Administrative Tools e em Data Sources (ODBC).
- Se você quiser desenvolver programas de 32 bits no sistema operacional de 64 bits e tiver instalado o driver de 32 bits, abra o Driver Manager de 32 bits em C:\Windows\SysWOW64\odbcad32.exe.
- Configure uma fonte de dados a ser conectada.
- Na guia User DSN, clique em Add e escolha PostgreSQL Unicode para configuração.
Figura 1 Configurar uma fonte de dados a ser conectada
Você pode visualizar os valores de Server e Port no console de gerenciamento do GaussDB(DWS). Efetue logon no console de gerenciamento do GaussDB(DWS) e clique em Client Connections. Na área Data Warehouse Connection String, selecione o cluster de destino e obtenha Private Network Address ou Public Network Address. Para mais detalhes, consulte Obtenção do endereço de conexão do cluster.
- Clique em Test para verificar se a conexão está correta. Se Connection successful for exibida, a conexão está correta.
- Na guia User DSN, clique em Add e escolha PostgreSQL Unicode para configuração.
- Compile um programa de amostra de ODBC para conectar-se à fonte de dados.
A API do ODBC não fornece o recurso de repetição de conexão de banco de dados. Você precisa implementar o processamento de nova tentativa de conexão no código de serviço.
O código de exemplo é o seguinte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
// This example shows how to obtain GaussDB(DWS) data through the ODBC driver. // DBtest.c (compile with: libodbc.so) #include <stdlib.h> #include <stdio.h> #include <sqlext.h> #ifdef WIN32 #include <windows.h> #endif SQLHENV V_OD_Env; // Handle ODBC environment SQLHSTMT V_OD_hstmt; // Handle statement SQLHDBC V_OD_hdbc; // Handle connection char typename[100]; SQLINTEGER value = 100; SQLINTEGER V_OD_erg,V_OD_buffer,V_OD_err,V_OD_id; int main(int argc,char *argv[]) { // 1. Apply for an environment handle. V_OD_erg = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&V_OD_Env); if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) { printf("Error AllocHandle\n"); exit(0); } // 2. Set environment attributes (version information). SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); // 3. Apply for a connection handle. V_OD_erg = SQLAllocHandle(SQL_HANDLE_DBC, V_OD_Env, &V_OD_hdbc); if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) { SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); } // 4. Set connection attributes. SQLSetConnectAttr(V_OD_hdbc, SQL_ATTR_AUTOCOMMIT, SQL_AUTOCOMMIT_ON, 0); // 5. Connect to a data source. You do not need to enter the username and password if you have configured them in the odbc.ini file. If you have not configured them, specify the name and password of the user who wants to connect to the database in the SQLConnect function. V_OD_erg = SQLConnect(V_OD_hdbc, (SQLCHAR*) "gaussdb", SQL_NTS, (SQLCHAR*) "", SQL_NTS, (SQLCHAR*) "", SQL_NTS); if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) { printf("Error SQLConnect %d\n",V_OD_erg); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); } printf("Connected !\n"); // 6. Set statement attributes. SQLSetStmtAttr(V_OD_hstmt,SQL_ATTR_QUERY_TIMEOUT,(SQLPOINTER *)3,0); // 7. Apply for a statement handle. SQLAllocHandle(SQL_HANDLE_STMT, V_OD_hdbc, &V_OD_hstmt); // 8. Executes an SQL statement directly. SQLExecDirect(V_OD_hstmt,"drop table IF EXISTS testtable",SQL_NTS); SQLExecDirect(V_OD_hstmt,"create table testtable(id int)",SQL_NTS); SQLExecDirect(V_OD_hstmt,"insert into testtable values(25)",SQL_NTS); // 9. Prepare for execution. SQLPrepare(V_OD_hstmt,"insert into testtable values(?)",SQL_NTS); // 10. Bind parameters. SQLBindParameter(V_OD_hstmt,1,SQL_PARAM_INPUT,SQL_C_SLONG,SQL_INTEGER,0,0, &value,0,NULL); // 11. Execute the ready statement. SQLExecute(V_OD_hstmt); SQLExecDirect(V_OD_hstmt,"select id from testtable",SQL_NTS); // 12. Obtain the attributes of a certain column in the result set. SQLColAttribute(V_OD_hstmt,1,SQL_DESC_TYPE,typename,100,NULL,NULL); printf("SQLColAtrribute %s\n",typename); // 13. Bind the result set. SQLBindCol(V_OD_hstmt,1,SQL_C_SLONG, (SQLPOINTER)&V_OD_buffer,150, (SQLLEN *)&V_OD_err); // 14. Collect data using SQLFetch. V_OD_erg=SQLFetch(V_OD_hstmt); // 15. Obtain and return data using SQLGetData. while(V_OD_erg != SQL_NO_DATA) { SQLGetData(V_OD_hstmt,1,SQL_C_SLONG,(SQLPOINTER)&V_OD_id,0,NULL); printf("SQLGetData ----ID = %d\n",V_OD_id); V_OD_erg=SQLFetch(V_OD_hstmt); }; printf("Done !\n"); // 16. Disconnect from the data source and release handles. SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt); SQLDisconnect(V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); return(0); }