2014-12-11 1 views
0

У меня есть локальная база данных SQL Server, в которой я копирую большие объемы данных из удаленной базы данных SQL Server и в нее. Локальная версия - 2008 год, а удаленная версия - 2012 год.Копирование больших объемов данных в реплицируемую базу данных

Удаленная БД имеет репликацию транзакций, настроенную на одну локальную БД и другую удаленную БД. Все это прекрасно работает.

Я создал пакет SSIS, который опустошает таблицы назначения (удаленная БД), а затем использует объект Data Flow для добавления данных из источника. Для гибкости у меня есть каждая таблица в своем собственном Sequence Container (это позволяет мне запускать одну или несколько таблиц за раз). Настройки потока данных установлены на Keep Identity.

В настоящее время перед запуском пакета SSIS я удаляю параметры репликации и запускаю пакет. Как только пакет завершится, я снова создаю настройки репликации и повторно инициализирую подписчиков.

Я делаю это так (удаление репликации, а затем воссоздание) из страха перегрузки сервера с помощью команд репликации. Хотя большинство таблиц составляют от 10 до 1000 строк, пара из них превышает 35 миллионов.

Есть ли рекомендуемый способ опорожнения и повторной загрузки данных большой реплицированной базы данных?

Я не хочу реплицировать свою локальную БД на удаленный БД, поскольку это не всегда было бы уместно, и выполнение обратной задачи и восстановление локальной БД также не работало бы из-за характера более сложных разрешений, и т. д. на удаленной БД.

Это не конец света, чтобы каждый раз создавать и изменять параметры репликации, так как у меня есть все сценарии. Я просто уверен, что должен быть рекомендованный способ управления этим ...

+0

Если вы используете Enterprise Edition, проверьте CDC (Change Data Capture). Он в основном просто регистрирует изменения данных, тем самым уменьшая объем данных, которые вам нужно загрузить. – SchmitzIT

+0

@SchmitzIT Спасибо. Но это не EE :( – TechyGypo

+0

, как говорит SchmitzIT, CDC может помочь вам (мы используем его с той же целью). В качестве альтернативы вы можете реализовать некоторые другие способы добавления/обновления новых данных, а не перезаписи всей таблицы. триггер и фиксировать все изменения в данных таблиц, а затем обрабатывать их в вашем пакете SSIS тремя способами: удаляет/обновляет/вставляет. –

ответ

1

Не делать этого. Пустой/перезагрузка плохой. Попробуйте обновить таблицу с помощью слияния - таким образом вы можете избежать падения и воссоздания, что также приведет к 2 реплицированным операциям. Загрузите новые данные в временные таблицы на другом сервере (не реплицируются), а затем объедините их в реплицированные таблицы. Если много данных не изменилось, это серьезно снизит нагрузку на репликацию.

+0

Чувствует себя немного непослушным, делая пустое/перезагрузку! merge вы имеете в виду: http://msdn.microsoft.com/en-us/library/bb510625.aspx Я не думал об этом, и мне это нравится :) – TechyGypo

+0

Да, я имею в виду именно это - заявление о слиянии. Отбрасывание данных просто для его воссоздания - и этот отдых реплицируется - звучит довольно суб оптимально. У вас также есть время простоя данных (время без данных), чего вы можете избежать слиянием. – TomTom

 Смежные вопросы

  • Нет связанных вопросов^_^