Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Узнать текст запроса и Host [MSSQL]


ivc_andr ©   (2005-06-16 14:23:00) 

Ув мастера! Подскажите пожалуйста!
Задача: Я пишу тригер в MSSQL, который во время апдэйта поля записывает данные в другую таблицу (короче веду ЛОГ). Как мне узнать и записать в таблицу(ЛОГ) текст запроса, которым делался этот апдэйт и Host(ну там IP-ник или имя машины) с которой он проводился.
Буду очень признателен. ОЧЕНЬ НАДО!


evvcom   (2005-06-16 16:18:00) [1]


> работает с базой куча клиентов, в таблице начали стираться
> данные и я не могу вычислить почему

Вот для этого не надо давать пользователям полномочия напрямую работать с таблицами. Есть хранимые процедуры, есть вьюхи, а гранты на таблицы для всех пользователей надо поубивать. Имхо.


Nikolay M.   (2005-06-16 16:07:00) [2]


> Я наверное не совсем понял, текст какого запроса надо логгировать?

Да вообще, задача, имхо, довольно бредовая. Особенно учитывая цель, ради которой все это затевается.
Воспользоваться [8] и не изобретать велосипед.


Ega23   (2005-06-16 16:04:00) [3]

А тогда в чём, собственно говоря, проблема?


ivc_andr   (2005-06-16 15:50:00) [4]

Я наверное не совсем понял, текст какого запроса надо логгировать?
А если с клиента запускается ХП, которая делает update в 10 таблицах? Что должно записаться? Строка 'exec s_myproc @param1=value1 ....' или все 10 апдейтов?


нужно записать текст того запроса, который меняет значение нужного поля, для чего я тригер и начал писать. Нужно знать, какой запрос портит данные


Ega23   (2005-06-16 15:43:00) [5]

Очевидно, обычный UPDATE. А почему ЕМ такой особенный?

Я наверное не совсем понял, текст какого запроса надо логгировать?
А если с клиента запускается ХП, которая делает update в 10 таблицах? Что должно записаться? Строка 'exec s_myproc @param1=value1 ....' или все 10 апдейтов?

"Не могу понять..." (с)


Nikolay M.   (2005-06-16 15:40:00) [6]


> мне же нужно вычислить действия в момент апдейта.

Запустить профайлер с необходимыми фильтрами?


Nikolay M.   (2005-06-16 15:38:00) [7]


> какой текст запроса должен отписаться
> в твою таблицу протокола, если ты в Enterprise Manager'е
> запись ручками поправишь?

Очевидно, обычный UPDATE. А почему ЕМ такой особенный?


> ivc_andr   (16.06.05 14:23)

Имхо, не стоит создавать проблемы там, где их нет. Для анализа Transaction log-а можно воспользоваться одной из существующих программ, например, ApexSQL.


ivc_andr   (2005-06-16 15:35:00) [8]

Позволь полюбопытствовать: если это триггер, то какой текст запроса должен отписаться в твою таблицу протокола, если ты в Enterprise Manager'е запись ручками поправишь?

работает с базой куча клиентов, в таблице начали стираться данные и я не могу вычислить почему, поэтому мне и нужно знать как и откуда это происходит.
sp_who и (select sp.loginame, sp.hostname, sp.program_name, sp.status, sp.sid, spid
from master.dbo.sysprocesses as sp
inner join master.dbo.sysdatabases as sd on sp.dbid=sd.dbid
where sd."Name"='TestADOMD')
отображают всю активность с базой, мне же нужно вычислить действия в момент апдейта. По какому признаку его вытягивать из всех подключений к базе


Stanislav   (2005-06-16 15:33:00) [9]

Ega23 ©   (16.06.05 15:01) [4]
Наверное Update...


Stanislav   (2005-06-16 15:30:00) [10]

HOST_NAME() - машина
APP_NAME() - программа
SUSER_SNAME() -Юзер


Ega23   (2005-06-16 15:01:00) [11]

Так я это понимаю. А как тогда из Transaction Log выдернуть этот текст и записать в тадлицу....Задача такая

Позволь полюбопытствовать: если это триггер, то какой текст запроса должен отписаться в твою таблицу протокола, если ты в Enterprise Manager'е запись ручками поправишь?


Ярослав   (2005-06-16 14:47:00) [12]

Под MS SQL попробуй
select sp.loginame, sp.hostname, sp.program_name, sp.status, sp.sid, spid
from master.dbo.sysprocesses as sp
inner join master.dbo.sysdatabases as sd on sp.dbid=sd.dbid
where sd."Name"='TestADOMD'
Где TestADOMD - имя базы


ivc_andr   (2005-06-16 14:34:00) [13]

А НАФИГА???? У тебя сам сервер Transaction Log ведёт.

Так я это понимаю. А как тогда из Transaction Log выдернуть этот текст и записать в тадлицу....Задача такая


Ega23   (2005-06-16 14:27:00) [14]

которым делался этот апдэйт и Host(ну там IP-ник или имя машины)

exec sp_who

Как мне узнать и записать в таблицу(ЛОГ) текст запроса, которым делался этот апдэйт

А НАФИГА???? У тебя сам сервер Transaction Log ведёт.


Наверх

Титульная страница Поиск, карта сайта Написать письмо