Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2024-08-19 GMT+08:00

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

Usar um driver ODBC para se conectar a um banco de dados (Linux)

  1. Carregue o pacote ODBC e o arquivo de código para o ambiente Linux e descompactá-los no diretório especificado.
  2. Efetue logon no ambiente Linux como usuário root.
  3. Prepare unixODBC.

    1. Descompacte o arquivo de código unixODBC.
      tar -xvf unixODBC-2.3.0.tar.gz
    2. 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.

  4. 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.)

    1. Descompacte o pacote dws_8.1.x_odbc_driver_for_x86_redhat.zip.
      unzip dws_8.1.x_odbc_driver_for_x86_redhat.zip
    2. Copie todos os arquivos no diretório lib para /usr/local/lib. Se houver arquivos com o mesmo nome, sobrescreva-os.
    3. Copie psqlodbcw.la e psqlodbcw.so no diretório odbc/lib para /usr/local/lib.

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

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

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

  8. Importe variáveis de ambiente.

    source ~/.bashrc

  9. 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)

  1. Descompacte o pacote de driver ODBC dws_odbc_driver_for_windows.zip (para Windows) e instale psqlodbc.msi.
  2. 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:
    1. Crie uma nova pasta chamada postgresql no diretório %APPDATA%\.
    2. 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.
    3. Copie cacert.pem para %APPDATA%\postgresql e altere o nome de cacert.pem para root.crt.

  3. 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).

  4. Configure uma fonte de dados a ser conectada.

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

    2. Clique em Test para verificar se a conexão está correta. Se Connection successful for exibida, a conexão está correta.

  5. 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);
     }