2012-03-19 20 views
9

Hola He configurado las configuraciones de DSN para vertica en Ubuntu 10.10 máquina de 32 bits. La configuración está bien y la he verificado.unixODBC dando error al ejecutar isql [Vertica]

Aquí está mi archivo odbc.ini:

[VerticaDSN] 
    Description = VerticaDSN ODBC driver 
    Driver = /opt/vertica/lib/libverticaodbc_unixodbc.so 
    Servername = myservername 
    Database = mydbname 
    Port = 5433 
    UserName = myuname 
    Password = ******* 
    Locale = en_US 

mismo modo que tienen un archivo odbcinst.ini.

cuando ejecuto el comando: isql -v VerticaDSN me sale el siguiente error:

[S1000][unixODBC][DSI] The error message NoSQLGetPrivateProfileString could not be found in the en-US locale. Check that /en-US/ODBCMessages.xml exists. 
[ISQL]ERROR: Could not SQLConnect. 

He intentado todo pero no soy capaz de descifrar este error.

Cualquier ayuda será muy apreciada.

+0

Qué versiones del controlador de base de datos y Vertica se ejecuta? Además, normalmente no especifico la configuración regional en mis conexiones ODBC. ¿Estás seguro de que lo necesitas? Esto parece más un error de localización que un error del usuario para mí, pero podría estar equivocado. – bpanulla

+0

Lo eliminé en vano. Estoy usando el controlador vertica_5.1.1_odbc_i386_linux vertica en este momento. Rastreé la instrucción isql pero sigue buscando el archivo vertica.ini. ¿Hay algún archivo de este tipo? Sí, parece que lo encuentro –

Respuesta

14

Es posible que te falte la sección Configuración del controlador. Editar o crear los /etc/vertica.ini archivo con el siguiente contenido:

[Driver] 
DriverManagerEncoding=UTF-16 
ODBCInstLib=/usr/lib64/libodbcinst.so 
ErrorMessagesPath=/opt/vertica/lib64 
LogLevel=4 
LogPath=/tmp 

Más información se puede encontrar en la Guía del Programador Vertica en la sección "Localización de la configuración del controlador adicionales".

+0

yup, en mi caso este fue el problema exacto –

+0

¡Gracias! eso es directo al grano. – MohamedEzz

1

Del error podemos ver que está utilizando unixODBC y supongo que "DSI" es lo que Vertica llama a sí mismo como texto de error ODBC formateado con entradas en [] de izquierda a derecha como la ruta a través de los diferentes componentes (ver Example diagnostic messages)

Supongo que el mensaje debería ser "No se pudo encontrar SQLGetPrivateprofileString". SQLGetPrivateProfileString es una API proporcionada por el administrador de controladores ODBC para leer entradas del archivo odbc.ini. Creo que debería encontrarse en el objeto compartido libodbcinst.so, sin embargo, algunas distribuciones (por ejemplo, Ubuntu/Debian) quitan símbolos de objetos compartidos, por lo que es difícil verificar esto.

En su DSN, el controlador es el archivo "/opt/vertica/lib/libverticaodbc_unixodbc.so". Aunque es más habitual nombrar el controlador en odbc.ini y agregar una entrada al archivo odbcinst.ini, su DSN se ve bien. por ejemplo:

/etc/odbcinst.ini: 
[Easysoft ODBC-SQL Server SSL] 
Driver=/usr/local/easysoft/sqlserver/lib/libessqlsrv.so 
Setup=/usr/local/easysoft/sqlserver/lib/libessqlsrvS.so 
Threading=0 
FileUsage=1 
DontDLClose=1 

/etc/odbc.ini: 
[SQLSERVER_SAMPLE_SSL] 
Driver=Easysoft ODBC-SQL Server SSL 
Description=Easysoft SQL Server ODBC driver 
. 
. 

ver en el ejemplo anterior hacerlo de esta manera le permite especificar opciones adicionales asociados con el conductor como el roscado (y una búsqueda rápida en la red sugiere Vertica puede utilizar roscar = 1, que es menos restrictiva si usando un programa enhebrado) y DontDLClose. Sin embargo, como dije, las cosas deberían funcionar como las tienes ahora.

