如何找出数据库中发生的更改,例如修改函数、表索引、过程以及添加或删除列。
在此查询中
select * from sys.objects
where type IS NOT NULL
and modify_date between '2013-07-21' and '2013-07-29'
但是在这里我得到了创建的对象列表和修改列表,但是如果我删除了任何对象,它不会显示任何东西。
如何获取特定日期之间数据库中发生的所有更改?
如何找出数据库中发生的更改,例如修改函数、表索引、过程以及添加或删除列。
在此查询中
select * from sys.objects
where type IS NOT NULL
and modify_date between '2013-07-21' and '2013-07-29'
但是在这里我得到了创建的对象列表和修改列表,但是如果我删除了任何对象,它不会显示任何东西。
如何获取特定日期之间数据库中发生的所有更改?
尝试 SQL 的源代码控制解决方案。我以前用过 RedGate 的 SQL 源代码控制,它记录了这样的更改历史,包括谁进行了更改,以及更改了什么。
http://www.red-gate.com/products/sql-development/sql-source-control/
它有点贵,但它很好。我不知道是否有办法仅使用 SQL 本身来做到这一点(尤其是删除)。
许多此类事件都记录在默认跟踪中。
DECLARE @path NVARCHAR(260);
SELECT
@path = REVERSE(SUBSTRING(REVERSE([path]),
CHARINDEX(CHAR(92), REVERSE([path])), 260)) + N'log.trc'
FROM sys.traces
WHERE is_default = 1;
SELECT
LoginName,
HostName,
StartTime,
ObjectName,
TextData -- may or may not be populated
FROM sys.fn_trace_gettable(@path, DEFAULT)
WHERE EventClass IN
(
164, -- object:altered
46, -- object:created
47 -- object:deleted
)
AND StartTime >= '20130721' AND StartTime < '20130730';