2013-08-07 3 views
2

Мне нужно знать, что было изменено в моей базе данных с прошлой ночи. Возможно ли извлечь эти данные из файла LDF и создать новую базу данных, содержащую дельта?Как создать базу данных, содержащую только дельта со вчерашнего дня

Например, скажем, у меня есть таблица для пользователей, и теперь новый пользователь был добавлен, и один из пользователей обновил свой домашний адрес. Мне нужно создать новую базу данных, в которой таблица пользователей будет содержать две записи: 1. Новый пользователь (и добавить новый столбец, чтобы узнать, является ли это новым или обновить поле) 2. Пользователь, обновляющий свою запись (это будет приятно узнать, какая запись была обновлена)?

BTW, меня к серверам SQL, которые я могу использовать (2008 и 2012)

Заранее спасибо.

+0

Хотя это возможно, вы могли бы объяснить, зачем вам это нужно? – armitage

ответ

0

Как насчет триггеров при вставке, обновлении и удалении? Вы можете вставить эти данные в таблицы истории или все, что вы хотите назвать, и иметь запросы или представления, которые проверяют только отступление от вашего требования времени. Вот пример (kt2008 - имя db, шасси - мое имя организации):

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;