unixODBC дает ошибку при запуске isql [Vertica]

Привет, я настроил настройки DSN для vertica в Ubuntu 10.10 32-разрядная версия машины. Настройки все в порядке, и я перекрестно проверил их.

вот мой 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

аналогично у меня есть odbcinst.ini-файл.

когда я запускаю команду: isql-v VerticaDSN, я получаю следующую ошибку:

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

Я пробовал все, но я не могу расшифровать эту ошибку.

любая помощь будет принята оцененный.

4 ответов


возможно, отсутствует раздел конфигурации драйвера. Отредактируйте или создайте файл / etc / vertica.ini со следующим содержимым:

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

более подробную информацию можно найти в руководстве программиста Vertica в разделе "расположение дополнительных настроек драйвера".


поиск в Интернете по этой проблеме я видел, что тонны людей смогли подключиться к tsql, но не с isql или osql (который использует isql). У меня была такая же проблема, и я исследовал и тестировал на прошлой неделе, пытаясь выяснить, в чем проблема. Дело в том, что все подошли к нему с точки зрения ODBC, когда я думаю, что это что-то связано с конфигурацией Windows server или sql server. Я проверил журналы на сервере windows и вижу, что машина, на которой работает ODBC, ударила его и попыталась войти в систему несколько раз, но не смогла. В средстве просмотра событий есть тонны записей, показывающих то же самое, что клиентская машина пытается войти в SQL Server, но отказывается от хост-машины. Это тот угол, на котором я сейчас фокусируюсь и где, как мне кажется, лежит проблема. Если я получу это решение, я снова опубликую, чтобы все знали, что я узнал об этой проблеме.

спасибо,


из ошибки мы видим, что вы используете unixODBC, и я предполагаю, что" DSI " - это то, что Vertica называет себя текстом ошибки ODBC, отформатированным с записями в [] слева направо как путь, хотя различные компоненты (см. пример диагностического сообщения).

Я предполагаю, что сообщение должно быть "не sqlgetprivateprofilestring не может быть найдено". SQLGETPRIVATEPROFILESTRING-это API, предоставляемый диспетчером драйверов ODBC для чтения записей из odbc.ini-файл. Я верю в это должно быть найдено в libodbcinst.однако некоторые дистрибутивы (например, Ubuntu / Debian) удаляют символы из общих объектов, поэтому это трудно проверить.

в вашем DSN драйвером является файл " / opt/vertica/lib / libverticaodbc_unixodbc.Итак". Хотя более привычно называть драйвер в odbc.ini и добавьте запись в odbcinst.ini-файл вашего DSN выглядит нормально. например:

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

посмотреть в приведенном выше примере, это позволяет вам указать дополнительные параметры, связанные с драйвером, такие как Threading (и быстрый поиск в сети предполагает, что Vertica может использовать Threading=1, что менее ограничительно при использовании потоковой программы) и DontDLClose. Однако, как я сказал, Все должно работать так, как у вас есть сейчас.

теперь следующий бит зависит от вашей платформы, и я не заметил, Если вы указали один. Вам нужно изучить этот общий объект для вашего драйвера ODBC и посмотреть, от чего он зависит. В Linux вы делаете что-то вроде это:

$ 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)

который показывает, что этот драйвер ODBC зависит от libodbcinst.Итак.1 и динамический компоновщик нашел его. Я предполагаю, что ваш драйвер Vertica должен выглядеть аналогичным в этом отношении, хотя возможно, что драйвер Vertica динамически загружает этот общий объект при первой загрузке. В любом случае, похоже, что драйвер Vertica не может найти символ SQLGetPrivateProfileString, который находится в libodbcinst.поэтому убедитесь, что a) у вас есть libodbcinst.Итак, b) ваш динамический компоновщик знает об этом (как это сделать, зависит от вашей платформы - на Linux см. /etc/ld.Итак.conf и LD_LIBRARY_PATH и справочная страница для ld.Итак) c) запустите ldd (или эквивалент) на нем, чтобы не было отсутствующих зависимостей.

в базе данных Vertica.ini-файл, вероятно, где драйвер хранит конкретную конфигурацию драйвера - некоторые драйверы делают это. Если формат этого файла похож на odbc выше, он также может использовать SQLGetPrivateProfileString для этого файла, как вы можете сказать, что ODBC API, какой файл использовать.

помимо этого у меня нет других идей, кроме как связаться с vertica.


Arun -- если вы можете сообщить мне версию базы данных и версию драйвера, я могу получить более подробную информацию. Кроме того, я могу попробовать опубликовать это на официальном форуме сообщества Vertica.

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

Если бы мне пришлось угадать, что ваша проблема, я думаю, что это может быть связано с этим сообщением:

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

... особенно комментарий в конце о 'ODBCInstLib'.