Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как я могу узнать кто и когда UPDATE проведить в конкретному таблицу или на базе?  [new]
guest0550
Member

Откуда:
Сообщений: 43
У меня 3 пользователи в один базе. Я могу ли узнать кто и когда проведили UPDATE или INSERT
18 дек 19, 07:52    [22042712]     Ответить | Цитировать Сообщить модератору
 Re: Как я могу узнать кто и когда UPDATE проведить в конкретному таблицу или на базе?  [new]
PsyMisha
Member

Откуда: другая столица
Сообщений: 746
guest0550,

Попробуйте поиграться с этим

SELECT [Transaction Name]
    ,   SUSER_SNAME([Transaction SID]) AS UserName
    ,   [Begin Time]
    ,   Operation
    ,   [Transaction ID]
    FROM fn_dblog(NULL, NULL)
    WHERE --[Transaction ID] = '0000:000002e3' -- @TransactionID
         [Transaction Name] LIKE 'INSERT%'
        --AND Operation = 'LOP_BEGIN_XACT'


насчет узнать конкретную таблицу - можно попробовать так:

DECLARE @ObjectName SYSNAME
DECLARE @TransactionID NVARCHAR(500)
SET @ObjectName = 'dbo.Example'
-- Your schema qualified table name here
SET @TransactionID = ( SELECT TOP 1 [Transaction ID]
                        FROM fn_dblog(NULL, NULL)
                        WHERE AllocUnitName = @ObjectName
                        ORDER BY [Transaction ID] DESC
                     )
PRINT @TransactionID


Узнав TransactionID - потом вставить в 1й запрос
18 дек 19, 08:55    [22042733]     Ответить | Цитировать Сообщить модератору
 Re: Как я могу узнать кто и когда UPDATE проведить в конкретному таблицу или на базе?  [new]
PsyMisha
Member

Откуда: другая столица
Сообщений: 746
PsyMisha,

Уточнение - выполняйте скрипты в контексте искомой Базы Данных - либо параметры на вход fn_dblog() поменяйте
18 дек 19, 08:57    [22042734]     Ответить | Цитировать Сообщить модератору
 Re: Как я могу узнать кто и когда UPDATE проведить в конкретному таблицу или на базе?  [new]
guest0550
Member

Откуда:
Сообщений: 43
Результат первого запроса

Msg 229, Level 14, State 5, Line 1
The SELECT permission was denied on the object 'fn_dblog', database 'mssqlsystemresource', schema 'sys'.
18 дек 19, 09:00    [22042736]     Ответить | Цитировать Сообщить модератору
 Re: Как я могу узнать кто и когда UPDATE проведить в конкретному таблицу или на базе?  [new]
guest0550
Member

Откуда:
Сообщений: 43
Результат второго запроса


Msg 229, Level 14, State 5, Line 17
The SELECT permission was denied on the object 'fn_dblog', database 'mssqlsystemresource', schema 'sys'.
18 дек 19, 09:01    [22042737]     Ответить | Цитировать Сообщить модератору
 Re: Как я могу узнать кто и когда UPDATE проведить в конкретному таблицу или на базе?  [new]
PsyMisha
Member

Откуда: другая столица
Сообщений: 746
guest0550,

а у вас точно права dbo на базе? Например - через неявное прокидывание серверной роли sysadmins
18 дек 19, 09:03    [22042739]     Ответить | Цитировать Сообщить модератору
 Re: Как я могу узнать кто и когда UPDATE проведить в конкретному таблицу или на базе?  [new]
guest0550
Member

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

Да у меня права sysadmin который - sa
18 дек 19, 09:06    [22042740]     Ответить | Цитировать Сообщить модератору
 Re: Как я могу узнать кто и когда UPDATE проведить в конкретному таблицу или на базе?  [new]
guest0550
Member

Откуда:
Сообщений: 43


К сообщению приложен файл. Размер - 79Kb
18 дек 19, 09:11    [22042745]     Ответить | Цитировать Сообщить модератору
 Re: Как я могу узнать кто и когда UPDATE проведить в конкретному таблицу или на базе?  [new]
