Не стартует netxmsd

Started by Sw66, February 16, 2013, 09:02:36 PM

Previous topic - Next topic

Sw66

Здравствуйте! Не стартует сервер после установки, возможно, кто-нибудь сможет помочь мне. Установил сервер netxms 1.2.5 на Debian, БД на MS SQL 2008 R2. Базу создавал вручную через консоль SQL сервера, инициализировал через nxdbmgr init, все прошло нормально, таблицы и значения в них появились. Однако при попытке запустить netxmsd в логах получаю ошибку your database has format version 0, but server is compiled for version 268.  nxdbmgr check сообщил мне:  Unable to determine database syntax. Также я в таблице config не нашел параметра DBFormatVersion, по которому раньше проверялась версия БД (его нет и в SQL-скрипте заполнения базы).
команда netxmsd debug-all dump-sql standalone ничего интересного также не выдала:
[17-Feb-2013 00:40:56.302] Platform subagent "/usr/lib/libnsm_linux.so" successfully loaded
[17-Feb-2013 00:40:56.303] Database driver "odbc.ddr" loaded and initialized successfully
[17-Feb-2013 00:40:56.314] Your database has format version 0, but server is compiled for version 268

Victor Kirhenshtein

А как вы делали инициализацию? Есть два типа SQL скриптов - dbinit_ и dbschema_. Надо использовать dbinit_ скрипт.

Sw66

Извиняюсь за задержку с ответом, зачах с гриппом на больничном. Использовал  именно dbinit скрипт. Пробовал заполнять БД через SQL Management Studio (просто исполняя содержимое скрипта), при этом при попытке запустить демона появляются ошибки: Some characters could not be converted into client's character set. Unconverted bytes were changed to question marks. Гугление подсказало, что здесь дело в параметрах сортировки, пробовал различные наиболее распространенные - не подошло. Не знаю, дает это что-то или нет, но через isql цепляюсь с созданным DSN абсолютно нормально.

Sw66

решил продолжить попытки подключиться.  БД через init-скрипт создается нормально, в таблице metadata  есть поле SchemaVersion со значением 268. Команда nxdbmgr check сообщает: Unable to determine database syntax.   

XX@bkp:~$ /usr/bin/netxmsd -D 9
Using configuration file "/etc/netxmsd.conf"
[20-Mar-2013 19:43:14.489] Code page set to ISO-8859-1
[20-Mar-2013 19:43:14.489] Platform subagent "/usr/lib/libnsm_linux.so" successfully loaded
[20-Mar-2013 19:43:14.489] Debug callback set for DB library
[20-Mar-2013 19:43:14.491] Database driver "odbc.ddr" loaded and initialized successfully
[20-Mar-2013 19:43:14.491] DBConnect: server=DC db=Netxms login=netxmsuser schema=
[20-Mar-2013 19:43:14.501] New DB connection opened: handle=0x18bd3c0
[20-Mar-2013 19:43:14.501] Successfully connected to database Netxms@DC
[20-Mar-2013 19:43:14.502] Successful sync query: "SELECT var_value FROM metadata WHERE var_name='SchemaVersion'" [1 ms]
[20-Mar-2013 19:43:14.503] Successful sync query: "SELECT var_value FROM config WHERE var_name='DBFormatVersion'" [1 ms]
[20-Mar-2013 19:43:14.503] Your database has format version 0, but server is compiled for version 268

Интересно то, что если, например, удалить из таблицы metadata var_name SchemaVersion в принципе, то ошибка возникает уже другая: Your database has format version -1, but server is compiled for version 268 (версия 0 меняется на -1). Пробовал менять кодировки в freetds, создавать БД на сервере с разными сравнениями (collation), результата ноль. Возможно, кто-нибудь подскажет, в каком направлении продолжать копать. Сейчас netxms успешно работает на платформе Windows, сейчас очень надо перебраться на Linux.

Victor Kirhenshtein

Ошибка "Unable to determine database syntax" означает, что в таблице metadata в параметре Syntax некорректное значение. Как выглядит таблица metadata?

Еще насколько я помню freetds не поддерживает нормально UNICODE. Попробуйте переключить odbc.ddr в не-UNICODE режим, добавив

DBDrvParams = unicode=false

в netxmsd.conf.

Sw66

В параметре Syntax стоит значение MSSQL. Но это уже не так важно, ибо DBDrvParams = unicode=false помогло, и запрос на версию базы, похоже, выполняется нормально (ошибок таких больше нет). Но от этого не легче, теперь, судя по всему, есть проблема со вставкой значений в БД:

