Мы планируем перенести нашу локальную базу данных SQL на azure, и в этой базе данных много таблиц, и из них мало таблиц с очень высоким уровнем транзакций (содержит миллионы записей), мы хотим минимизировать время простоя приложения и решили использовать репликация транзакции с использованием моментального снимка для репликации данных, а затем некоторое время простоя и переключение на базу данных Azure из нашего приложения
Ниже приведены проблемы, которые мы уже видели в предварительном выпуске.
- Блокировки таблиц в начальное время и многие запросы от приложения не выполнялись из-за этих блокировок. Как этого избежать?
- Произошла ошибка репликации 2 статей (миллионы строк), одна была почти завершена (90%), а другая из-за некоторых проблем с данными, мы создали 3 отдельных публикации: одну для остальных небольших таблиц и две для каждой большой таблицы. Я знаю, что мы можем повторно инициализировать публикацию и сделать это с самого начала, но это снова приведет к задержке сокращения со временем, а также к блокировкам таблиц.
Итак, как мы можем справиться с этим случаем 1, когда большая часть данных была реплицирована, и мы не хотим начинать с нуля
Я надеюсь, что многие из вас сталкиваются с этими проблемами и могут поделиться некоторыми передовыми практиками.
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
Я бы предложил использовать временную привязку к вашей процедуре. Я могу придумать два способа добиться этого:
- Создайте таблицу мостов между live db и целевой db. После того, как вы загрузите мост и убедитесь, что данные действительны, передайте их целевой базе данных. Но этот способ может быть сложно реализовать из-за проверки данных на мосту.
- В столбце с меткой времени к вашим таблицам. Когда начнется процесс репликации, возьмите те строки, у которых метка времени предшествует начальному времени. Таким образом, вы проигнорируете все строки после начала процедуры. Это гарантирует, что у вас не будет никаких включенных привязок клавиш (fk).
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.