如何找出数据库中发生的变化,如修改函数,表索引,过程以及添加或删除列。
此查询中的
select * from sys.objects
where type IS NOT NULL
and modify_date between '2013-07-21' and '2013-07-29'
但是我在这里得到创建的对象列表和修改列表,但是如果我删除了任何对象,它就没有显示任何内容。
如何在特定日期之间获取数据库中发生的所有更改?
答案 0 :(得分:0)
尝试SQL的源代码管理解决方案。我之前使用过RedGate的SQL Source Control,它记录了这样的变化历史,包括谁做出了改变,以及改变了什么。
http://www.red-gate.com/products/sql-development/sql-source-control/
它有点贵,但它很好。我不知道是否有办法(特别是删除)只使用SQL本身。
答案 1 :(得分:0)
其中许多事件都记录在the default trace。
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';