Как поймать умников, распускающих руки на боевой базе Navision
У тебя уже растут руки.
Сегодня мы займемся тем, что отловим и накажем умников, которые ведут разработку в боевой базе, либо правят ее наживую, либо делают еще что-нибудь нехорошее. До недавнего времени контроль за ними был затруднен. Однако, решение есть всегда.
Всего-то надо:
- добавить в таблицу dbo.Object одно поле – Last Changed By.
- На саму таблицу повесить триггер, который будет заполнять это поле:
CREATE TRIGGER [dbo].[Trg_Object_Change]
ON [dbo].[Object]
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE t1
SET [LAST Changed BY] = dbo.UDF_User_Name()
FROM dbo.Object t1
INNER JOIN inserted t2
ON t1.ID = t2.ID AND t1.TYPE = t2.TYPE AND t1.[Company Name] = t2.[Company Name]
END
Дополнительно нам понадобятся еще функции, возвращающие логин текущего пользователя — dbo.UDF_User_Name(), и время-дату dbo.UDF_Date_Time().
Изменения надо сделать во всех базах – и в разработке, и в тестовой, и во всех продуктовых. И, конечно, не забываем про права, в том числе на распределенные по серверам запросы.
А дальше преступника можно легко поймать с помощью вот такого скрипта:
AS
SET NOCOUNT ON
SELECT TYPE, ID, [Company Name], Name, Modified, Compiled,
dbo.UDF_Date_Time(DATE,TIME) AS Full_Date, [LAST Changed BY] AS Good_User
INTO #DEV
FROM [DEVSERVER].[DEVBASE].dbo.[Object] t1
WHERE TYPE <> 1
ORDER BY TYPE, ID, Name
SELECT TYPE, ID, [Company Name], Name, Modified, Compiled,
dbo.UDF_Date_Time(DATE,TIME) AS Full_Date, [LAST Changed BY] AS Victim
INTO #PRODUCT
FROM [PRODUCTSERVER].[PRODUCTBASE].dbo.[Object] t1
WHERE TYPE <> 1
ORDER BY TYPE, ID, Name
-- Объекты в боевой базе, которые свежее разработки
SELECT t1.*, t2.Full_Date AS Dev_Date, t2.Modified AS Dev_Modified
FROM #PRODUCT t1 (nolock)
LEFT JOIN #DEV t2 (nolock)
ON t1.[ID] = t2.[ID] AND t1.TYPE = t2.TYPE
WHERE t1.Full_Date > t2.Full_Date
-- Объекты, присутствующие только в боевой базе
SELECT t1.*
FROM #PRODUCT t1 (nolock)
LEFT JOIN #DEV t2 (nolock)
ON t1.[ID] = t2.[ID] AND t1.TYPE = t2.TYPE
WHERE t2.ID IS NULL
-- Далее – насколько хватит вашей фантазии
Вот в таком аспекте.
Лично у меня это работало в виде ежедневного, раз в 4 часа получаемого письма с результатами данных инквизиторских запросов. В норме письма должны быть пустыми.
Наличие строк в данных запросах – симптом искривления рук и требует немедленного лечения самыми суровыми методами.

Автор: Андрей Стрельников
В области Navision - с 2003 года. Профессиональные интересы: NAV, MS SQL, .NET, BPMN, IT-менеджмент. Предметная область: логистика, финансы, склады, 3PL.
Количество статей, опубликованных автором: 86.