Обновление или исправление реплицируемых баз данных
Область применения: SQL Server — только Для Windows
SQL Server поддерживает обновление реплицированных баз данных из предыдущих версий SQL Server; При обновлении узла не требуется остановить действие на других узлах. Соблюдайте следующие правила, определяющие допустимые версии объектов репликации.
- Версия распространителя не должна быть ниже версии издателя (во многих случаях распространителем и издателем является один и тот же экземпляр).
- Версия издателя не должна превышать версию распространителя.
- Версия подписчика зависит от типа публикации:
- Подписчик на публикацию транзакций может иметь любую версию, отличающуюся от версии издателя, но не более, чем на две версии. Например: издатель SQL Server 2012 (11.x) может иметь подписчиков SQL Server 2014 (12.x) и SQL Server 2016 (13.x), а издатель SQL Server 2016 (13.x) — подписчиков SQL Server 2014 (12.x) и SQL Server 2012 (11.x).
- Подписчик на публикацию слиянием может иметь любую версию, которая не превышает версию издателя и поддерживается в соответствии с циклом поддержки жизненного цикла версий.
Путь обновления SQL Server зависит от схемы развертывания. Для SQL Server, как правило, предлагается два пути обновления:
- Параллельное использование. Развертывание параллельной среды и перемещение баз данных вместе со связанными объектами уровня экземпляров, такими как учетные данные и задания, в новую среду.
- Обновление на месте. Установочный носитель SQL Server может обновить существующую установку SQL Server, заменив элементы SQL Server и обновив объекты баз данных. В средах с группами доступности Always On или экземплярами отказоустойчивых кластеров обновление на месте сочетается с последовательным обновлением для минимизации простоя.
Общий подход, который используется для обновления топологий репликации в параллельном режиме, подразумевает перемещение пар "издатель-подписчик" в новую параллельную среду по частям вместо перемещения всей топологии. Этот поэтапный подход помогает контролировать время простоя и до определенной степени минимизировать вмешательство в зависимую от репликации бизнес-деятельность.
Основная часть этой статьи относится к обновлению версии SQL Server. Тем не менее процесс обновления на месте также должен использоваться при применении исправлений SQL Server из пакета обновления или накопительного пакета обновления.
Предупреждение
Обновление топологии репликации включает несколько этапов. Рекомендуем выполнить пробное обновление реплики топологии репликации в тестовой среде, прежде чем делать это в реальной рабочей среде. Это поможет подготовить рабочую документацию, которая позволит эффективно провести фактическое обновление, избежав длительных и затратных простоев. Нам известны примеры, когда клиентам удалось существенно сократить время простоев с использованием групп доступности Always On или экземпляров отказоустойчивого кластера SQL Server. Кроме того, мы рекомендуем создать резервные копии всех баз данных (включая MSDB, master, базы данных распространителя и пользовательские базы), участвующих в репликации перед попыткой обновления.
При наличии базы данных распространителя в экземпляре отказоустойчивого кластера все участвующие узлы должны использовать одну и ту же сборку. Мы не рекомендуем настроить, в котором один узел является версией SQL Server более ранней, чем SQL Server 2016 с пакетом обновления 2 (SP2)3 или SQL Server 2017 CU6, а другой — версией SQL Server более поздней, чем SQL Server 2016 с пакетом обновления 2 (SP2) или SQL Server 2017 CU6. В версиях SQL Server 2016 с пакетом обновления 2 (SP2) и накопительным пакетом обновления 3 (CU3), а также SQL Server 2017 c накопительным пакетом обновления 6 (CU6) добавлена поддержка использования базы данных распространителя в группе доступности Always On и поддержка новых объектов (таблиц, хранимых процедур) в базах данных распространителя. Если база данных распространителя находится в экземпляре отказоустойчивого кластера и выполняется поэтапная миграция (и вы не можете обновить все узлы до одной и той же версии SQL Server), то в течение короткого периода миграции рекомендуется выполнять действия с учетной записью, например добавление новых подписчиков, подписок, издателей или публикаций, на узле с более поздней версией SQL Server.
Матрица репликации
Матрица совместимости репликации транзакций и моментальных снимков
Издатель | Распространитель | Подписчик |
---|---|---|
SQL Server 2022 (16.x) | SQL Server 2022 (16.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) |
SQL Server 2019 (15.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) |
SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) |
SQL Server 2017 (14.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) |
SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) |
SQL Server 2016 (13.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) |
SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) |
SQL Server 2014 (12.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) |
SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2012 (11.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) |
SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2014 (12.x) SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
Матрица совместимости репликации слиянием
Издатель | Распространитель | Подписчик |
---|---|---|
SQL Server 2022 (16.x) | SQL Server 2022 (16.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2019 (15.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) |
SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2017 (14.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) |
SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2016 (13.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) |
SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2014 (12.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) |
SQL Server 2014 (12.x) SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2012 (11.x) | SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) |
SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2022 (16.x) SQL Server 2019 (15.x) SQL Server 2017 (14.x) SQL Server 2016 (13.x) SQL Server 2014 (12.x) SQL Server 2012 (11.x) SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
SQL Server 2008 R2 (10.50.x) SQL Server 2008 (10.0.x) |
Запуск агента чтения журнала для репликации транзакций перед обновлением
Перед обновлением SQL Server необходимо убедиться, что все зафиксированные транзакции из опубликованных таблиц были обработаны агентом чтения журналов. Чтобы это обеспечить, для каждой базы данных, содержащей публикации транзакций, необходимо выполнить следующие шаги.
- Убедитесь, что в базе данных запущен агент чтения журнала. По умолчанию агент работает постоянно.
- Остановите активность пользователей в опубликованных таблицах.
- Подождите, пока агент чтения журнала не скопирует транзакции в базу данных распространителя, затем остановите агент.
- Чтобы убедиться, что все транзакции были обработаны, выполните процедуру sp_replcmds . Результирующий набор от этой процедуры должен быть пустым.
- Чтобы закрыть соединение процедуры sp_replcmds, выполните процедуру sp_replflush .
- Обновите сервер до последней версии SQL Server.
- Перезапустите агент SQL Server и агент чтения журналов, если они не запускаются автоматически после обновления.
Выполнение агентов для репликации слиянием после обновления
После обновления запустите агент моментальных снимков для каждой публикации слиянием и агент слияния для каждой подписки, чтобы обновить метаданные репликации. Применять новый моментальный снимок не требуется, потому что заново инициализировать подписки не нужно. Метаданные подписки обновляются при первом запуске агента слияния после обновления. Это означает, что база данных подписки может оставаться в сети в активном режиме во время обновления издателя.
Механизм репликации слиянием хранит метаданные публикации и подписки в нескольких системных таблицах баз данных публикации и подписки. При запуске агента моментальных снимков обновляются метаданные публикации, а при запуске агента слияния — метаданные подписки. Пользователь должен только сформировать моментальный снимок публикации. Если при публикации слиянием используются параметризованные фильтры, каждой секции также соответствует моментальный снимок. Обновлять эти секционированные снимки не требуется.
Запустите агенты из СРЕДЫ SQL Server Management Studio, монитора репликации или из командной строки. Дополнительные сведения о выполнении агента моментальных снимков см. в следующих статьях:
- Создание и применение исходного моментального снимка
- Запуск и остановка агента репликации (среда SQL Server Management Studio)
- Создание и применение исходного моментального снимка
- Replication Agent Executables Concepts
Дополнительные сведения о выполнении агента слияния см. в следующих статьях:
После обновления SQL Server в топологии, которая использует репликацию слиянием, измените уровень совместимости публикации любых публикаций, если вы хотите использовать новые функции.
Обновление до выпусков Standard Edition, Workgroup Edition и Express Edition
Перед обновлением одного выпуска SQL Server до другого убедитесь, что в выпуске, в котором выполняется обновление, поддерживается ли функция. Дополнительные сведения см. в разделе о репликации в выпусках и поддерживаемых функциях SQL Server 2022.
Процедура обновления топологии репликации
Эта процедура представляет рекомендуемый порядок обновления серверов в топологии репликации. Она также применима к репликации транзакций или репликации слиянием. При этом она не относится к одноранговой репликации, а также к поочередному или немедленному обновлению подписок.
Обновление «на месте»
- Обновите распространителя.
- Обновите издателя и подписчика. Эти элементы можно обновлять в любом порядке.
Примечание.
Для SQL 2008 и 2008 R2 обновление издателя и подписчика должно выполняться одновременно для соответствия матрице топологии репликации. Издатель и подписчик SQL 2008 или 2008 R2 не могут иметь издателя или подписчика SQL 2016 (или более поздней версии). Если одновременное обновление невозможно, используйте промежуточное обновление, чтобы сначала перевести экземпляры SQL на SQL 2014, а затем обновить их еще раз до SQL 2016 (или более поздней версии).
Параллельное обновление
- Обновите распространителя.
- Перенастройте распространение на новом экземпляре SQL Server.
- Обновите издателя.
- Обновите подписчика.
- Перенастройте все пары "издатель-подписчик", включая повторную инициализацию подписчика.
Процедура параллельной миграции распространителя в Windows Server 2012 R2
Если вы планируете перевести экземпляр SQL Server на SQL Server 2016 (или более поздней версии) и текущей ОС является Windows 2008 (или 2008 R2), потребуется параллельное обновление операционной системы до Windows Server R2 или более поздней версии. Это необходимо, так как SQL Server 2016 нельзя установить в Windows Server 2008/2008 R2 и эти ОС не поддерживают обновление на месте непосредственно в Windows Server 2016. Хотя можно выполнить обновление на месте с Windows Server 2008/2008 R2 до Windows Server 2012, а затем до Windows Server 2016. Как правило, делать это не рекомендуется из-за простоя и дополнительной сложности, препятствующей простому пути отката. Параллельное обновление — это единственный доступный путь обновления для экземпляров SQL Server, участвующих в отказоустойчивом кластере. Следующие действия можно выполнить на автономном экземпляре SQL Server или внутри экземпляра отказоустойчивого кластера (FCI) Always On.
- Настройте новый экземпляр SQL Server (автономный или отказоустойчивый кластер Always On), выпуск и версию в качестве распространителя в Windows Server 2012 R2/2016, используя другое имя кластера Windows и FCI-экземпляра SQL Server либо имя автономного узла. Необходимо сохранить прежнюю структуру каталогов распространителя, чтобы исполняемые файлы агентов репликации, папки репликации и файлы базы данных находились по тому же пути в новой среде. Это упростит обновление и устранение проблем после миграции.
- Синхронизируйте репликацию, а затем завершите работу всех агентов репликации.
- Завершите работу текущего экземпляра распространителя SQL Server. Если это автономный экземпляр, завершите работу сервера. Если это экземпляр отказоустойчивого кластера SQL, отключите всю роль SQL Server в диспетчере кластеров, включая имя сети.
- Удалите записи объектов компьютеров DNS и AD для старой среды (текущего экземпляра распространителя).
- Измените имя узла нового сервера, чтобы оно соответствовало старому серверу.
- Если это экземпляр отказоустойчивого кластера SQL, задайте для нового экземпляра то же имя виртуального сервера, что и у старого.
- Скопируйте файлы баз данных из предыдущего экземпляра с помощью перенаправления SAN, копирования хранилища или копирования файлов.
- Подключите новый экземпляр SQL Server.
- Перезапустите все агенты репликации и проверьте, что они работают.
- Убедитесь, что репликация работает надлежащим образом.
- Используйте установочный носитель SQL Server для обновления вашего экземпляра на месте и перехода на новую версию SQL Server.
Примечание.
Чтобы уменьшить простой, рекомендуем выполнять параллельную миграцию и обновление на месте до SQL Server 2016 раздельно. Это позволит реализовать поэтапный переход, сократить риски и минимизировать время простоя.
Веб-синхронизация для репликации слиянием
Параметр веб-синхронизации для репликации слиянием требует, чтобы прослушиватель Репликация SQL Server (replisapi.dll) копировался в виртуальный каталог на сервере службы IIS (IIS), используемом для синхронизации. При настройке веб-синхронизации этот файл копируется в виртуальный каталог мастером настройки веб-синхронизации. При обновлении компонентов SQL Server, установленных на сервере IIS, необходимо вручную скопировать replisapi.dll из COM-каталога в виртуальный каталог на сервере IIS. Дополнительные сведения о конфигурации см. в статье Настройка веб-синхронизации.
Восстановление из копии реплицированной базы данных из предыдущей версии
Чтобы обеспечить неизменность параметров репликации при восстановлении реплицированной базы данных, имеющей более раннюю версию, выполните восстановление на сервер и в базу данных, имеющих те же имена, что и у сервера или базы данных, для которых была сделана резервная копия.
См. также
Репликация SQL Server
Вопросы и ответы об администрировании репликации
Обратная совместимость репликации
Поддерживаемые обновления версий и выпусков
Обновление SQL Server
Обновление топологии репликации до SQL Server 2016