其中一个表存在问题。该表已被更改,并且已从表中删除了一列。 根据我的知识,数据库中有2次机会发生这种情况。
我需要确定在特定时间内是否有运行的alter语句(可能包含用户信息)
答案 0 :(得分: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;
答案 1 :(得分: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
答案 2 :(得分: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')