1.2.4 -> 1.2.5 upgrade fail

Started by Akira, January 09, 2013, 06:44:49 AM

Previous topic - Next topic

Akira

NetXMS Database Manager Version 1.2.5

Upgrading database...
Upgrading from version 265 to 266
SQL query failed ([Microsoft][SQL Server Native Client 10.0][SQL Server]Cannot create index. Object 'event_log' was created with the following SET options off: 'ANSI_NULLS'.):
CREATE INDEX idx_event_log_root_id ON event_log(root_event_id) WHERE root_event_id > 0
Rolling back last stage due to upgrade errors...
Database upgrade failed

XBOCT

Такая же ситуация, только с MySQL на CentOS 6.3. В итоге отказались работать и 1.2.4 и 1.2.5.

Alex Kirhenshtein

Поле root_event_id в таблице event_log сейчас "not null"? Если нет, попробуйте добавить not-null constraint и перезапустить апгрейд (UPDATE event_log SET root_event_id=0 WHERE root_event_id IS NULL; ALTER TABLE event_log ALTER COLUMN root_event_id SET NOT NULL).

Victor Kirhenshtein

#3
Похоже что изначально таблица была создана с опцией ANSI_NULLS = OFF (так было по умолчанию на старых версиях MS SQL). Единственный вариант похоже - это пересоздать таблицу EVENT_LOG заново с опцией ANSI_NULLS = ON. Одно из предлагаемых решений: http://stackoverflow.com/questions/10010042/update-ansi-nulls-option-in-an-existing-table.
На всякий случай - DDL для создания таблицы:

CREATE TABLE event_log
(
event_id bigint not null,
event_code integer not null,
event_timestamp integer not null,
event_source integer not null,
event_severity integer not null,
event_message varchar(255) null,
root_event_id bigint not null,
user_tag varchar(63) null,
PRIMARY KEY(event_id)
) ;
CREATE INDEX idx_event_log_event_timestamp ON event_log(event_timestamp);


Microsoft про ANSI_NULLS: http://msdn.microsoft.com/en-us/library/ms188048.aspx

Victor Kirhenshtein

Upd: в аттаче SQL скрипт для конвертации таблицы event_log в правильный формат.

kozlov_ao

Только что обновлял с 1.2.4 на 1.2.5... все нормально прошло, делал "из коробки"

Система FreeBSD 9.0
Может просто неудачное стечение обстоятельств... :)

doncelab

#6
На windows 2003 MSSQL 2008 R8 вот такая ошибка:
Тип события:   Ошибка
Источник события:   NetXMSCore
Категория события:   Отсутствует
Код события:   63
Описание:
Your database has format version 263, but server is compiled for version 268

Скрипт выше запускал, не помогло.

Victor Kirhenshtein

Теперь надо запустить


nxdbmgr.exe upgrade


чтобы закончить обновление схемы.

[email protected]

Windows Server 2008 R2 SP1 + MS SQL server 2008 x64
C:\Program Files\NetXMS\bin>nxdbmgr.exe upgrade
NetXMS Database Manager Version 1.2.5

Upgrading database...
Upgrading from version 265 to 266
SQL query failed ([Microsoft][ODBC SQL Server Driver][SQL Server]CREATE INDEX failed because the following SET options have incorrect settings: 'ANSI_NULLS, QUOTED_IDENTIFIER, CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS, ANSI_PADDING'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or XML data type methods and/or spatial index operations.):
CREATE INDEX idx_event_log_root_id ON event_log(root_event_id) WHERE root_event_id > 0
Rolling back last stage due to upgrade errors...
Database upgrade failed


Результат применения предлагавшегося SQL-скрипта:
ALTER TABLE SWITCH statement failed because column 'event_message' does not have the same ANSI trimming semantics in tables 'netxms_db.dbo.event_log' and 'netxms_db.dbo.event_log_new'.

[email protected]

После запуска принудительного обновления через ключи -f -X , процедура завершилась успешно. Но теперь в Data Collection Configuration при добавлении нового параметра агента NetXMS список доступных параметров пуст.

[email protected]

Реиндексировал базу.
Вопрос исчерпан.

Akira

С базой теперь ОК.
Теперь при старте консоли
Cannot load MIB file from server: Bad MIB file data

Victor Kirhenshtein

Quote from: Akira on January 16, 2013, 07:42:53 AM
С базой теперь ОК.
Теперь при старте консоли
Cannot load MIB file from server: Bad MIB file data

Попробуйте удалить файл netxms.mib из каталога $HOME/.nxmc/data и перезапустить консоль.

Victor Kirhenshtein

Обновленный скрипт для пересоздания таблицы event_log:


IF ((SELECT uses_ansi_nulls FROM sys.tables WHERE object_id = object_id('netxms.event_log')) = 0)
      BEGIN TRY
            BEGIN TRANSACTION;
            USE netxms_db;
            /*Create new table with identical structure but option on*/
            SET ANSI_NULLS ON;
            SET ANSI_PADDING OFF;

            CREATE TABLE netxms.event_log_new
            (
            event_id bigint not null,
            event_code integer not null,
            event_timestamp integer not null,
            event_source integer not null,
            event_severity integer not null,
            event_message varchar(255) not null,
            root_event_id bigint not null,
            user_tag varchar(63) not null,
            PRIMARY KEY(event_id)
            ) ;

            CREATE INDEX idx_event_log_event_timestamp ON netxms.event_log_new(event_timestamp);

            /*Metadata only switch*/
            ALTER TABLE netxms.event_log  SWITCH TO netxms.event_log_new;

            DROP TABLE netxms.event_log;

            EXECUTE sp_rename N'netxms.event_log_new', N'event_log','OBJECT';

            COMMIT TRANSACTION;
      END TRY

      BEGIN CATCH
            IF XACT_STATE() <> 0
              ROLLBACK TRANSACTION;

            PRINT ERROR_MESSAGE();
      END CATCH;
ELSE
      PRINT 'ANSI_NULLS ALREADY ON'


Akira

Quote from: Victor Kirhenshtein on January 16, 2013, 10:02:25 AM
Quote from: Akira on January 16, 2013, 07:42:53 AM
С базой теперь ОК.
Теперь при старте консоли
Cannot load MIB file from server: Bad MIB file data

Попробуйте удалить файл netxms.mib из каталога $HOME/.nxmc/data и перезапустить консоль.

На сервере поднял старый netxms.mib от 1.2.4, все стало ок.

Если компилирую новый, на него ругается.
Хотя все файлы MIB не менялись аж с 1.2.0