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

Откуда:
Сообщений: 1358
Доброе время суток! Нужна помощь
Ранее никогда с триггерами не работал и вот пришло время и их использовать. И вот доиспользовался:
CREATE TRIGGER [ddltrg_CREATE_TABLE_LOG]
ON DATABASE 
FOR CREATE_TABLE
AS
	SET NOCOUNT ON 
	DECLARE @xmlEventData XML 
    SET @xmlEventData = EVENTDATA() 
	INSERT INTO DDL_Trigger_Log.dbo.tblDDLEventLog
  (
    EventTime
   ,EventType
   ,ServerName
   ,DatabaseName
   ,ObjectType
   ,ObjectName
   ,UserName
   ,CommandText
  )
	SELECT REPLACE(CONVERT(VARCHAR(50),@xmlEventData.query('data(/EVENT_INSTANCE/PostTime)')),'T',' ')
      ,CONVERT(VARCHAR(15),@xmlEventData.query('data(/EVENT_INSTANCE/EventType)'))
      ,CONVERT(VARCHAR(25),@xmlEventData.query('data(/EVENT_INSTANCE/ServerName)'))
      ,CONVERT(VARCHAR(25),@xmlEventData.query('data(/EVENT_INSTANCE/DatabaseName)'))
      ,CONVERT(VARCHAR(25),@xmlEventData.query('data(/EVENT_INSTANCE/ObjectType)'))
      ,CONVERT(VARCHAR(25),@xmlEventData.query('data(/EVENT_INSTANCE/ObjectName)'))
      ,CONVERT(VARCHAR(15),@xmlEventData.query('data(/EVENT_INSTANCE/UserName)'))
      ,CONVERT(VARCHAR(MAX),@xmlEventData.query('data(/EVENT_INSTANCE/TSQLCommand/CommandText)')) 
GO


я это нашел и передрал с какого-то сайта. Создал триггер - и мгновенно клиентские программы потеряли доступ к таблицам на сервере... Толком не успел потестить, так как видя такой беспредел - триггер грохнул... Таблицы стали доступными
Снова создал триггер - снова таблицы стали недоступными... Пока еще не знаю, все ли таблицы недоступны, так как эксперементировать крайне опасно... То есть я пока не знаю в чем особенности триггера, в область видимости которого входит вся база данных, но может знает кто просто как сделать триггер, который срабатывает, если в какую-то таблицу в базе данных внесли изменения... Данный триггер, видимо должен сработать на создание таблицы... Но как то странно он себя ведет...
Думаю попробовать оторваться от удаленного сервера и поиграться с локальным серваком, может что и выйдет путное...
29 июн 12, 13:51    [12794393]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
iap
Member

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

что означает для Вас "в какую-то таблицу в базе данных внесли изменения"?
Изменили данные, которые в ней хранятся?
Или изменили структуру таблицы (добавили/удалили колонку, изменили тип колонки и т.п.)?
В первом случае используются DML триггеры,
а во втором - DDL триггеры.
Совершенно разные вещи.
Вы здесь показали попытку создания DDL триггера. Оно Вам надо?
29 июн 12, 13:56    [12794423]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
Glory
Member

Откуда:
Сообщений: 104751
Galadriel75
Толком не успел потестить, так как видя такой беспредел - триггер грохнул... Таблицы стали доступными
Снова создал триггер - снова таблицы стали недоступными...

А что это такое "таблицы стали недоступны" ? Это такое сообщение об ошибке ?
29 июн 12, 13:57    [12794428]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
Galadriel75
Member

Откуда:
Сообщений: 1358
iap
Galadriel75,

что означает для Вас "в какую-то таблицу в базе данных внесли изменения"?
Изменили данные, которые в ней хранятся?
Или изменили структуру таблицы (добавили/удалили колонку, изменили тип колонки и т.п.)?
В первом случае используются DML триггеры,
а во втором - DDL триггеры.
Совершенно разные вещи.
Вы здесь показали попытку создания DDL триггера. Оно Вам надо?


только изменили данные, на реструктуризацию реакция не нужна...
29 июн 12, 14:05    [12794492]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
Glory
Member

Откуда:
Сообщений: 104751
Galadriel75
только изменили данные,

А разве изменение данных производится командой CREATE_TABLE, для которой вы создали триггер ?
29 июн 12, 14:06    [12794504]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
Galadriel75
Member

Откуда:
Сообщений: 1358
Glory
Galadriel75
Толком не успел потестить, так как видя такой беспредел - триггер грохнул... Таблицы стали доступными
Снова создал триггер - снова таблицы стали недоступными...

А что это такое "таблицы стали недоступны" ? Это такое сообщение об ошибке ?

ну клиентское приложение сказало - такой-то объект недоступен - таким-то объектом оказалась таблица в конкретной базе данных...
29 июн 12, 14:07    [12794505]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
Glory
Member

