我需要知道自昨晚以来我的数据库发生了什么变化。 是否可以从LDF文件中提取此数据并构建包含增量的新数据库?
例如,假设我有一个用户表,现在,添加了一个新用户,其中一个用户更新了他的家庭住址。我需要能够构建一个新的数据库,用户表将包含两个记录 1.新用户(并添加新列以了解它是新的还是更新字段) 2.更新记录的用户(知道哪条记录已更新会很好吗?)
顺便说一句, 我必须使用SQL服务器(2008年和2012年)
提前致谢。
答案 0 :(得分:0)
我建议查看“更改数据捕获”功能:http://technet.microsoft.com/en-us/library/cc645937.aspx
此功能仅适用于SQL Server Enterprise Edition 或者尝试SQL Server Standard Edition的这个Codeplex项目:https://standardeditioncdc.codeplex.com/
答案 1 :(得分:0)
插入,更新和删除触发器怎么样?您可以将此数据插入历史记录表或任何要调用它的数据中,并使查询或视图仅检查您的时间要求。这是一个例子(kt2008是db名称,chassis是我的实体名称):
DROP TRIGGER IF EXISTS kt2008.chassis__ai;
DROP TRIGGER IF EXISTS kt2008.chassis__au;
DROP TRIGGER IF EXISTS kt2008.chassis__bd;
CREATE TRIGGER kt2008.chassis__ai AFTER INSERT ON kt2008.chassis FOR EACH ROW
INSERT INTO kt2008.chassis_history SELECT 'insert', NULL, NOW(), d.*
FROM kt2008.chassis AS d WHERE d.id = NEW.id;
CREATE TRIGGER kt2008.chassis__au AFTER UPDATE ON kt2008.chassis FOR EACH ROW
INSERT INTO kt2008.chassis_history SELECT 'update', NULL, NOW(), d.*
FROM kt2008.chassis AS d WHERE d.id = NEW.id;
CREATE TRIGGER kt2008.chassis__bd BEFORE DELETE ON kt2008.chassis FOR EACH ROW
INSERT INTO kt2008.chassis_history SELECT 'delete', NULL, NOW(), d.*
FROM kt2008.chassis AS d WHERE d.id = OLD.id;