unixODBC дает ошибку при запуске isql [Vertica] - PullRequest
10 голосов
/ 20 марта 2012

Привет! Я настроил параметры 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 ]

15 голосов
/ 22 июня 2012

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

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

Дополнительную информацию можно найти в Руководстве для программиста Vertica в разделе «Расположение дополнительных настроек драйвера».

2 голосов
/ 05 сентября 2012

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

Спасибо

1 голос
/ 26 марта 2012

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

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

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

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

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

Помимо этого, у меня нет больше идей, кроме как связаться с vertica.

0 голосов
/ 07 апреля 2012

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

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

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

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

... в частности, комментарий в конце о ODBCInstLib.

...