Ваши параметры в некоторой степени зависят от вида используемого SQL Server. Но точные требования вашей интеграции имеют большее значение. Самый простой и наименее эффективный метод для односторонней интеграции - удалить каждое событие календаря из цели перед загрузкой новых из источника. Это может быть достаточно, если не так много событий для синхронизации, например, если вам вообще не нужно загружать прошедшие события. Но если вам нужно отслеживать состояние синхронизации, все усложняется, и инструменты начинают иметь значение. Этот вид интеграции состоит из двух этапов:
- Извлечение измененных данных из источника и
- Преобразование и загрузка данных в пункт назначения
Извлечение изменений
В каждой версии SQL2008 имеется новая функция отслеживания изменений , которая специально предназначена для сценариев синхронизации. Отслеживание изменений отличается от сбора данных изменений, который поддерживается только в SQL 2008 Enterprise Edition. Если исходная база данных работает под управлением SQL 2008, я бы сначала посмотрел отслеживание изменений. Основное преимущество заключается в том, что вам не нужно настраивать метаданные для обработки обнаружения изменений, например сохранять временную метку последней загрузки и сравнивать ее с временными метками изменения событий и т. Д. Вам не нужно вносить какие-либо изменения DDL для своего пользователя. таблицы для отслеживания изменений, кроме включения отслеживания изменений:
ALTER DATABASE AdventureWorks2000 SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);
GO
USE AdventureWorks2000;
GO
ALTER TABLE Person.Person ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = ON);
GO
Если вы не можете использовать отслеживание изменений, я бы предложил использовать временные метки или номера версий вместо заполнения отдельной таблицы изменений триггерами. Триггеры могли бы сократить его здесь, но я все же рекомендую избегать их :) Возможно, у вас уже есть необходимые временные метки в схеме базы данных.
Настройка репликации является интересным методом сбора данных об изменениях. Фактически, технически это предшественник для CDC, найденный в SQL2008 Enterprise Edition. Я сам не использовал репликацию для CDC, но, например, в этой книге авторы имеют хороший опыт ее использования.
Преобразование и загрузка
Использование агента SQL для планирования пакета служб SSIS. Если вы можете выполнять полную загрузку каждый раз вместо загрузки изменений, это все, что вам нужно.
Другой вариант - запланировать хранимую процедуру, но обработка таких вещей, как ошибки журналирования, не будет такой простой. Мой опыт показывает, что разработка пакетов служб SSIS выполняется намного быстрее, чем при использовании T-SQL, особенно если будут задействованы связанные серверы.
Проблемы с SQL Server Express
SQL Server Express (2005/2008) не имеет агента SQL и может действовать только как подписчик репликации . Я обычно заканчивал тем, что программировал службу Windows для заданий интеграции SQL Express, но наличие внешнего планировщика для запуска хранимых процедур могло бы просто работать достаточно хорошо. Написание и планирование хранимой процедуры, вероятно, будет намного быстрее, чем разработка службы.
SQL Server Express 2008 действительно имеет время выполнения служб SSIS, но я точно не знаю, насколько он ограничен, поскольку не все функции поддерживаются им. Однако мастер импорта / экспорта работает.