2016-08-26 1 views
1

Возникла проблема с одной из таблиц. Таблица была изменена, и столбец удален из таблицы. Есть 2 шанса на то, что это происходит в базе данных, согласно моим знаниям.Столбец удален из таблицы SQL 2008 R2

  1. изменения кода, развернутые один из нашего коллеги
  2. Кто-то вручную изменили таблицу.

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

+0

Это не собирается, чтобы помочь вам, но я нашел предложения в этой статье [Аарон] Бертран (https://www.mssqltips.com/sqlservertip/2085/sql-server-ddl-triggers-to-track-all-database-changes /) очень полезно в отслеживании изменений, подобных этому. Поэтому, хотя сейчас это не помогает, это может помочь вам в той же ситуации в будущем. – GarethD

ответ

4

Вы могли бы быть в состоянии подобрать внесшее изменение схемы из трассировки по умолчанию:

--query all default trace rollover files for schema modifications 
SELECT 
    trace.DatabaseName 
    ,trace.ObjectName 
    ,te.name AS EventName 
    ,tsv.subclass_name 
    ,trace.EventClass 
    ,trace.EventSubClass 
    ,trace.StartTime 
    ,trace.EndTime 
    ,trace.NTDomainName 
    ,trace.NTUserName 
    ,trace.HostName 
    ,trace.ApplicationName 
    ,trace.Spid 
FROM (SELECT REVERSE(STUFF(REVERSE(path), 1, CHARINDEX(N'\', REVERSE(path)), '')) + N'\Log.trc' AS path 
    FROM sys.traces WHERE is_default = 1) AS default_trace_path 
CROSS APPLY fn_trace_gettable(default_trace_path.path, DEFAULT) AS trace 
JOIN sys.trace_events AS te ON 
    trace.EventClass=te.trace_event_id 
JOIN sys.trace_subclass_values AS tsv ON 
    tsv.trace_event_id = EventClass 
    AND tsv.subclass_value = trace.EventSubClass 
WHERE te.name = N'Object:Altered' 
    AND tsv.subclass_name = 'Commit' 
ORDER BY trace.StartTime; 
+0

Сколько старых данных доступно с использованием вышеуказанного запроса? –

+0

@PareshJ, трассировка по умолчанию - это трассировка опроса с максимум 5 файлами по 20 Мбайт каждая, поэтому до 100 МБ данных. Запустите запрос 'SELECT * FROM sys.traces WHERE is_default = 1;', чтобы увидеть эти свойства. –

+0

@ DanGuzman: Спасибо за информацию о максимальном размере, прослеживается ли последняя даже после перезагрузки сервера – TheGameiswar

0

Вы также можете запросить журнал транзакций базы данных. если база данных находится в модели полного восстановления ..

Я удалил столбец таблицы и ниже мои результаты испытаний ..

create table t3 
(
id int, 
id1 int 
) 

alter table t3 
drop column id1 

Теперь, когда я запрос TLOG я получить ниже информацию ..

select suser_sname([transaction sid]),operation,[transaction name],[begin time],[lock information],description 
from fn_dblog(null,null) where [lock information] like '%place object_id of table here%' 


username   operation  transaction name begin time    lock information        description 
somename   LOP_BEGIN_XACT ALTER TABLE  2016/08/26 18:52:52:763 NULL          ALTER TABLE;0x0105000000000005150000008c052d5705824bfa733f63aedf280000 
null    LOP_LOCK_XACT NULL     NULL     ACQUIRE_LOCK_SCH_M OBJECT: 6:1922105888:0  
0

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

SELECT 
    SO.Name 
    ,SS.name 
    ,SO.type_desc 
    ,SO.create_date 
    ,SO.modify_date 
FROM sys.objects AS SO 
INNER JOIN sys.schemas AS SS 
    ON SS.schema_id = SO.schema_id 
WHERE DATEDIFF(D,modify_date, GETDATE()) < 14 
AND TYPE IN ('P','U')