Откуда:
Сообщений: 104751
Galadriel75
ну клиентское приложение сказало - такой-то объект недоступен

И как приложение это определило ?
29 июн 12, 14:07    [12794513]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
Galadriel75
Member

Откуда:
Сообщений: 1358
Glory
Galadriel75
только изменили данные,

А разве изменение данных производится командой CREATE_TABLE, для которой вы создали триггер ?

это я только привел то, что нашел на сайте
я создал триггер, потом запустил свою прогу, в которой никакие таблицы не создаются, так вот пока существовал триггер никакие таблицы не были доступны...
этот триггер сработать должен на создание таблицы, а он непонятно что вытворил...
29 июн 12, 14:09    [12794531]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
Galadriel75
Member

Откуда:
Сообщений: 1358
Glory
Galadriel75
ну клиентское приложение сказало - такой-то объект недоступен

И как приложение это определило ?

в ADOQuery запрос SELECT ... ... .... FROM ... ... .... Query.Open сгенерировало исключение...
29 июн 12, 14:11    [12794554]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
is_me
Member

Откуда: Нижний Новгород
Сообщений: 165
Galadriel75,

А инструкции которые в триггере долго выполняются?
может быть клиентское приложение написано так, что постоянно создаются временные таблицы и перегружается все...
29 июн 12, 14:11    [12794559]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
Glory
Member

Откуда:
Сообщений: 104751
Galadriel75
это я только привел то, что нашел на сайте

Вы бы тогда на этом сайте почитали сначала, для каких событий этот триггер

Galadriel75
я создал триггер, потом запустил свою прогу, в которой никакие таблицы не создаются, так вот пока существовал триггер никакие таблицы не были доступны...

Значит у вас кривое приложение
Или оно делает то, о чем вы не в курсе. Например, создает таки таблицы.

Galadriel75
этот триггер сработать должен на создание таблицы, а он непонятно что вытворил...

С чего вы решили, что этот триггер вообще срабатывал ?
29 июн 12, 14:13    [12794574]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
iap
Member

Откуда: Москва
Сообщений: 47061
Galadriel75
Glory
пропущено...

А разве изменение данных производится командой CREATE_TABLE, для которой вы создали триггер ?

это я только привел то, что нашел на сайте
я создал триггер, потом запустил свою прогу, в которой никакие таблицы не создаются, так вот пока существовал триггер никакие таблицы не были доступны...
этот триггер сработать должен на создание таблицы, а он непонятно что вытворил...
Надо сначала читать, например, вот тут: http://msdn.microsoft.com/ru-ru/library/ms189799(v=sql.100)
29 июн 12, 14:13    [12794578]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
Glory
Member

Откуда:
Сообщений: 104751
Galadriel75
в ADOQuery запрос SELECT ... ... .... FROM ... ... .... Query.Open сгенерировало исключение...

Серверного исключения с текстом "такой-то объект недоступен " не существует.
29 июн 12, 14:14    [12794584]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
Galadriel75
Member

Откуда:
Сообщений: 1358
is_me
Galadriel75,

А инструкции которые в триггере долго выполняются?
может быть клиентское приложение написано так, что постоянно создаются временные таблицы и перегружается все...



ООООООООООООООООООООООООООО
В самую точку! Дофигища клиентских машин, на многих из них клиенты создают времянки.... Вот наверно это и стало причиной :)
Попробую дальше покопать :)
Спасибо за направление копания :)
29 июн 12, 14:15    [12794593]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
Galadriel75
Member

Откуда:
Сообщений: 1358
Glory
Galadriel75
в ADOQuery запрос SELECT ... ... .... FROM ... ... .... Query.Open сгенерировало исключение...

Серверного исключения с текстом "такой-то объект недоступен " не существует.

ну как то так... это не дословно...
29 июн 12, 14:16    [12794607]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
Glory
Member

Откуда:
Сообщений: 104751
Galadriel75
ну как то так... это не дословно...

- Абрам, говорят ты выиграл в лоторею 100 000 ?!
- Ну, не в лоторею, а в преферанс. И не выиграл, а проиграл. А так все верно.
29 июн 12, 14:18    [12794629]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
Galadriel75
Member

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