PsyMisha
Member

Откуда: другая столица
Сообщений: 746
guest0550,

Попробуйте явно выбрать БД, в контексте которой выполняются скрипты.
Или в выпадающем списке сверху, либо явно указав USE [имя_моей_бд] в самом начале моих скриптов
18 дек 19, 09:18    [22042749]     Ответить | Цитировать Сообщить модератору
 Re: Как я могу узнать кто и когда UPDATE проведить в конкретному таблицу или на базе?  [new]
guest0550
Member

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

такой результат дает.
18 дек 19, 09:25    [22042752]     Ответить | Цитировать Сообщить модератору
 Re: Как я могу узнать кто и когда UPDATE проведить в конкретному таблицу или на базе?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
на картинке логин в явном виде: test.
никакой не sa.
под sa только ОЕ открыт
18 дек 19, 10:55    [22042844]     Ответить | Цитировать Сообщить модератору
 Re: Как я могу узнать кто и когда UPDATE проведить в конкретному таблицу или на базе?  [new]
guest0550
Member

Откуда:
Сообщений: 43
Yasha123,
Да точно вы прав. Но результат запроса пустой :(

К сообщению приложен файл. Размер - 86Kb
18 дек 19, 11:02    [22042851]     Ответить | Цитировать Сообщить модератору
 Re: Как я могу узнать кто и когда UPDATE проведить в конкретному таблицу или на базе?  [new]
PsyMisha
Member

Откуда: другая столица
Сообщений: 746
Yasha123,

+1
18 дек 19, 11:03    [22042852]     Ответить | Цитировать Сообщить модератору
 Re: Как я могу узнать кто и когда UPDATE проведить в конкретному таблицу или на базе?  [new]
PsyMisha
Member

Откуда: другая столица
Сообщений: 746
guest0550,

Попробуйте поменять не DELETE в фильтре WHERE - а TRUNCATE, или INSERT и тп

Вообще, конечно, сложновато так работать. Я вам кинул наводку, в надежде, что вы возьмете ее за основу, и дальше разовьете мысль, а вы и с основами плаваете...
18 дек 19, 11:05    [22042858]     Ответить | Цитировать Сообщить модератору
 Re: Как я могу узнать кто и когда UPDATE проведить в конкретному таблицу или на базе?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
да что он выловит, база явно в простой модели...
18 дек 19, 11:11    [22042872]     Ответить | Цитировать Сообщить модератору
 Re: Как я могу узнать кто и когда UPDATE проведить в конкретному таблицу или на базе?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
и вообще allocunitname надо с лайком вылавливать.
там же всегда индекс в явном виде фигурирует:
sys.sysrscols.clst
sys.sysschobjs.clst
dbo.execution_log.PK_execution_log_id
sys.syscolpars.nc
18 дек 19, 11:20    [22042882]     Ответить | Цитировать Сообщить модератору
 Re: Как я могу узнать кто и когда UPDATE проведить в конкретному таблицу или на базе?  [new]
PsyMisha
Member

Откуда: другая столица
Сообщений: 746
Yasha123,

У меня были ситуации когда успевал и из SIMPLE'а еще до рециклинга журнала выловить все, что надо этим способом. И палили разрабов, которые транкейтили таблицы, и задним числом уже разбирались, какой процесс в прошлом данные первый вставлять начал и т.п.
18 дек 19, 12:45    [22042983]     Ответить | Цитировать Сообщить модератору
 Re: Как я могу узнать кто и когда UPDATE проведить в конкретному таблицу или на базе?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
мне кажется, у него симпл и сервер как раз недавно перегрузили.
т.е. в логе просто пусто.
хотя еще более правдоподобна версия,
что там НЕ кучи, а ищет он не на like, а на точное совпадение AllocUnitName.
(ну в смысле это ваш скрипт ищет по имени таблицы без like,
а он тупо скопировал, вот ничего и не находится)
18 дек 19, 12:54    [22042999]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить