Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2024-06-12 GMT+08:00

Uso de ODBC para conectarse a un clúster

En GaussDB(DWS), puede utilizar un controlador de ODBC para conectarse a la base de datos. El controlador puede conectarse a la base de datos a través de un ECS en la plataforma de Huawei Cloud o a través de Internet.

Para obtener más información sobre cómo usar la ODBC API, consulte el documento oficial.

Prerrequisitos

Uso de un controlador ODBC para conectarse a una base de datos (Linux)

  1. Suba el paquete ODBC y el archivo de código al entorno Linux y descomprímalos en el directorio especificado.
  2. Inicie sesión en el entorno de Linux como usuario root.
  3. Prepare unixODBC.

    1. Descomprima el archivo de código unixODBC.
      tar -xvf unixODBC-2.3.0.tar.gz
    2. Compile el archivo de código e instale el controlador.
      1
      2
      3
      4
      cd unixODBC-2.3.0
      ./configure --enable-gui=no
      make
      make install
      
      • Después de compilar e instalar unixODBC, el archivo de biblioteca *.so.2 estará en el directorio de instalación. Para crear el archivo de biblioteca *.so.1, cambie LIB_VERSION en el archivo de configuración a 1:0:0.
        1
        LIB_VERSION="1:0:0"
        
      • Este controlador carga dinámicamente los archivos de biblioteca libodbcinst.so.*. Si uno de los archivos de biblioteca se carga correctamente, se carga el archivo de biblioteca. La prioridad de carga es libodbcinst.so > libodbcinst.so.1 > libodbcinst.so.1.0.0 > libodbcinst.so.2 > libodbcinst.so.2.0.0.

        Por ejemplo, un directorio puede vincularse dinámicamente a libodbcinst.so.1, libodbcinst.so.1.0.0 y libodbcinst.so.2. El archivo del controlador carga libodbcinst.so primero. Si libodbcinst.so no se encuentra en el entorno actual, el archivo del controlador busca libodbcinst.so.1 que tiene una prioridad más baja. Después de cargar el libodbcinst.so.1, la carga se completa.

  4. Reemplace el archivo del controlador. (Este documento usa el paquete dws_8.1.x_odbc_driver_for_x86_redhat.zip de Red Hat como ejemplo.)

    1. Descomprima el paquete dws_8.1.x_odbc_driver_for_x86_redhat.zip.
      unzip dws_8.1.x_odbc_driver_for_x86_redhat.zip
    2. Copie todos los archivos del directorio lib a /usr/local/lib. Si hay archivos con el mismo nombre, sobrescríbalos.
    3. Copie psqlodbcw.la y psqlodbcw.so en el directorio odbc/lib a /usr/local/lib.

  5. Ejecute el siguiente comando para modificar la configuración del archivo del controlador:

    vi /usr/local/etc/odbcinst.ini

    Copie el siguiente contenido en el archivo:

    [DWS] 
    Driver64=/usr/local/lib/psqlodbcw.so

    A continuación se enumeran los parámetros:

    • [DWS]: indica el nombre del controlador. Puede personalizar el nombre.
    • Driver64 o Driver: indica la ruta donde reside la biblioteca dinámica del controlador. Para un sistema operativo de 64 bits, busque primero Driver64. Si Driver64 no está configurado, busque Driver.

  6. Ejecute el siguiente comando para modificar el archivo de origen de datos:

    vi /usr/local/etc/odbc.ini

    Copie el siguiente contenido en el archivo de configuración, guarde la modificación y salga.

    [DWSODBC]
    Driver=DWS
    Servername=10.10.0.13
    Database=gaussdb
    Username=dbadmin
    Password=password
    Port=8000
    Sslmode=allow

    Parámetro

    Descripción

    Valor de ejemplo

    [DSN]

    Nombre de la fuente de datos.

    [DWSODBC]

    Driver

    Nombre del controlador, correspondiente a DriverName en odbcinst.ini.

    Driver=DWS

    Servername

    Dirección IP del servidor. Cuando el clúster está enlazado a un ELB, establezca este parámetro en la dirección IP del ELB.

    Servername=10.10.0.13

    Database

    Nombre de la base de datos a la que se conectará.

    Database=gaussdb

    Username

    Nombre de usuario de base de datos.

    Username=dbadmin

    Password

    Contraseña del usuario de la base de datos.

    Password=password

    Port

    Número de puerto del servidor.

    Port=8000

    Sslmode

    Modo de certificación SSL. Este parámetro está habilitado para el clúster de forma predeterminada.

    Valores y significados:

    • disable: solo intenta establecer una conexión que no sea SSL.
    • allow: primero intenta establecer una conexión no SSL y, a continuación, una conexión SSL si el intento falla.
    • prefer: primero intenta establecer una conexión SSL y luego una conexión no SSL si el intento falla.
    • require: solo intenta establecer una conexión SSL. Si hay un archivo de CA, realice la verificación de acuerdo con el escenario en el que el parámetro se establece en verificar-ca.
    • verify-ca: intenta establecer una conexión SSL y comprobar si el certificado de servidor es emitido por un CA de confianza.
    • verify-full: no soportado por GaussDB(DWS)
    NOTA:

    El modo SSL ofrece mayor seguridad que el modo común. De forma predeterminada, la función de SSL está habilitada en un clúster para permitir conexiones de SSL o no SSL desde el cliente. Se recomienda utilizar el modo SSL cuando se utiliza ODBC para conectarse a un clúster de GaussDB(DWS).

    Sslmode=allow

    Puede ver los valores de Servername y Port en la consola de gestión de GaussDB(DWS). Inicie sesión en la consola de gestión de GaussDB(DWS) y haga clic en Client Connections. En el área de Data Warehouse Connection String, seleccione el clúster de destino y obtenga Private Network Address o Public Network Address. Para obtener más información, véase Obtención de la dirección de conexión de clúster.

  7. Configure variables de entorno.

    vi ~/.bashrc

    Agregue la siguiente información al archivo de configuración:

    export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH 
    export ODBCSYSINI=/usr/local/etc 
    export ODBCINI=/usr/local/etc/odbc.ini

  8. Importe variables de entorno.

    source ~/.bashrc

  9. Ejecute el siguiente comando para conectar la base de datos:

    /usr/local/bin/isql -v DWSODBC

    Si se muestra la siguiente información, la conexión se realiza correctamente:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    +---------------------------------------+ 
    | Connected!                            | 
    |                                       | 
    | sql-statement                         | 
    | help [tablename]                      | 
    | quit                                  | 
    |                                       | 
    +---------------------------------------+  
    SQL> 
    

