|
26.08.2009, 11:48 | #1 |
Участник
|
Постоянное пересоздание триггера на SYSDATABASELOG
Всем добрый день!
Возникла следующая проблема. Идёт внедрение. Несмотря на административные меры (регламент выставления обновлений - не в рабочее время) частенько приходится делать оперативные обновления в боевом приложении в рабочее время. При обновлении приложения (и, похоже, даже при попытке сравнения объектов) идёт синхронизация таблиц, и появляются блокировки в MS SQL. Обнаружили, что во время сравнения и импорта объектов вызывается \Classes\SysSQLInitDBTriggers\checkAndCreateTriggers_MSSQL, который пытается удалить и создать заново триггер на таблице SYSDATABASELOG. На очень многих таблицах настроен Журнал базы данных, и, видимо, из-за этой операции происходят блокировки. Основная цель: убрать возникающие блокировки. Интересно, что если система находит триггер, она его всё равно удаляет и создаёт заново. Зачем? Сейчас я предполагаю внести модификацию, чтобы при нахождении триггера система не пересоздавала его Вопрос: правильным ли я иду путём? Как правильно? Скрипт триггера: X++: ALTER trigger [dbo].[onSYSDATABASELOGinsert] on [dbo].[SYSDATABASELOG] FOR INSERT AS update t set createddate = convert(datetime, convert( varchar(10), getdate(), 102), 102), createdtime = datediff( ss, convert(datetime, convert( varchar(10), getdate(), 102), 102), getdate()) from DBO.SYSDATABASELOG as t inner join inserted as s on t.dataareaid = s.dataareaid and t.recid = s.recid \Classes\SysSQLInitDBTriggers\checkAndCreateTriggers_MSSQL \Classes\SysSQLInitDBTriggers\checkExistsDBTriggers \Classes\Application\dbSynchronize AX4.0 SP2, MS SQL 2005 (9.00.4035.00) |
|
26.08.2009, 13:10 | #2 |
Moderator
|
Я когда-то разбирался с аналогичной проблемой для турецкого клиента Насколько я помню - в конце концов была создана и эскалирована ошибка. Чем кончилось - не знаю, поскольку вскоре ушел из MS. Вообще у меня есть СИЛЬНЕЙШЕЕ подозрение что вся эта штука нужна в 4ке только в случае использования функциональности life science и sysSign. Типа эта функциональность позволяет реализовать понятие цифровой подписи для изменения записи, а заполнение createdDate данными с сервера БД позволяет отвязать дату от того значения которое пользователь выставил в клиенте Аксапты.
В общем - я бы просто тупо отключил создание и удаление этого триггера из application.dbSynchronize(). Мне что-то трудно представить себе чтобы это кому-нибудь было бы нужно. Да и кстати механизм SysSign стал более или менее живым только начиная с версии 2009. |
|
|
За это сообщение автора поблагодарили: alex55 (2). |
01.11.2016, 13:53 | #3 |
MCTS
|
А с чем вообще связана необходимость запуска синхронизации перед сравнением объектов в диалоге импорта?
|
|