我需要知道自昨晚以来我的数据库发生了什么变化。是否可以从 LDF 文件中提取这些数据并构建一个包含增量的新数据库?
例如,假设我有一个用户表,现在添加了一个新用户,其中一个用户更新了他的家庭住址。我需要能够建立一个新的数据库,用户表将包含两条记录 1. 新用户(并添加一个新列以了解它是新的还是更新字段) 2. 更新他的记录的用户(它将是很高兴知道哪条记录已更新)?
顺便说一句,我必须使用可以使用的 SQL 服务器(2008 年和 2012 年)
提前致谢。
我需要知道自昨晚以来我的数据库发生了什么变化。是否可以从 LDF 文件中提取这些数据并构建一个包含增量的新数据库?
例如,假设我有一个用户表,现在添加了一个新用户,其中一个用户更新了他的家庭住址。我需要能够建立一个新的数据库,用户表将包含两条记录 1. 新用户(并添加一个新列以了解它是新的还是更新字段) 2. 更新他的记录的用户(它将是很高兴知道哪条记录已更新)?
顺便说一句,我必须使用可以使用的 SQL 服务器(2008 年和 2012 年)
提前致谢。
我建议查看“更改数据捕获”功能:http ://technet.microsoft.com/en-us/library/cc645937.aspx
此功能仅适用于 SQL Server 企业版。
或者试试这个 SQL Server 标准版的 Codeplex 项目:https ://standardeditioncdc.codeplex.com/
插入、更新和删除的触发器呢?您可以将此数据插入历史表或任何您想要调用的数据中,并拥有仅根据您的时间要求进行检查的查询或视图。这是一个示例(kt2008 是数据库名称,机箱是我的实体名称):
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;