CREATE TRIGGER [ddltrg_CREATE_TABLE_LOG]
ON DATABASE 
FOR UPDATE_TABLE
AS
	SET NOCOUNT ON 
	DECLARE @xmlEventData XML 
    SET @xmlEventData = EVENTDATA() 
	INSERT INTO DDL_Trigger_Log.dbo.tblDDLEventLog
  (
    EventTime
   ,EventType
   ,ServerName
   ,DatabaseName
   ,ObjectType
   ,ObjectName
   ,UserName
   ,CommandText
  )
	SELECT REPLACE(CONVERT(VARCHAR(50),@xmlEventData.query('data(/EVENT_INSTANCE/PostTime)')),'T',' ')
      ,CONVERT(VARCHAR(15),@xmlEventData.query('data(/EVENT_INSTANCE/EventType)'))
      ,CONVERT(VARCHAR(25),@xmlEventData.query('data(/EVENT_INSTANCE/ServerName)'))
      ,CONVERT(VARCHAR(25),@xmlEventData.query('data(/EVENT_INSTANCE/DatabaseName)'))
      ,CONVERT(VARCHAR(25),@xmlEventData.query('data(/EVENT_INSTANCE/ObjectType)'))
      ,CONVERT(VARCHAR(25),@xmlEventData.query('data(/EVENT_INSTANCE/ObjectName)'))
      ,CONVERT(VARCHAR(15),@xmlEventData.query('data(/EVENT_INSTANCE/UserName)'))
      ,CONVERT(VARCHAR(MAX),@xmlEventData.query('data(/EVENT_INSTANCE/TSQLCommand/CommandText)')) 
GO



и что - это должно сработать на любые Update запросы к любой БД ? сейчас попробую :)
29 июн 12, 14:29    [12794731]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
baracs
Member

Откуда: Москва
Сообщений: 7206
Galadriel75
is_me
Galadriel75,

А инструкции которые в триггере долго выполняются?
может быть клиентское приложение написано так, что постоянно создаются временные таблицы и перегружается все...


ООООООООООООООООООООООООООО
В самую точку! Дофигища клиентских машин, на многих из них клиенты создают времянки....
Где, говорите, они их создают?
29 июн 12, 14:31    [12794745]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
Galadriel75
Member

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

и если от кучи клиентов идет лавина апдейтов - и если триггер все еще обрабатывает текущее событие, а тут новые ломятся - они что в очередь как-то выстраиваются??? Это новое для меня, я до этого с базами только на уровне хоть и навороченных но все же SQL запросах и работал - даже хранимок почти не делал...
29 июн 12, 14:32    [12794762]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
Galadriel75
Member

Откуда:
Сообщений: 1358
baracs
Galadriel75
пропущено...


ООООООООООООООООООООООООООО
В самую точку! Дофигища клиентских машин, на многих из них клиенты создают времянки....
Где, говорите, они их создают?

от многих клиентов на сервак идет запрос CREATE TABLE #blablabla
а как клиент отработает - идет drop #blablabla - хотя вроде где-то видел, что сервак и без моего дропа от времянки избавится сам, но все же...
29 июн 12, 14:35    [12794782]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
Glory
Member

Откуда:
Сообщений: 104751
Galadriel75
и что - это должно сработать на любые Update запросы к любой БД ? сейчас попробую :)

Еще один "выдумыватель синтаксиса". Вместо того, чтобы взять хелп и прочитать.
29 июн 12, 14:35    [12794797]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
Galadriel75
Member

Откуда:
Сообщений: 1358
Glory
Galadriel75
и что - это должно сработать на любые Update запросы к любой БД ? сейчас попробую :)

Еще один "выдумыватель синтаксиса". Вместо того, чтобы взять хелп и прочитать.

да не нашел я еще пока то что нужно... почитал про общий синтаксис.... а так или плохо искал .... да вообще не дают искать - я ща на работе так я делаю то, что шеф велел, а потом чутка отвлекусь и в поиски... вот урывками... поэтому чувствую, что спонтанно и толком не зная сути можно породить геморой, а не триггер :)
29 июн 12, 14:39    [12794835]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
Glory
Member

Откуда:
Сообщений: 104751
Galadriel75
да не нашел я еще пока то что нужно... почитал про общий синтаксис....

Прочитайте сначала, что такое DDL и DML
29 июн 12, 14:41    [12794869]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
iap
Member

Откуда: Москва
Сообщений: 47061
Galadriel75
Glory
пропущено...

Еще один "выдумыватель синтаксиса". Вместо того, чтобы взять хелп и прочитать.

да не нашел я еще пока то что нужно... почитал про общий синтаксис.... а так или плохо искал .... да вообще не дают искать - я ща на работе так я делаю то, что шеф велел, а потом чутка отвлекусь и в поиски... вот урывками... поэтому чувствую, что спонтанно и толком не зная сути можно породить геморой, а не триггер :)
Я ж ссылку дал и про аббревиатуры DDL и DML упомянул... Вам этого мало?!
29 июн 12, 14:42    [12794878]     Ответить | Цитировать Сообщить модератору
 Re: Триггеры MS SQL Server  [new]
Shakill
Member

Откуда: мск
Сообщений: 1882
Galadriel75
Glory
пропущено...

Еще один "выдумыватель синтаксиса". Вместо того, чтобы взять хелп и прочитать.

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


вам же выше iap дал ссылку на статью про CREATE TRIGGER, там и примеры есть.
29 июн 12, 14:42    [12794880]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить