Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 DDL триггер  [new]
flashslash
Member [заблокирован]

Откуда:
Сообщений: 820
Привет всем!
подскажите, можно ли с помощью DDL-триггеров сохранять в специальную таблицу типа Log
все изменения по структуре базы данных ?

p.s.
(то есть все что касается создания и изменений в таблицах, хранимых процедурах, типах, view и т.д. Во всех объектах базы данных.)
30 мар 16, 11:48    [18994897]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
Glory
Member

Откуда:
Сообщений: 104751
flashslash
подскажите, можно ли с помощью DDL-триггеров сохранять в специальную таблицу типа Log
все изменения по структуре базы данных ?

Вы разрешене спрашиваете ? Или вы попробовали и у вас что-то не получилось ?
30 мар 16, 11:56    [18994973]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2415
flashslash,

да

create trigger [tr_DDL_DATABASE_EVENTS] on database for DDL_DATABASE_LEVEL_EVENTS
as
...
30 мар 16, 12:11    [18995072]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
flashslash
Member [заблокирован]

Откуда:
Сообщений: 820
Glory,

уважаемый модератор Glory, вы явно провоцируете..
по-моему из вопроса понятно, что я не в теме DDL вообще..
Нет, не пробовал, но собираюсь.
Не хочется изобретать велосипед, но видимо придется, так как есть какие-то кусочки DDL триггеров в инете,
а рабочего скрипта на все объекты похоже нет, вам бы следовало на эту тему написать статью и повесить ее на сайте, потому что
тема сохранения скриптов была актуальная, даже там где работает П.Карклин, можете у него поинтересоваться..
А проблема простая - есть куча разработчиков, которые работают через SQL Managment studio, и каждый накатывает изменения и разумеется периодически забывает сохранять свои апдейты в файлы... а система контроля версий SVN и почему-то SQL Managment studio ее не видит.
30 мар 16, 13:18    [18995462]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
Glory
Member

Откуда:
Сообщений: 104751
flashslash
по-моему из вопроса понятно, что я не в теме DDL вообще..

И что вам мешает быть в теме ?
Что вы прочитали по теме ? Что вы попробовали сделать ? С какой конкретно проблемой вы столкнулись ?

flashslash
а рабочего скрипта на все объекты похоже нет, вам бы следовало на эту тему написать статью и повесить ее на сайте, потому что

А вам нарвеное надо устроится в консультационную фирму - советы раздавать.

flashslash
А проблема простая - есть куча разработчиков, которые работают через SQL Managment studio, и каждый накатывает изменения и разумеется периодически забывает сохранять свои апдейты в файлы... а система контроля версий SVN и почему-то SQL Managment studio ее не видит.

Организационный бардак не исправить программными средствами.
30 мар 16, 13:22    [18995481]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
flashslash
Glory,
А проблема простая - есть куча разработчиков, которые работают через SQL Managment studio, и каждый накатывает изменения и разумеется периодически забывает сохранять свои апдейты в файлы... а система контроля версий SVN и почему-то SQL Managment studio ее не видит.

только массовые и публичные порки, в плоть до искоренения явления. Хранить изменения может и полезно, но найти нужное будет не так весело :)
30 мар 16, 13:25    [18995500]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
flashslash
Member [заблокирован]

Откуда:
Сообщений: 820
TaPaK,

да чего порки...это не лечение проблемы, а затыкание дыр..
надо чтобы работала инженерная мысль!
30 мар 16, 13:36    [18995553]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
o-o
Guest
flashslash
а рабочего скрипта на все объекты похоже нет


все что может, вот такое самое
StarikNavy
flashslash,
create trigger [tr_DDL_DATABASE_EVENTS] on database for DDL_DATABASE_LEVEL_EVENTS
as
...

и ловит.
+ не забываем, что DISABLE TRIGGER не логирует ни сам DDL-триггер,
ни дефолтный трэйс.
только серверный аудит,
а на него нужны серверные же права.

триггер подарю, подумаешь, экая невидаль
(критика по поводу неименованных дефолтов не принимается)
+

CREATE TABLE [sav].[t](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[dt] [datetime] NULL,
	[user_] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
	[event_] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
	[tsql_] [varchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
	[login_] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
 CONSTRAINT [PK_t_id] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH (FILLFACTOR = 100) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO


ALTER TABLE [sav].[t] ADD  DEFAULT (getdate()) FOR [dt]
GO

ALTER TABLE [sav].[t] ADD  DEFAULT (user) FOR [user_]
GO

ALTER TABLE [sav].[t] ADD  DEFAULT (system_user) FOR [login_]
GO


create trigger [tg1]
on database
--with encryption
for ddl_database_level_events
as
set nocount on;
declare @d xml;
set @d = EVENTDATA();
insert into sav.t(event_, tsql_) 
values ( @d.value('(EVENT_INSTANCE/EventType)[1]','varchar(100)'),
         @d.value('(EVENT_INSTANCE/TSQLCommand)[1]','varchar(max)'));

и раз уж вы не в теме, еще совет:
хорошо подумайте, есть ли в базе овнеры-неадмины.
DDL trigger исполняется с правами исполнителя.
а им может оказаться админ, ребилдящий индексы
30 мар 16, 13:41    [18995586]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
flashslash
Member [заблокирован]

Откуда:
Сообщений: 820
Glory,

Вы не поняли всей глубины проблемы...
вполне типичная ситуация, когда организационный бардак изменить можно только со сменой на уровне руководства...
и это вертикальное решение... и почему-то вы ставите акцент на этом, хотя бардак можно упорядочить в горизонтальной плоскости, то есть технически.. не дожидаясь административных решений, или для чего этот форум???

что касается моего совета, то вы почему-то болезненно к нему отнеслись, а было бы реально круто опубликовать красивое решение, ну, наверное вам виднее...
30 мар 16, 13:42    [18995593]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
flashslash
Member [заблокирован]

Откуда:
Сообщений: 820
o-o,

Большое спасибо!!! Респект!
Буду пробовать!
30 мар 16, 13:44    [18995601]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
o-o
Guest
flashslash,
вместо system_user лучше в дефолте отлавливать original_login().
у меня заменено на system_user, тк против меня же и работает,
других любителей имперсонэйта тут пока что нет
30 мар 16, 13:48    [18995630]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
flashslash
TaPaK,

да чего порки...это не лечение проблемы, а затыкание дыр..
надо чтобы работала инженерная мысль!

в плане разработки полезность этой мысли стремится к 0 с момента внедрения.
30 мар 16, 13:54    [18995668]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
TaPaK
flashslash
А проблема простая - есть куча разработчиков, которые работают через SQL Managment studio, и каждый накатывает изменения и разумеется периодически забывает сохранять свои апдейты в файлы... а система контроля версий SVN и почему-то SQL Managment studio ее не видит.

только массовые и публичные порки, в плоть до искоренения явления. Хранить изменения может и полезно, но найти нужное будет не так весело :)
Лучше накатывать ежедневно (или реже) последнюю версию из проекта. Со всех точек зрения. То есть обычный регулярный ночной деплой, это как бы мастхэв для организации разработки.
Но технически и организационно это непростое решение, не для всех, так что такой аудит - штука для многих полезная.
30 мар 16, 13:58    [18995695]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
alexeyvg
TaPaK
пропущено...

только массовые и публичные порки, в плоть до искоренения явления. Хранить изменения может и полезно, но найти нужное будет не так весело :)
Лучше накатывать ежедневно (или реже) последнюю версию из проекта. Со всех точек зрения. То есть обычный регулярный ночной деплой, это как бы мастхэв для организации разработки.
Но технически и организационно это непростое решение, не для всех, так что такой аудит - штука для многих полезная.

