Предварительные требования
Это руководство для пользователей, которые умеют выполнять основные операции с базами данных и которые имеют ограниченный опыт репликации. Перед тем как приступить к работе с этим учебником, необходимо освоить Учебник. Подготовка SQL Server к репликации.
Для работы с этим учебником требуется SQL Server, среда SQL Server Management Studio (SSMS) и база данных AdventureWorks.
-
На сервере-издателе (источник) установите следующее:
- Любой выпуск SQL Server, кроме SQL Server Express или SQL Server Compact. Эти выпуски не могут быть издателями репликации.
- Образец базы данных AdventureWorks2012 . В целях повышения безопасности образцы баз данных по умолчанию не устанавливаются.
-
На сервере-подписчике (целевом) установите любой выпуск SQL Server, кроме SQL Server Compact. SQL Server Compact не может быть подписчиком при репликации транзакций.
-
Установите SQL Server Management Studio.
-
Установите выпуск SQL Server 2017 Developer Edition.
-
Скачайте пример базы данных AdventureWorks. См. дополнительные сведения о восстановлении базы данных в среде SSMS.
Примечание
- Репликация не поддерживается в экземплярах SQL Server, которые отличаются друг от друга больше, чем на две версии. См. дополнительные сведения о поддерживаемых версиях SQL Server в топологии репликации.
- В среде SQL Server Management Studio необходимо подключиться к издателю и подписчику с помощью имени входа, которое является членом предопределенной роли сервера sysadmin. Дополнительные сведения о роли см. в статье Роли уровня сервера.
Предполагаемое время выполнения заданий этого учебника: 60 минут
Физическая репликация
СУБД | Опция репликации |
---|---|
Oracle | Active DataGuard |
IBM DB2 | HADR |
Microsoft SQL Server | Log shipping/Always On |
PostgreSQL | Log shipping/Streaming replication |
MySQL | Alibaba physical InnoDB replication |
- объём передаваемых данных меньше за счёт того, что передаются только журналы, но не файлы с данными; эксперименты показывают уменьшение трафика в 5-7 раз;
- переключение на резервную базу происходит значительно быстрее: экземпляр-реплика уже поднят, поэтому при переключении ему нужно лишь откатить активные транзакции; более того, к моменту сбоя кеш реплики уже прогрет;
- на реплике можно выполнять запросы, сняв тем самым часть нагрузки с основной базы. В частности, реплику можно использовать для создания резервных копий.
- Maximum performance: репликация всегда асинхронная;
- Maximum protection: репликация синхронная; если реплика не отвечает, commit на основной базе не завершается;
- Maximum availability: репликация синхронная; если реплика не отвечает, то репликация переключается в асинхронный режим и, как только связь восстанавливается, реплика догоняет основную базу и репликация снова становится синхронной.
Синхронизация подписки на публикацию слиянием
В этом разделе будет запущен агент слияния для инициализации подписки с помощью среды SQL Server Management Studio. Эта процедура также используется для синхронизации с издателем.
Запуск синхронизации и инициализация подписки
-
Подключитесь к подписчику в SQL Server Management Studio.
-
Убедитесь, что агент SQL Server запущен. Если это не так, запустите агент SQL Server. Для этого щелкните правой кнопкой мыши в обозревателе объектов и выберите Запустить. Если агент не запускается, это необходимо сделать вручную с помощью диспетчера конфигурации SQL Server.
-
Разверните узел Репликация. В папке Локальные подписки щелкните правой кнопкой мыши подписку в базе данных SalesOrdersReplica и выберите пункт Просмотр состояния синхронизации.
Нажмите кнопку Запустить, чтобы инициализировать подписку.
Перед началом
Ограничения
Названия публикаций и статей не могут содержать следующие символы: %, *, , |, :, «, ? , ‘ , \ , / , . Если объекты в базе данных, содержащие любые из этих символов, нужно реплицировать, то в диалоговом окне Свойства статьи — , которое доступно на странице Статьи мастера, нужно задать имя статьи, отличающееся от имени объекта.
безопасность
По возможности предлагайте пользователям вводить учетные данные системы безопасности во время выполнения приложения. Если необходимо хранить учетные данные, используйте службы шифрования , предоставляемые платформой Microsoft Windows .NET Framework.
Общие замечания
Хранимые процедуры Transact-SQL нельзя преобразовать в хранимые процедуры CLR, и наоборот.
Инструкция ALTER PROCEDURE не изменяет разрешения и не влияет на хранимые процедуры и триггеры. Тем не менее при изменении в хранимую процедуру включаются текущие значения для параметров сеанса QUOTED_IDENTIFIER и ANSI_NULLS. Если при создании хранимой процедуры использовались другие значения параметров, ее поведение может измениться.
Если предыдущее определение процедуры было создано с параметрами WITH ENCRYPTION или WITH RECOMPILE, эти параметры будут включены только в том случае, если они указаны в инструкции ALTER PROCEDURE.
Дополнительные сведения о хранимых процедурах см. в статье CREATE PROCEDURE (Transact-SQL).
Предварительные требования
Это руководство для пользователей, которые умеют выполнять основные операции с базами данных и которые имеют ограниченный опыт репликации. Перед тем как приступить к работе с этим учебником, необходимо освоить Учебник. Подготовка SQL Server к репликации.
Для работы с этим учебником требуется SQL Server, среда SQL Server Management Studio (SSMS) и база данных AdventureWorks.
-
На сервере-издателе (источник) установите следующее:
- Любой выпуск SQL Server, кроме SQL Server Express или SQL Server Compact. Эти выпуски не могут быть издателями репликации.
- Образец базы данных AdventureWorks2012 . В целях повышения безопасности образцы баз данных по умолчанию не устанавливаются.
-
На сервере-подписчике (целевом) установите любой выпуск SQL Server, кроме SQL Server Compact. SQL Server Compact не может быть подписчиком при репликации транзакций.
-
Установите SQL Server Management Studio.
-
Установите выпуск SQL Server 2017 Developer Edition.
-
Скачайте пример базы данных AdventureWorks. См. дополнительные сведения о восстановлении базы данных в среде SSMS.
Примечание
- Репликация не поддерживается в экземплярах SQL Server, которые отличаются друг от друга больше, чем на две версии. См. дополнительные сведения о поддерживаемых версиях SQL Server в топологии репликации.
- В среде SQL Server Management Studio необходимо подключиться к издателю и подписчику с помощью имени входа, которое является членом предопределенной роли сервера sysadmin. Дополнительные сведения о роли см. в статье Роли уровня сервера.
На изучение этого руководства потребуется примерно 60 минут
Изменение данных и агент чтения журналов
Агент чтения журналов выполняется на распространителе; обычно он выполняется непрерывно, но может также запускаться согласно задаваемому расписанию. При выполнении агент чтения журнала сначала читает журнал транзакций публикации (тот же самый журнал базы данных используется для отслеживания и восстановления данных во время выполнения обычных операций компонента SQL Server Database Engine) и выявляет все инструкции INSERT, UPDATE и DELETE или другие изменения данных в транзакциях, отмеченных для репликации. Далее агент копирует эти транзакции в пакетах в базу данных распространителя на стороне распространителя. Агент чтения журнала использует внутреннюю хранимую процедуру sp_replcmds для получения из журнала следующего набора команд, отмеченных для репликации. После этого база данных распространителя становится очередью с функциями хранения и переадресации, из которой изменения отправляются подписчикам. В базу данных распространителя отправляются только зафиксированные транзакции.
После того как весь пакет транзакций успешно записан в базу данных распространителя, он фиксируется. После фиксации каждого пакета команд на распространителе агент чтения журнала вызывает хранимую процедуру sp_repldone , чтобы отметить место, где в последний раз была завершена репликация. В заключение, агент отмечает строки в журнале транзакций, готовые к очистке. Строки, ожидающие репликации, не очищаются.
Команды транзакций хранятся в базе данных распространителя до тех пор, пока они не будут распространены на все подписчики или пока не закончится максимальный срок хранения на распространителе. Подписчики получают транзакции в том же порядке, в котором они применялись на издателе.
Поиск ошибок с помощью агента моментальных снимков
Агент моментальных снимков создает моментальный снимок и записывает его в указанную папку.
-
Просмотрите состояние агента моментальных снимков.
a. В обозревателе объектов разверните узел Локальная публикация в разделе Репликация.
b. Щелкните публикацию правой кнопкой мыши и выберите пункт AdvWorksProductTrans > Просмотр состояния агента моментальных снимков.
-
Если в состоянии агента моментальных снимков присутствует сообщение об ошибке, дополнительные сведения можно найти в журнале заданий агента моментальных снимков.
a. В обозревателе объектов разверните узел Агент SQL Server и откройте элемент «Монитор активности заданий».
b. Выполните сортировку по категории и определите агент моментальных снимков по категории REPL: моментальный снимок.
c. Щелкните правой кнопкой мыши элемент «Агент моментальных снимков» и выберите пункт Просмотреть журнал.
-
В журнале агента моментальных снимков выберите соответствующую запись журнала. Как правило, она находится за одну или две строки до записи с сообщением об ошибке. (Ошибки обозначаются красным значком X.) Прочтите текст сообщения в поле под журналами:
Если в Windows неправильно настроены разрешения для папки моментальных снимков, для агента моментальных снимков будет отображаться ошибка «Доступ запрещен». Проверьте разрешения на доступ к папке, где хранится моментальный снимок, и убедитесь в том, что у учетной записи, с которой работает агент моментальных снимков, есть разрешения на доступ к общей папке.
Настройка издателя для репликации транзакций
В этом разделе с помощью среды SQL Server Management Studio создается публикация транзакций для публикации фильтрованного подмножества таблицы Продукт из примера базы данных AdventureWorks2012. Также в список доступа к публикации (PAL) добавляется имя входа SQL Server, используемое агентом распространителя.
Создание публикации и определение статей
-
Подключитесь к издателю в среде SQL Server Management Studio, а затем раскройте узел сервера.
-
Щелкните правой кнопкой мыши элемент Агент SQL Server и выберите пункт Запустить. Прежде чем приступить к созданию публикации, необходимо запустить агент SQL Server. Если при выполнении этого действия агент не запускается автоматически, его нужно запустить вручную с помощью диспетчера конфигурации SQL Server.
-
Разверните папку Репликация, щелкните правой кнопкой мыши папку Локальные публикации и выберите пункт Создать публикацию. После этого запустится мастер создания публикации:
-
На странице База данных публикации выберите AdventureWorks2012 и нажмите кнопку Далее.
-
На странице Тип публикации выберите Публикация транзакций и нажмите кнопку Далее:
-
На странице Статьи разверните узел Таблицы и установите флажок Продукт. Затем разверните узел Продукт и снимите флажки ListPrice и StandardCost. Выберите Далее.
-
На странице Фильтрация строк таблицы нажмите кнопку Добавить.
-
В диалоговом окне Добавление фильтра выберите столбец SafetyStockLevel. Щелкните стрелку вправо, чтобы добавить столбец в предложение WHERE инструкции фильтра запроса. После этого вручную введите следующий модификатор предложения WHERE:
WHERE < 500
-
Нажмите кнопку ОК, а затем кнопку Далее.
-
Установите флажок Создать моментальный снимок немедленно и обеспечить доступ к нему для инициализации подписок и нажмите кнопку Далее:
-
На странице Безопасность агентов снимите флажок Использовать настройки безопасности агента моментальных снимков.
Выберите Настройки безопасности для агента моментальных снимков. Введите <имя_компьютера_издателя> repl_snapshot в поле Учетная запись процесса, укажите пароль этой учетной записи и нажмите кнопку ОК.
-
Повторите предыдущий шаг, чтобы указать <имя_компьютера_издателя> repl_logreader в качестве учетной записи процесса для агента чтения журнала. Нажмите кнопку ОК.
-
На странице Завершение работы мастера введите AdvWorksProductTrans в поле Имя публикации и нажмите кнопку Готово:
-
После создания публикации нажмите кнопку Закрыть, чтобы закрыть мастер.
Если при попытке создать публикацию обнаруживается, что агент SQL Server не запущен, может возникнуть следующая ошибка. Она указывает на то, что публикация создана успешно, но при этом агент моментальных снимков запустить не удалось. В этом случае необходимо запустить агент SQL Server, а затем вручную запустить агент моментальных снимков. Инструкции приведены в следующем разделе.
Просмотр состояния создания моментального снимка
-
Подключитесь к издателю в среде SQL Server Management Studio, а затем разверните узел сервера и папку Репликация.
-
В папке Локальные публикации щелкните правой кнопкой мыши публикацию AdvWorksProductTrans и выберите пункт Просмотр состояния агента моментальных снимков:
-
Отобразятся сведения о текущем состоянии задания агента моментальных снимков для публикации. Перед тем как перейти к следующему разделу, убедитесь, что задание моментального снимка выполнено успешно.
Если агент SQL Server не был запущен при создании публикации, в сведениях о состоянии агента моментальных снимков для публикации будет указано, что он никогда не запускался. В таком случае выберите Запустить, чтобы запустить агент моментальных снимков:
Если отображается сообщение об ошибке, ознакомьтесь с разделом Устранение неполадок с агентом моментальных снимков.
Добавление имени входа агента распространения в список доступа к публикации
-
Подключитесь к издателю в среде SQL Server Management Studio, а затем разверните узел сервера и папку Репликация.
-
В папке Локальные публикации щелкните правой кнопкой мыши публикацию AdvWorksProductTrans и выберите пункт Свойства. Откроется диалоговое окно Свойства публикации.
а. Выберите страницу Список доступа к публикации и нажмите кнопку Добавить.
b. В диалоговом окне Добавление доступа к публикации выберите <имя_компьютера_издателя> repl_distribution и нажмите кнопку ОК.
Дополнительные сведения см. статье Основные понятия программирования репликации.
Вопросы использования моментальных снимков
-
Запускайте агент моментальных снимков только в том случае, когда необходимо, и в периоды, когда отсутствует пиковая нагрузка.
Агент моментальных снимков выполняет массовое копирование данных из опубликованной таблицы издателя в файл каталога моментальных снимков на распространителе. Создание моментального снимка может быть ресурсоемким процессом, и его лучше планировать на время отсутствия пиковой нагрузки.
-
Если не требуется моментальный снимок в символьном формате, используйте моментальный снимок в собственном формате.
Для всех подписчиков по умолчанию используется собственный формат моментального снимка, за исключением подписчиков, отличных отSQL Server , и подписчиков, на которых выполняется SQL Server Compact. Для них требуется моментальный снимок в символьном формате.
-
Используйте для публикации одну папку моментальных снимков.
Определяя свойства публикации, связанные с расположением моментального снимка, можно выбрать создание файлов моментальных снимков в папке моментальных снимков по умолчанию, или в альтернативной папке моментальных снимков, или в обеих папках. Создание файлов моментальных снимков в обеих папках требует дополнительного дискового пространства и большего объема обработки при работе агента моментальных снимков.
-
Поместите папку моментальных снимков на диск, который является локальным для распространителя и не используется для хранения файлов баз данных или журналов.
Агент моментальных снимков выполняет последовательную запись данных в папку моментальных снимков. Размещение папки моментальных снимков на отдельном диске, где нет баз данных или файлов журнала, уменьшает вероятность конфликтов дисков и ускоряет процесс создания и записи моментального снимка.
-
При создании базы данных подписки на подписчике рассмотрите возможность задания простой модели восстановления или модели восстановления с неполным протоколированием. Это позволяет минимизировать запись в журнал массовых вставок, выполняемых во время применения моментального снимка на подписчике. После того, как моментальный снимок применен к базе данных подписки, можно при необходимости включить другую модель восстановления (реплицированные базы данных могут использовать любую модель восстановления). Дополнительные сведения о выборе модели восстановления см. в статье Обзор процессов восстановления (SQL Server).
-
Рассмотрите возможность использования альтернативной папки моментальных снимков и хранения сжатых моментальных снимков на сменных носителях при работе в сетях с низкой пропускной способностью.
Сжатие файлов моментальных снимков в альтернативной папке моментальных снимков может снизить требования к размеру места для хранения моментальных снимков на диске и облегчить перенос файлов моментальных снимков на сменных носителях.
В некоторых случаях сжатые моментальные снимки повышают производительность передачи файлов моментальных снимков по сети. Однако сжатие моментального снимка требует дополнительной обработки, выполняемой агентом моментальных снимков при создании файлов моментальных снимков и агентом распространителя или агентом слияния при применении файлов моментальных снимков. Это может замедлить создание моментального снимка и в некоторых случаях увеличить время, необходимое для применения моментального снимка. Кроме того, сжатые моментальные снимки не могут быть возобновлены в случае сбоя в сети, поэтому они непригодны для ненадежных сетей. Внимательно рассмотрите перечисленные достоинства и недостатки, если планируете применять сжатые моментальные снимки в сети. Дополнительные сведения см. в разделе Изменение параметров моментального снимка.
-
Рассмотрите возможность инициализации подписки вручную.
В некоторых случаях, например при больших объемах начальных наборов данных, предпочтительнее инициализировать подписку методами, отличными от инициализации с помощью моментального снимка. Дополнительные сведения см. в статье Инициализация подписки на публикацию транзакций без моментального снимка.
Типы репликации в SQL Server
-
Транзакционная репликация. Как говорит название, каждая транзакция или изменение данных в рамках транзакции на издателе будет посылаться подписчику почти в реальном времени с минимальной задержкой, зависящей от пропускной способности сети и ресурсов сервера. Транзакционная репликация использует агента читателя журнала для чтения изменения данных из журналов транзакций в базе данных издателя. Она также использует агента распределения для применения изменений на подписчике. Иногда может использоваться агент снимка для получения исходных данных снимка всех реплицированных статей. Публикация транзакционной репликации может подпадать под следующие категории:
- Стандартная транзакционная репликация — подписчик представляет собой базу данных только на чтение с точки зрения транзакционной репликации. Любые изменения, выполняемые кем угодно в базе данных подписчика не будут отслеживаться и обновляться в базе данных издателя. Стандартная транзакционная репликация часто называется просто транзакционной репликацией.
- Транзакционная репликация с обновляемыми подписками является расширением стандартной транзакционной репликации, которая отслеживает изменения данных, имеющих место на подписчике. Всякий раз, когда изменения происходят на обновляемой подписке, они будут сначала распространяться на издателя, а затем по другим подписчикам.
- Одноранговая репликация является расширением стандартной транзакционной репликации. Она распространяет транзакционно согласованные изменения почти в реальном времени по множеству экземпляров сервера.
- Двунаправленная репликация является расширением стандартной транзакционной репликации, которая позволяет двум серверам (ограничение только на 2 сервера — отсюда название «двунаправленная») обмениваться изменениями данных между собой с каждым из серверов, работающих как издатель (для пересылки изменений на другой сервер) или как подписчик (для получения изменений с другого сервера).
- Репликация слиянием — поддерживает регистрацию изменений данных, происходящих как на издателе, так и на подписчике, и распространяет их на другой сервер. Репликация слиянием требует наличия столбца ROWGUID в таблицах статей, вовлеченных в репликацию слиянием. Она использует триггеры для захвата изменений данных на издателе и подписчике. Кроме того, доставляет изменения на серверы, когда оба и издатель, и подписчик, подключены к сети. Репликация слиянием использует агента слияния для репликации изменений данных на издателе и подписчике.
- Репликация снимками — как говорит название, репликация снимками не опирается ни на журналы транзакций, ни на триггеры для регистрации изменений. Она берет снимок статей, участвующих в публикации и применяет его на подписчике с записями, имеющимися на время создания снимка. Репликация снимками использует агента снимка, чтобы взять снимок издателя, и использует агента распространения, чтобы применить эти записи на подписчике.
Поиск ошибок, связанных с агентом распространения
Агент распространения находит данные в базе данных распространителя и применяет их к подписчику.
-
Подключитесь к издателю в SQL Server Management Studio. Разверните узел сервера, щелкните правой кнопкой мыши папку Репликация и выберите пункт Запустить монитор репликации.
-
В Мониторе репликации выберите публикацию AdvWorksProductTrans и перейдите на вкладку Все подписки. Щелкните подписку правой кнопкой мыши и выберите пункт Просмотреть сведения:
-
Откроется диалоговое окно журнала От распространителя к подписчику, в котором будут приведены подробные сведения о возникшей с агентом ошибке:
-
Эта ошибка указывает, что агент распространения выполняет повторную попытку. Дополнительные сведения см. в журнале заданий для агента распространения.
a. В обозревателе объектов разверните узел Агент SQL Server и откройте элемент Монитор активности заданий.
b. Выполните сортировку заданий по категории.
c. Определите агент распространения по категории REPL: распространение. Щелкните агент правой кнопкой мыши и выберите пункт Просмотреть журнал.
-
Выберите одну из записей ошибок и просмотрите текст ошибки в нижней части окна:
-
Эта ошибка указывает на то, что агент распространения использует неверный пароль. Чтобы устранить ошибку, выполните указанные ниже действия.
a. В обозревателе объектов разверните узел Репликация.
b. Щелкните подписку правой кнопкой мыши и выберите пункт Свойства.
c. Нажмите кнопку с многоточием (…) рядом с элементом Учетная запись процесса агента и измените пароль.
-
Снова проверьте монитор репликации, щелкнув правой кнопкой мыши элемент Репликация в обозревателе объектов. Красный значок X рядом с элементом Все подписки указывает, что ошибка агента распространения по-прежнему не устранена.
Откройте журнал От распространителя к подписчику, для чего выберите Монитор репликации > Просмотреть подробности и щелкните подписку правой кнопкой мыши. В этом случае ошибка будет несколько иной:
-
Эта ошибка указывает, что агенту распространения не удалось подключиться к подписчику из-за ошибки входа для пользователя NODE2\repl_distribution. Чтобы более детально проанализировать причины ошибки, подключитесь к подписчику и откройте текущий журнал ошибок SQL Server в узле Управление в обозревателе объектов.
Если отображается эта ошибка, значит, в подписчике не было предоставлено имя для входа. Сведения об устранении этой ошибки см. в разделе Разрешения для репликации.
-
После устранения ошибки со входом снова проверьте монитор репликации. Если все ошибки устранены, рядом с именем публикации появится зеленая стрелка, а также будет показано состояние Выполняется в разделе Все подписки.
Щелкните подписку правой кнопкой мыши, чтобы открыть журнал От распространителя к подписчику еще раз и проверить успешность выполненных действий. Если агент распространения запущен впервые, вы увидите, что было выполнено массовое копирование моментального снимка в подписчик.