Uso de un controlador ODBC para conectarse a una base de datos (Windows)

  1. Descomprima el paquete de controladores ODBC dws_odbc_driver_for_windows.zip (para Windows) e instale psqlodbc.msi.
  2. Descomprima el paquete de certificado SSL para obtener el archivo de certificado.

    Puede optar por implementar el certificado de forma automática o manual según sus necesidades.

    Despliegue automático:

    Haga doble clic en el archivo sslcert_env.bat. El certificado se despliega automáticamente en una ubicación predeterminada.

    El archivo sslcert_env.bat garantiza la pureza del entorno de certificados. Cuando existe el directorio %APPDATA%\postgresql, se le pedirá un mensaje preguntándole si desea quitar los directorios relacionados. Si desea quitar los directorios relacionados, haga una copia de seguridad de los archivos en el directorio.

    Despliegue manual:
    1. Cree una nueva carpeta denominada postgresql en el directorio %APPDATA%\.
    2. Copie los archivos client.crt, client.key, client.key.cipher, and client.key.rand en el directorio %APPDATA%\postgresql y cambie client en el nombre de archivo a postgres. Por ejemplo, cambie el nombre de client.key a postgres.key.
    3. Copie cacert.pem to %APPDATA%\postgresql y cambie el nombre de cacert.pem to root.crt.

  3. Abra Driver Manager.

    GaussDB(DWS) proporciona controladores ODBC de 32 y 64 bits. Elija la versión adecuada para su sistema al configurar el origen de datos. (Supongamos que la unidad del sistema de Windows es la unidad C. Si se utiliza otra unidad de disco, modifique la ruta en consecuencia.)

    • Si desea desarrollar programas de 32 bits en el sistema operativo de 64 bits y ha instalado el controlador de 32 bits, abra el Driver Manager de 32 bits en C:\Windows\SysWOW64\odbcad32.exe.

      No seleccione Control Panel > System and Security > Administrative Tools > Data Sources (ODBC) directamente.

      WOW64 es el acrónimo de Windows 32-bit en Windows 64-bit. C:\Windows\SysWOW64\ almacena el entorno de 32 bits en un sistema de 64 bits.

    • Si desea desarrollar programas de 64 bits en el sistema operativo de 64 bits y ha instalado el controlador de 64 bits, abra el Administrador de controladores de 64 bits en C:\Windows\System32\odbcad32.exe.

      No seleccione Control Panel > System and Security > Administrative Tools > Data Sources (ODBC) directamente.

      C:\Windows\System32\ almacena el entorno de acuerdo con el sistema operativo actual. Para obtener información técnica, consulte los documentos técnicos de Windows.

    • En un sistema operativo de 32 bits, abra C:\Windows\System32\odbcad32.exe.

      Como alternativa, haga clic en Computer y elija Control Panel. Haga clic en Administrative Tools y haga clic en Data Sources (ODBC).

  4. Configure un origen de datos al que se conectará.

    1. En la ficha User DSN, haga clic en Add y elija PostgreSQL Unicode para la configuración.
      Figura 1 Configuración de un origen de datos al que se conectará

      Puede ver los valores de Server y Port en la consola de gestión de GaussDB(DWS). Inicie sesión en la consola de gestión de GaussDB(DWS) y haga clic en Client Connections. En el área de Data Warehouse Connection String, seleccione el clúster de destino y obtenga Private Network Address o Public Network Address. Para obtener más información, véase Obtención de la dirección de conexión de clúster.

    2. Haga clic en Test para comprobar que la conexión es correcta. Si se muestra Connection successful, la conexión es correcta.

  5. Compilar un programa de ejemplo ODBC para conectarse al origen de datos.

    La ODBC API no proporciona la capacidad de reintento de conexión de base de datos. Debe implementar el procesamiento de reintentos de conexión en el código de servicio.

    El código de ejemplo es el siguiente:

     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
    // 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);
     }