Репликация также реплицирует ваши удаления. Однако удаление исключений из базы данных архива не может привести к проблемам в строке по уникальным индексам, где значение действительно в производственной базе данных, но не является допустимым в базе данных архива, поскольку значения уже существуют там. Если ваш дизайн означает, что это не является проблемой, то простой триггер в таблице производства будет делать это для вас:
CREATE TRIGGER TR_MyTable_ToArchive ON MyTable FOR INSERT, UPDATE AS
BEGIN
SET ROW_COUNT OFF
-- First inserts
SET IDENTITY_INSERT ArchiveDB..MyTable ON -- Only if identity column is used
INSERT INTO ArchiveDB..MyTable(MyTableKey, Col1, Col2, Col3, ...)
SELECT MyTableKey, Col1, Col2, Col3, ...
FROM inserted i LEFT JOIN deleted d ON i.MyTableKey = d.MyTableKey
WHERE d.MyTableKey IS NULL
SET IDENTITY_INSERT ArchiveDB..MyTable OFF -- Only if identity column is used
-- then updates
UPDATE t SET Col1 = i.col1, col2 = i.col2, col3 = i.col3, ...
FROM ArchiveDB..MyTable t INNER JOIN inserted i ON t.MyTableKey = i.MyTableKey
INNER JOIN deleted d ON i.MyTableKey = d.MyTableKey
END
Это предполагает, что база данных архива находится на том же сервере, что и базы данных. Если это не так, вам нужно создать запись связанного сервера, а затем заменить ArchiveDB..MyTable
на ArchiveServer.ArchiveDB..MyTable
, где ArchiveServer
- имя связанного сервера.
Если у вас уже есть большая нагрузка на вашу производственную базу данных, помните, что это удвоит ее. Чтобы обойти это, вы можете добавить поле флажка обновления в каждой из своих таблиц и запустить запланированную задачу в то время, когда загрузка базы данных будет минимальной, например, 1am. Затем ваш триггер установил поле I
для вставки или U
для обновления в производственной базе данных, и запланированная задача будет выполнять обновление или вставку в базу данных архива в зависимости от значения этого поля, а затем сбросить поле до NULL
после его завершения.
Напишите триггер по архиву db ON ПОСЛЕ ВСТАВКИ в Prod db – Teja
@ Vutukuri Что делать, если в его базе данных много транзакций? Будет ли это правильным решением? – rvphx