XX@bkp:~$ /usr/bin/netxmsd -D 9
Using configuration file "/etc/netxmsd.conf"
[22-Mar-2013 12:58:14.218] Code page set to ISO-8859-1
[22-Mar-2013 12:58:14.218] Platform subagent "/usr/lib/libnsm_linux.so" successfully loaded
[22-Mar-2013 12:58:14.218] Debug callback set for DB library
[22-Mar-2013 12:58:14.219] Database driver "odbc.ddr" loaded and initialized successfully
[22-Mar-2013 12:58:14.220] DBConnect: server=DC db=Netxms login=netxmsuser schema=
[22-Mar-2013 12:58:14.231] New DB connection opened: handle=0x23efcd0
[22-Mar-2013 12:58:14.231] Successfully connected to database Netxms@DC
[22-Mar-2013 12:58:14.233] Successful sync query: "SELECT var_value FROM metadata WHERE var_name='SchemaVersion'" [2 ms]
[22-Mar-2013 12:58:14.235] {0x2402fc0} Successful prepare: "SELECT var_value FROM config WHERE var_name=?" [2 ms]
[22-Mar-2013 12:58:14.235] {0x2402fc0} bind at pos 1: "ConnectionPoolBaseSize"
[22-Mar-2013 12:58:14.235] Failed prepared sync query: "SELECT var_value FROM config WHERE var_name=?" [0 ms]
[22-Mar-2013 12:58:14.236] SQL query failed (Query = "SELECT var_value FROM config WHERE var_name=?"): Unable to obtain description for this error
[22-Mar-2013 12:58:14.237] {0x2402fb0} Successful prepare: "SELECT var_value FROM config WHERE var_name=?" [1 ms]
[22-Mar-2013 12:58:14.237] {0x2402fb0} bind at pos 1: "ConnectionPoolMaxSize"
[22-Mar-2013 12:58:14.237] Failed prepared sync query: "SELECT var_value FROM config WHERE var_name=?" [0 ms]
[22-Mar-2013 12:58:14.237] SQL query failed (Query = "SELECT var_value FROM config WHERE var_name=?"): Unable to obtain description for this error
[22-Mar-2013 12:58:14.238] {0x2402f70} Successful prepare: "SELECT var_value FROM config WHERE var_name=?" [0 ms]
[22-Mar-2013 12:58:14.238] {0x2402f70} bind at pos 1: "ConnectionPoolCooldownTime"
[22-Mar-2013 12:58:14.238] Failed prepared sync query: "SELECT var_value FROM config WHERE var_name=?" [0 ms]
[22-Mar-2013 12:58:14.238] SQL query failed (Query = "SELECT var_value FROM config WHERE var_name=?"): Unable to obtain description for this error
[22-Mar-2013 12:58:14.239] DBConnect: server=DC db=Netxms login=netxmsuser schema=
[22-Mar-2013 12:58:14.245] New DB connection opened: handle=0x24156f0
[22-Mar-2013 12:58:14.245] DBConnect: server=DC db=Netxms login=netxmsuser schema=
[22-Mar-2013 12:58:14.251] New DB connection opened: handle=0x245bb30
[22-Mar-2013 12:58:14.251] DBConnect: server=DC db=Netxms login=netxmsuser schema=
[22-Mar-2013 12:58:14.257] New DB connection opened: handle=0x245b780
[22-Mar-2013 12:58:14.257] DBConnect: server=DC db=Netxms login=netxmsuser schema=
[22-Mar-2013 12:58:14.262] New DB connection opened: handle=0x245b0a0
[22-Mar-2013 12:58:14.262] DBConnect: server=DC db=Netxms login=netxmsuser schema=
[22-Mar-2013 12:58:14.268] New DB connection opened: handle=0x24e5e90
[22-Mar-2013 12:58:14.268] Database Connection Pool initialized
[22-Mar-2013 12:58:14.268] Successful sync query: "SELECT var_value FROM metadata WHERE var_name='Syntax'" [0 ms]
[22-Mar-2013 12:58:14.269] {0x255d3a0} Successful prepare: "SELECT var_value FROM config WHERE var_name=?" [1 ms]
[22-Mar-2013 12:58:14.269] {0x255d3a0} bind at pos 1: "ServerID"
[22-Mar-2013 12:58:14.269] Failed prepared sync query: "SELECT var_value FROM config WHERE var_name=?" [0 ms]
[22-Mar-2013 12:58:14.269] SQL query failed (Query = "SELECT var_value FROM config WHERE var_name=?"): Unable to obtain description for this error
[22-Mar-2013 12:58:14.270] {0x24a0b30} Successful prepare: "SELECT var_value FROM config WHERE var_name=?" [0 ms]
[22-Mar-2013 12:58:14.270] {0x24a0b30} bind at pos 1: "ServerID"
[22-Mar-2013 12:58:14.271] Failed prepared sync query: "SELECT var_value FROM config WHERE var_name=?" [0 ms]
[22-Mar-2013 12:58:14.271] SQL query failed (Query = "SELECT var_value FROM config WHERE var_name=?"): Unable to obtain description for this error
[22-Mar-2013 12:58:14.273] {0x24a0b30} Successful prepare: "INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES (?,?,?,?)" [2 ms]
[22-Mar-2013 12:58:14.273] {0x24a0b30} bind at pos 1: "ServerID"
[22-Mar-2013 12:58:14.273] {0x24a0b30} bind at pos 2: "55ABF03306014C51"
[22-Mar-2013 12:58:14.273] {0x24a0b30} bind at pos 3: "1"
[22-Mar-2013 12:58:14.273] {0x24a0b30} bind at pos 4: "0"
[22-Mar-2013 12:58:14.273] Failed prepared sync query: "INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES (?,?,?,?)" [0 ms]
[22-Mar-2013 12:58:14.273] SQL query failed (Query = "INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES (?,?,?,?)"): Unable to obtain description for this error
[22-Mar-2013 12:58:14.274] {0x255d3a0} Successful prepare: "SELECT var_value FROM config WHERE var_name=?" [0 ms]
[22-Mar-2013 12:58:14.275] {0x255d3a0} bind at pos 1: "DBLockStatus"
[22-Mar-2013 12:58:14.275] Failed prepared sync query: "SELECT var_value FROM config WHERE var_name=?" [0 ms]
[22-Mar-2013 12:58:14.275] SQL query failed (Query = "SELECT var_value FROM config WHERE var_name=?"): Unable to obtain description for this error
[22-Mar-2013 12:58:14.275] DBLockStatus="ERROR"
[22-Mar-2013 12:58:14.275] Error initializing component locks table



Victor Kirhenshtein

Похоже нашел баг в odbc.ddr - ошибка в работе с prepared statements если выключена поддержка UNICODE. Сейчас исправлю и пришлю патч на тест.

Victor Kirhenshtein

Попробуйте заменить src/db/dbdrv/odbc/odbc.cpp на приложеный и пересобрать odbc.ddr.