та же порка на уровне sql :)
30 мар 16, 14:00    [18995709]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2415
если долго поныть на тему "у меня нет времени на чтение msdn и гугления, я ничего в этом не понимаю, вы же здесь и собрались для того чтобы помочь мне" то решение, на блюдечке с голубой каемочкой, тебе в итоге выложат
30 мар 16, 14:38    [18996010]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
o-o
Guest
StarikNavy
если долго поныть на тему "у меня нет времени на чтение msdn и гугления, я ничего в этом не понимаю, вы же здесь и собрались для того чтобы помочь мне" то решение, на блюдечке с голубой каемочкой, тебе в итоге выложат

...если только 816 сообщений набраны не на ПТ.
человек же к нам из .NET обращается, почему не помочь.
мне надо было сваять форму за 5 минут, чтоб данные в таблицу класть,
выбирая мышкой из комбобоксов,
мне помогли, не отправили 800 страниц читать.

бывает же нужно раз в жизни из соседней области,
он же не 3 года в серверном топике канючит и так ничего и не вынес
30 мар 16, 14:48    [18996090]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
o-o
StarikNavy
если долго поныть на тему "у меня нет времени на чтение msdn и гугления, я ничего в этом не понимаю, вы же здесь и собрались для того чтобы помочь мне" то решение, на блюдечке с голубой каемочкой, тебе в итоге выложат

...если только 816 сообщений набраны не на ПТ.
человек же к нам из .NET обращается, почему не помочь.
мне надо было сваять форму за 5 минут, чтоб данные в таблицу класть,
выбирая мышкой из комбобоксов,
мне помогли, не отправили 800 страниц читать.

бывает же нужно раз в жизни из соседней области,
он же не 3 года в серверном топике канючит и так ничего и не вынес

бытует мнение, что знание в скл должны получаться путём самоистязания,оскорблений и побоев :)
30 мар 16, 14:56    [18996141]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
o-o
Guest
TaPaK,

Он не за знаниями пришел, а за готовым триггером, потому что найденное в интернете с его точки зрения логирует не все. Я ему дарю триггер и он получает то, что, возможно, решит его задачу.

И ровно то же могу сказать про свое творение на шарпе. Оно решает мою задачу и я в состоянии поправить форму под свои нужды. При этом знаний шарпа у меня ноль без палочки, и наверное их тоже надо получать через чтение томов и свои собственные неудачные попытки. Но "знание шарпа" не моя первоочередная задача, а сделать программу надо было срочно
30 мар 16, 15:25    [18996281]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
o-o
TaPaK,

Он не за знаниями пришел, а за готовым триггером, потому что найденное в интернете с его точки зрения логирует не все.

оффтоп конечно, но как вы всё это поняли из темы ТС?
30 мар 16, 15:29    [18996300]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
o-o
Guest
TaPaK
o-o
TaPaK,

Он не за знаниями пришел, а за готовым триггером, потому что найденное в интернете с его точки зрения логирует не все.

оффтоп конечно, но как вы всё это поняли из темы ТС?

да вообще-то кликаю на профиль, вижу он не ПТшник.
там же вижу расклад по темам и понимаю, что мой случай, только наоборот.
ну т.е. он пишет приложения, а сервер по ходу дела,
он не админ и не надзиратель, хочет минимальный контроль над бардаком.
знает, каким средством может себе это обеспечить,
поискал в интернете, пришел к выводу, что будет делать сам,
интересуется, а стоит ли оно того, может, ловится не все
flashslash
Не хочется изобретать велосипед, но видимо придется, так как есть какие-то кусочки DDL триггеров в инете,
а рабочего скрипта на все объекты похоже нет

как-то так :)
30 мар 16, 16:11    [18996529]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
Glory
Member

Откуда:
Сообщений: 104751
o-o
да вообще-то кликаю на профиль, вижу он не ПТшник.
там же вижу расклад по темам и понимаю, что мой случай, только наоборот.
ну т.е. он пишет приложения, а сервер по ходу дела,
он не админ и не надзиратель, хочет минимальный контроль над бардаком.
знает, каким средством может себе это обеспечить,
поискал в интернете, пришел к выводу, что будет делать сам,
интересуется, а стоит ли оно того, может, ловится не все

Такой прямо благостный портрет нарисовался.
Рассказать ТС об этом самому наверное помешала только его черезмерная скромность.
30 мар 16, 16:16    [18996560]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
Glory
Рассказать ТС об этом самому наверное помешала только его черезмерная скромность.
Да. Сам бы рассказал - наложить епитимью за гордыню :-)
30 мар 16, 17:04    [18996813]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
Glory
Member

Откуда:
Сообщений: 104751
alexeyvg
Glory
Рассказать ТС об этом самому наверное помешала только его черезмерная скромность.
Да. Сам бы рассказал - наложить епитимью за гордыню :-)

Говорить правду всегда лучше, чем полуправду.
Что мешало ТС сообщить, что, где и как он попробовал и что именно его не устроило ?
Или прямо сообщить, что он ничего не пробовал.

Вот я приду в форум по .Net и спрошу по аналогии
"подскажите, можно ли с помощью С# сваять форму, чтоб данные в таблицу класть, выбирая мышкой из комбобоксов?"
30 мар 16, 17:22    [18996914]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
пьяный тюлень
Member

Откуда:
Сообщений: 100
Коллеги, зря вы так набросились на человека. Триггер на изменение объектов очень полезная вещь при любой организации рабочего процесса. У меня, например, вот такой получился. Для своих приложений с невиндовой авторизацией я прокидываю имя пользователя в app_name(), очень хорошо все видно.

CREATE TRIGGER [TR_DDL_Events]
ON ALL SERVER
AFTER DDL_DATABASE_LEVEL_EVENTS
AS
BEGIN
	SET NOCOUNT ON
	DECLARE @data XML
	SET @data = EVENTDATA()
	insert into Log
		(EventType, PostTime, SPID, LoginName, ApplicationName, ServerName, 
		 DatabaseName, SchemaName, ObjectName, ObjectType, CommandText)
	select 
		EventType = @data.value('(/EVENT_INSTANCE/EventType)[1]','sysname'),
		PostTime = @data.value('(/EVENT_INSTANCE/PostTime)[1]','datetime'),
		SPID = @data.value('(/EVENT_INSTANCE/SPID)[1]','int'),
		LoginName = @data.value('(/EVENT_INSTANCE/LoginName)[1]','sysname'),
		ApplicationName = app_name(),
		ServerName = @data.value('(/EVENT_INSTANCE/ServerName)[1]','sysname'),
		DatabaseName = @data.value('(/EVENT_INSTANCE/DatabaseName)[1]','sysname'),
		SchemaName = @data.value('(/EVENT_INSTANCE/SchemaName)[1]','sysname'),
		ObjectName = @data.value('(/EVENT_INSTANCE/ObjectName)[1]','sysname'),
		ObjectType = @data.value('(/EVENT_INSTANCE/ObjectType)[1]','sysname'),
		CommandText = @data.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')
END
31 мар 16, 10:41    [18999085]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
flashslash
Member [заблокирован]

Откуда:
Сообщений: 820
пьяный тюлень,
Спасибо за ответ,
я не заходил сюда несколько дней.

p.s.
Всем остальным, кто по дурости начал обсуждать не тот вопрос, что я задал, а почему-то меня...
Видите ли, господа-хейтеры, идея любого форума изначально для того, чтобы обсуждать вопросы по теме, а кидаться на персоналии, обсуждать личностей - это уже не форум, а обычный базар.
Впрочем, вам это наверное не понять, и похоже, вы привыкли тратить время на никчемную болтовню..
4 апр 16, 14:56    [19014774]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить