Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
AlesandraFioni Member Откуда: Київ Сообщений: 59 |
Добрый день. Есть табличка, у которой нет никаких зависимостей (т.е. ни обновляемых процедур, ни чего-либо ещё). Сегодня с утра появились новые данные непонятно откуда. Запрос ниже (найденный на хабре) показывает запросы, которые использовались по отношению к этой таблице, их план выполнения и т.д. SELECT SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1, ((CASE qs.statement_end_offset WHEN -1 THEN DATALENGTH(qt.TEXT) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2)+1) request, qs.execution_count, qs.total_logical_reads, qs.last_logical_reads, qs.total_logical_writes, qs.last_logical_writes, qs.total_worker_time, qs.last_worker_time, qs.total_elapsed_time/1000000 total_elapsed_time_in_S, qs.last_elapsed_time/1000000 last_elapsed_time_in_S, qs.last_execution_time, qp.query_plan FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp where SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1, ((CASE qs.statement_end_offset WHEN -1 THEN DATALENGTH(qt.TEXT) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2)+1) like '%table_name%' ORDER BY qs.total_worker_time DESC -- CPU time Выдал 5 запросов всего, из них 4 - это выборка, а 5й - инсерт INSERT [dbo].[table_name] VALUES(@Param000004,@Param000005,@Param000006,@Param000007,@Param000008) как узнать кто запускал этот инсерт, и откуда он был запущен? подозреваю, что какое-то обновление таблицы всё же есть, но не могу ничего найти. Заранее спасибо за помощь! |
4 ноя 15, 18:09 [18369569] Ответить | Цитировать Сообщить модератору |
Crimean Member Откуда: Сообщений: 13147 |
всякие профайлеры и аудиты - не предлагать? про триггера вообще молчу. просто, боюсь, такого рода информация нигде не накапливается и не хранится ее надо осознанно собирать, к чему готовиться "чуть заранее" тогда - узнаете и кто и откуда и когда |
4 ноя 15, 18:28 [18369630] Ответить | Цитировать Сообщить модератору |
AlesandraFioni Member Откуда: Київ Сообщений: 59 |
Crimean, да, профайлеры и аудиты в данном случае неактуальны. ставить триггер на инсерт? что прописывать в триггере, чтобы получить нужную инфо? т.е. если кто записывает, я ещё догадываюсь как сделать, а вот откуда и полный текст инсерта? |
4 ноя 15, 18:32 [18369641] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9646 |
|
||
4 ноя 15, 18:49 [18369714] Ответить | Цитировать Сообщить модератору |
AlesandraFioni Member Откуда: Київ Сообщений: 59 |
invm, simple :( |
4 ноя 15, 18:50 [18369717] Ответить | Цитировать Сообщить модератору |
Rankatan
Guest |
Попробуйте в логе транзакций глянуть:SELECT Ins.* FROM ( SELECT [Transaction Id], [Begin Time], SUSER_SNAME ([Transaction SID]) AS [User], [Transaction Name] FROM fn_dblog (NULL, NULL) WHERE [Transaction Name] like N'%INSERT%' ) Ins CROSS APPLY fn_dblog (NULL, NULL) Lg CROSS JOIN (VALUES('dbo.T')) TableName(TableName) --МЕНЯТЬ ТУТ CROSS APPLY (SELECT OBJECT_ID(TableName) TableID) TableID WHERE Lg.[Transaction ID]=Ins.[Transaction ID] AND ( Lg.[Lock Information] LIKE '%:'+CAST(TableID AS VARCHAR)+':%' OR AllocUnitName LIKE TableName+'%' ) |
4 ноя 15, 18:54 [18369734] Ответить | Цитировать Сообщить модератору |
AlesandraFioni Member Откуда: Київ Сообщений: 59 |
Rankatan, спасибо! но, к сожалению, ничего не показывает:( |
4 ноя 15, 18:58 [18369748] Ответить | Цитировать Сообщить модератору |
Rankatan
Guest |
Попробуйте определить время когда в таблицу вносились измененияSELECT last_user_update FROM sys.dm_db_index_usage_stats --сработает только если у таблы есть индекс WHERE object_id=OBJECT_ID('dbo.table','U') И если есть бекап за это время то развернуть. После чего скрипт постом выше. Но это все если модель восстановления не simple |
4 ноя 15, 19:16 [18369816] Ответить | Цитировать Сообщить модератору |
AlesandraFioni Member Откуда: Київ Сообщений: 59 |
Rankatan, индекса нет, но показало изменения в 8-32 сегодняшнего утра. В логе транзакций ничего нет... Нашла таки профайлер, никаких процессов в это время не нашла, более того поиском по названии таблицы тоже ничего не нашло... Но, триггер показал что данные инсертит другой сервер. Если данные инсертятся удалённым запросом - это можно как-то ещё отследить? |
5 ноя 15, 10:24 [18371830] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Нет никаких "удаленных запросов". Все запросы выполняются на сервере и отслеживаются профайлером. |
||
5 ноя 15, 10:28 [18371851] Ответить | Цитировать Сообщить модератору |
новые данные непонятно
Guest |
AlesandraFioni, так вы бы доступы разрулили бы если у вас сервер открыт всем ветрам и таблицы доступны любому желающему - дык все ровно так и работает. как задумано. или в триггере на вставку напишите raiserror - автор инсертов сам с вопросом придет. |
5 ноя 15, 10:35 [18371881] Ответить | Цитировать Сообщить модератору |
AlesandraFioni Member Откуда: Київ Сообщений: 59 |
Glory, но в профайлере ничего нет... |
5 ноя 15, 10:37 [18371890] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
"Не смогла отмониторить" не равно "ничего нет" |
||
5 ноя 15, 10:39 [18371905] Ответить | Цитировать Сообщить модератору |
AlesandraFioni Member Откуда: Київ Сообщений: 59 |
новые данные непонятно, с доступами проблем нет, с другого сервера мы забираем себе все нужные данные:) т.к. таблицей не я пользуюсь, обрубить обновление не выход. хотелось бы просто узнать серверными методами, а не разговорами:) |
5 ноя 15, 10:41 [18371915] Ответить | Цитировать Сообщить модератору |
AlesandraFioni Member Откуда: Київ Сообщений: 59 |
Glory, ок, пусть будет так:) |
5 ноя 15, 10:46 [18371948] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
Ищите виновника на этом сервере. |
||
5 ноя 15, 12:12 [18372469] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
показываю, что происходит при вставке с удаленного сервера вида insert into SISTO_2008.db1.dbo.t(id)... то же самое можно прочесть вот тут: Технологии Push и Pull при работе с linked servers в Microsoft SQL Server при этом действительно кэшируется план для INSERT [db1].[dbo].[t]([id]) VALUES(@Param000004) внутри к-ого курсор. а число выполнений плана равно числу вставляемых строк К сообщению приложен файл. Размер - 90Kb |
5 ноя 15, 12:29 [18372620] Ответить | Цитировать Сообщить модератору |
AlesandraFioni Member Откуда: Київ Сообщений: 59 |
o-o, спасибо огромное! видимо всё именно так и есть. |
5 ноя 15, 13:14 [18372929] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |