Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Репликация слиянием должна инициализировать издателя и подписчика, прежде чем данные могут передаваться между ними. В этой статье содержатся сведения о шагах, происходящих во время инициализации.
Инициализация публикации
В следующем списке описаны шаги инициализации публикации, которые выполняются при запуске каждой из указанных хранимых процедур или после завершения мастера создания новой публикации. Дальнейшая инициализация происходит после того, как агент создания моментальных снимков впервые запускается для публикации.
sp_replicationdboption
База данных публикации помечена для репликации. Невозможно удалить базу данных, если репликация не удалена.
Системные таблицы добавляются в базу данных публикации (если в базе данных еще не существует публикации слияния). Полный список системных таблиц см. в разделе "Системные таблицы, созданные в базах данных публикации и подписки" в этой статье.
sp_addmergepublication
- Записи для публикации добавляются в системные таблицы.
sp_addpublication_snapshot
- Задание агента моментальных снимков добавляется в систему агента SQL Server. Имя задания находится в форме
<Publisher>-<PublicationDatabase>-<Publication>-<Integer>
.
- Задание агента моментальных снимков добавляется в систему агента SQL Server. Имя задания находится в форме
sp_addmergearticle
Каждый реплицированный объект помечается для репликации. Объект нельзя удалить, если соответствующая статья не удаляется из всех публикаций.
Записи для каждой статьи добавляются в системные таблицы.
Оставшаяся часть инициализации базы данных публикации происходит во время начального запуска агента моментальных снимков для публикации. База данных публикации не будет повторно инициализирована во время последующих запусков агента моментальных снимков. Если вы используете Мастер создания новой публикации, начальный моментальный снимок создается автоматически после завершения работы мастера. Если вы используете хранимые процедуры, запустите задание агента или запустите агент напрямую. Дополнительные сведения о выполнении агентов см. в разделах "Запуск и остановка агента репликации" (SQL Server Management Studio) и "Основные понятия исполняемых файлов агента репликации".
При первом запуске агента моментальных снимков для публикации:
Столбец с именем
rowguid
добавляется в каждую опубликованную таблицу, если только таблица уже не содержит столбец типа данных uniqueidentifier с установленным свойствомROWGUIDCOL
(в этом случае используется существующий столбец). Столбецrowguid
используется для уникальной идентификации каждой строки в каждой опубликованной таблице. Если таблица удаляется из публикации, то столбецrowguid
будет удалён; если для отслеживания использовался существующий столбец, он не удаляется.Следующие объекты создаются в базе данных публикации для каждой опубликованной таблицы (все объекты создаются в схеме
dbo
):Триггеры вставки, триггеры обновления и триггеры удаления добавляются в опубликованные таблицы для отслеживания изменений. Триггеры именуются в форме
MSmerge_ins_<GUID>
,MSmerge_upd_<GUID>
иMSmerge_del_<GUID>
. Значение GUID определяется на основе записи статьи в системной таблицеsysmergearticles
.Хранимые процедуры создаются для обработки вставок, обновлений и удалений в опубликованные таблицы, а также для выполнения нескольких других операций, связанных с репликацией.
Представления создаются для управления вставками, обновлениями, удалениями и фильтрацией.
Таблицы конфликтов создаются для хранения сведений о конфликтах. Таблицы конфликтов соответствуют схеме опубликованных таблиц: каждая опубликованная таблица выполняется скриптом, а затем скрипт используется для создания таблицы конфликтов в базе данных публикации. Таблицы конфликтов именуются в форме
dbo.MSmerge_conflict_<Publication>_<Article>
.
При каждом запуске агента моментальных снимков для каждой статьи в базе данных публикации создаются следующие типы файлов (с соответствующими расширениями файлов):
Схема (
.sch
)Ограничения и индексы (
.dri
)Триггеры (
.trg
)Данные системной таблицы (
.sys
)Конфликтные таблицы (
.cft
)Данные (
.bcp
): не созданы для публикаций с параметризованными фильтрами.Если публикация не использует параметризованные фильтры, моментальный снимок содержит данные опубликованных таблиц в наборе файлов
.bcp
. Если в публикации используются параметризованные фильтры (типичные для публикаций слиянием), начальный моментальный снимок не содержит никаких данных. Данные предоставляются с помощью снимка состояния для раздела данных подписчика, который рассматривается в следующем разделе.
Инициализация подписки
Каждая подписка инициализируется, когда запускается агент слияния для подписки, копируя начальный моментальный снимок в базу данных подписки. Помимо схемы и данных из реплицированных объектов, снимок содержит системные таблицы, представления, триггеры и хранимые процедуры, существующие в базе данных публикации. Одна или две дополнительные системные таблицы также копируются в базу данных подписки. Полный список системных таблиц см. в разделе "Системные таблицы", созданные в базах данных публикации и подписки в этой статье. Если подписка повторно инициализирована, все реплицированные объекты и системные объекты репликации перезаписываются.
Если ни одна из таблиц в базе данных публикации не использует параметризованные фильтры, то один и тот же снимок публикации копируется для каждого подписчика. Если используются один или несколько параметризованных фильтров, то способ инициализации каждой подписки определяется следующей логикой:
Если расположение моментального снимка предоставляется агенту слияния в командной строке:
- Примените моментальный снимок из этого расположения.
Кроме того, если моментальный снимок был предварительно создан:
- Получите местоположение моментального снимка из
MSmerge_dynamic_snapshots
публикационной базы данных и примените моментальный снимок из этого местоположения.
- Получите местоположение моментального снимка из
Кроме того, если публикация позволяет подписчикам инициировать моментальные снимки:
Если моментальный снимок уже создан для другого подписчика с той же секцией, примените этот моментальный снимок к подписчику.
В противном случае создайте и примените резервную копию к подписчику.
В противном случае инициализировать подписчика с помощью
SELECT
операторов для таблиц в публикации. Этот подход медленнее, чем использование моментального снимка для секции подписчика.
Если передача моментальных снимков прерывается в любой момент, она автоматически возобновляется и не передает заново файлы, которые уже были полностью переданы. Единица доставки агента моментальных снимков — это файл bcp для каждой статьи публикации, поэтому файлы, частично доставленные, должны быть полностью повторно доставлены. Однако возобновление моментального снимка может значительно уменьшить объем передаваемых данных и обеспечить своевременную доставку моментальных снимков, даже если подключение ненадежно. Дополнительные сведения о создании моментальных снимков см. в разделе Параметризованные фильтры — параметризованные фильтры строк.
Расположение моментального снимка
Расположение моментального снимка зависит от пути, заданного для расположения моментального снимка по умолчанию или альтернативного моментального снимка; используется ли публикация UNC-путь или общий ресурс FTP для папки моментального снимка; и использует ли публикация параметризованные фильтры. В этих примерах предполагается, что папка моментальных снимков расположена: \\<MyComputer>\<MyFolder>
Если в публикации используется UNC, первая часть пути:
\\<MyComputer>\<MyFolder>\unc\
. Если оно использует FTP, это\\<MyComputer>\<MyFolder>\ftp\
.Если публикация использует UNC и не использует параметризованные фильтры, путь будет
\\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>
Если публикация использует UNC и параметризованные фильтры, расположение определяется на основе пути к папке моментального снимка и параметризованных критериев фильтрации строк для публикации. Например, если статья фильтруется с помощью функции
HOST_NAME()
, и если значениеHOST_NAME()
для раздела — этоSalesLaptop
, то путь к снимку состояния для этого раздела —\\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>\SalesLaptop_12
, где12
— это внутренний идентификатор, используемый для раздела.
Системные таблицы, созданные в базах данных публикации и подписки
Следующие таблицы создаются в базе данных публикации и каждой базе данных подписки.
Таблица | Описание |
---|---|
MSdynamicsnapshotjobs | Содержит информацию о заданиях по созданию снимков для публикаций с параметризованными фильтрами. |
MSdynamicsnapshotviews | Отслеживает все временные представления моментальных снимков, созданные агентом моментальных снимков. Он используется системой для очистки представлений в случае неожиданного завершения работы агента SQL Server или агента моментальных снимков. |
MSmerge_altsyncpartners | Отслеживает связь между текущими партнерами синхронизации для издателя. |
MSmerge_articlehistory | Отслеживает изменения, внесенные в статьи во время сеанса синхронизации агента слияния, с одной строкой для каждой статьи, в которую были внесены изменения. |
MSmerge_conflicts_info | Отслеживает конфликты, возникающие при синхронизации подписки на публикацию, использующую слияние. |
MSmerge_contents | Содержит одну строку для каждой строки, измененной в текущей базе данных после публикации. Эта таблица используется процессом слияния для определения измененных строк. |
MSmerge_current_partition_mappings | Содержит одну строку для каждой секции, к которой принадлежит данная измененная строка. |
MSmerge_dynamic_snapshots | Отслеживает расположение моментального снимка для каждой секции, определенной для публикации слиянием. |
MSmerge_errorlineage | Содержит строки, которые были удалены на подписчике, но их удаление не передается издателю. |
MSmerge_generation_partition_mappings | Отслеживает, содержит ли данное поколение любые изменения, относящиеся к заданному разделу. |
MSmerge_genhistory | Содержит одну строку для каждого поколения. Поколение — это коллекция изменений, которые доставляются издателю или подписчику. Поколения закрываются при каждом запуске агента слияния; последующие изменения в базе данных добавляются в одно или несколько открытых поколений. |
MSmerge_history | Содержит строки истории с подробными описаниями результатов предыдущих сеансов заданий агента слияния. |
MSmerge_identity_range | Отслеживает числовые диапазоны, назначенные идентификационным столбцам для подписок на публикации, для которых репликация автоматически управляет назначениями диапазонов. |
MSmerge_metadataaction_request | Содержит одну строку для каждого требуемого компенсирующего действия. Компенсирующее действие используется для отката изменения на одном узле, если изменение завершилось ошибкой на другом узле. |
MSmerge_partition_groups | Содержит одну строку для каждой предварительно вычисляемой секции в данной базе данных. |
MSmerge_past_partition_mappings | Содержит одну строку для каждого раздела, к которому заданная измененная строка раньше принадлежала, но больше не принадлежит. |
MSmerge_replinfo | Содержит одну строку для каждой подписки. Эта таблица отслеживает внутренние сведения о отправленных и полученных поколениях. |
MSmerge_sessions | Содержит исторические строки с результатами предыдущих сессий задания агента слияния. |
MSmerge_settingshistory | Содержит журнал изменений, внесенных в свойства статьи и публикации, с одной строкой для каждого изменения. |
MSmerge_tombstone | Содержит сведения об удаленных строках и позволяет распространять информацию об удалениям другим подписчикам. |
MSrepl_errors | Содержит подробные сведения о сбоях агента. |
sysmergearticles | Содержит одну строку для каждой статьи слияния. |
sysmergepartitioninfo | Содержит сведения о секциях для каждой статьи с одной строкой для каждой статьи. |
sysmergepartitioninfoview | Содержит сведения о партицировании для табличных статей. |
sysmergepublications | Содержит одну строку для каждой публикации слияния. |
sysmergeschemaarticles | Отслеживает объекты, включающиеся в схему, такие как хранимые процедуры. |
sysmergeschemachange | Содержит сведения о опубликованных статьях, созданных агентом моментальных снимков. |
sysmergesubscriptions | Содержит одну строку для каждого подписчика. |
sysmergesubsetfilters | Содержит сведения о фильтре соединения для секционированных статей. |
Кроме того, таблица MSsnapshotdeliveryprogress
создается в каждой базе данных подписки, а таблица MSsubscription_properties
создается в каждой базе данных подписки, которая использует пул-подписку.
Таблица | Описание |
---|---|
MSsnapshotdeliveryprogress | Отслеживает файлы, которые были успешно доставлены подписчику при применении моментального снимка. Эти данные используются для возобновления доставки файлов, если агент слияния не сможет доставлять все файлы во время сеанса. |
MSsubscription_properties | Содержит сведения о параметрах, необходимых для запуска агентов репликации на подписчике |