Мы планируем перенести нашу локальную базу данных SQL на azure, и в этой базе данных много таблиц, и из них мало таблиц с очень высоким уровнем транзакций (содержит миллионы записей), мы хотим минимизировать время простоя приложения и решили использовать репликация транзакции с использованием моментального снимка для репликации данных, а затем некоторое время простоя и переключение на базу данных Azure из нашего приложения

Ниже приведены проблемы, которые мы уже видели в предварительном выпуске.

  1. Блокировки таблиц в начальное время и многие запросы от приложения не выполнялись из-за этих блокировок. Как этого избежать?
  2. Произошла ошибка репликации 2 статей (миллионы строк), одна была почти завершена (90%), а другая из-за некоторых проблем с данными, мы создали 3 отдельных публикации: одну для остальных небольших таблиц и две для каждой большой таблицы. Я знаю, что мы можем повторно инициализировать публикацию и сделать это с самого начала, но это снова приведет к задержке сокращения со временем, а также к блокировкам таблиц.
    Итак, как мы можем справиться с этим случаем 1, когда большая часть данных была реплицирована, и мы не хотим начинать с нуля

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

0
Rajesh 5 Янв 2018 в 03:31

2 ответа

Лучший ответ

В этой статье говорится

[@ sync_method =] 'sync_method'

Производит вывод программы массового копирования всех таблиц в собственном режиме, но не блокирует таблицы во время моментального снимка . Поддерживается только для транзакционных публикаций. Не поддерживается для издателей Oracle.

Вы можете попробовать ...

Ссылки:
https://dba.stackexchange.com/questions/73629/ как создать-репликацию-снимок-таблицы-без-блокировки
https: // docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-addpublication-transact-sql

1
TheGameiswar 5 Янв 2018 в 02:59

Я бы предложил использовать временную привязку к вашей процедуре. Я могу придумать два способа добиться этого:

  1. Создайте таблицу мостов между live db и целевой db. После того, как вы загрузите мост и убедитесь, что данные действительны, передайте их целевой базе данных. Но этот способ может быть сложно реализовать из-за проверки данных на мосту.
  2. В столбце с меткой времени к вашим таблицам. Когда начнется процесс репликации, возьмите те строки, у которых метка времени предшествует начальному времени. Таким образом, вы проигнорируете все строки после начала процедуры. Это гарантирует, что у вас не будет никаких включенных привязок клавиш (fk).
0
Emmanouil Karamalegos 5 Янв 2018 в 07:56