Ahora el siguiente bit depende de su plataforma y no me di cuenta si especificó uno. Debe examinar ese objeto compartido para su controlador ODBC y ver de qué depende. En Linux se hace algo como esto:

$ ldd /usr/local/easysoft/sqlserver/lib/libessqlsrv.so 
    linux-gate.so.1 => (0xb76ff000) 
    libodbcinst.so.1 => /usr/lib/libodbcinst.so.1 (0xb75fe000) 
    libesextra_r.so => /usr/local/easysoft/lib/libesextra_r.so (0xb75fb000) 
    libessupp_r.so => /usr/local/easysoft/lib/libessupp_r.so (0xb75de000) 
    libeslicshr_r.so => /usr/local/easysoft/lib/libeslicshr_r.so (0xb75cd000) 
    libestdscrypt.so => /usr/local/easysoft/lib/libestdscrypt.so (0xb75c8000) 
    libm.so.6 => /lib/libm.so.6 (0xb75a2000) 
    libc.so.6 => /lib/libc.so.6 (0xb7445000) 
    libltdl.so.7 => /usr/lib/libltdl.so.7 (0xb743b000) 
    libpthread.so.0 => /lib/libpthread.so.0 (0xb7421000) 
    /lib/ld-linux.so.2 (0xb7700000) 
    libdl.so.2 => /lib/libdl.so.2 (0xb741d000) 

que muestra este controlador ODBC depende de libodbcinst.so.1 y el enlazador dinámico encontramos. Me imagino que su controlador Vertica debería tener un aspecto similar a este respecto, aunque es posible que el controlador Vertica cargue dinámicamente este objeto compartido la primera vez que se cargue. De cualquier forma, parece que el controlador Vertica no puede encontrar el símbolo SQLGetPrivateProfileString que está en libodbcinst.so así que asegúrese de que a) tenga libodbcinst.so b) su enlazador dinámico lo sepa (cómo se hace esto depende de su plataforma - en Linux vea /etc/ld.so.conf y LD_LIBRARY_PATH y la página man para ld.so) c) ejecute ldd (o equivalente) en él para que no haya dependencias faltantes.

El archivo vertica.ini es probablemente donde el controlador almacena la configuración específica del controlador; algunos controladores hacen esto. Si el formato de este archivo es similar al odbc anterior, también puede usar SQLGetPrivateProfileString para este archivo, ya que puede indicarle qué API ODBC debe usar.

Más allá de esto, no tengo más ideas que contactar con vertica.

0

Arun - si me puede decir la versión de la base de datos y la versión del controlador puedo obtener más detalles. Además, podría intentar publicar esto en el foro de la comunidad oficial de Vertica.

http://my.vertica.com/forums/forum/application-and-tools-area/client-drivers/

Si tuviera que adivinar lo que su problema es que creo que podría estar relacionado con este post:

http://my.vertica.com/forums/topic/odbc-on-linux-issue/

... específicamente el comentario al final sobre 'ODBCInstLib' .

2

Buscando en Internet sobre este problema He visto que toneladas de personas han podido conectarse con tsql pero no con isql o osql (que usa isql). He tenido este mismo problema y he estado investigando y probando durante la última semana tratando de descubrir cuál es el problema. El asunto es que todos lo han abordado desde el ángulo de ODBC cuando lo que creo que es algo que tiene que ver con el servidor de Windows o la configuración del servidor sql. Comprobé los registros en el servidor de Windows y veo que la máquina que ejecuta el ODBC ha tocado y ha intentado iniciar sesión repetidamente pero no ha podido. En el visor de eventos hay toneladas de entradas que muestran lo mismo, que la máquina del cliente está intentando iniciar sesión en SQL Server pero el equipo host rechaza esta. Ese es el ángulo en el que me estoy centrando ahora y en el que creo que reside el problema. Si lo resuelvo, publicaré de nuevo para que todos sepan lo que descubrí sobre este problema.

Gracias,

+0

Gracias Jamatrix, es realmente apreciado –

Cuestiones relacionadas