Как удалить репликацию ms sql
Перейти к содержимому

Как удалить репликацию ms sql

  • автор:

Удаление репликации вручную в SQL Server

В этой статье объясняется, как вручную удалить репликацию в SQL Server.

Оригинальная версия продукта: SQL Server
Исходный номер базы знаний: 324401

Аннотация

В этой статье описывается удаление репликации с компьютера под управлением Microsoft SQL Server. Чтобы удалить репликацию, необходимо удалить подписки, публикации и распространитель, настроенный для репликации. Репликацию можно удалить, запустив скрипт Transact-SQL, созданный SQL Server Enterprise Manager или SQL Server Management Studio. Однако если невозможно создать скрипт Transact-SQL для удаления репликации, можно вручную удалить репликацию с помощью системных хранимых процедур и других инструкций Transact-SQL. Эта статья содержит сведения о системных хранимых процедурах, которые можно использовать в этом процессе.

Дополнительные сведения о системных хранимых процедурах, упомянутых в этой статье, см. в SQL Server электронной документации.

Удаление репликации вручную

Репликацию можно удалить вручную с помощью системных хранимых процедур и других инструкций Transact-SQL. Чтобы полностью удалить репликацию, выполните следующие действия.

  1. Удалите все подписки, настроенные для репликации.
  2. Удалите все публикации, настроенные для репликации.
  3. Удалите распространитель, настроенный для репликации.

Системные хранимые процедуры для каждого типа репликации перечислены далее в этой статье. Используйте соответствующие хранимые процедуры в зависимости от типа репликации, которую требуется удалить.

Удаление подписок

Чтобы удалить подписки из экземпляра SQL Server, можно использовать следующие хранимые процедуры и соответствующие параметры:

  • sp_dropsubscription : системная хранимая sp_dropsubscription процедура позволяет удалять подписки на определенную статью, публикацию или набор подписок на издателе. Хранимую процедуру необходимо выполнить на сервере издателя в базе данных публикации.
  • sp_droppullsubscription : системная хранимая sp_droppullsubscription процедура позволяет удалить подписку в текущей базе данных подписчика. Хранимую процедуру необходимо выполнить на подписчике в базе данных подписки по запросу.
  • sp_dropmergesubscription : системная sp_dropmergesubscription хранимая процедура позволяет удалить подписку на публикацию слиянием и агент слияния, связанную с публикацией слиянием. Хранимую процедуру необходимо выполнить на сервере издателя в базе данных публикации.
  • sp_dropmergepullsubscription : для удаления подписки на слияние можно использовать sp_dropmergepullsubscription системную хранимую процедуру. Хранимую процедуру необходимо выполнить на подписчике в базе данных подписки по запросу.

Удаление подписок на моментальные снимки

Чтобы удалить принудительная подписка на все статьи для публикации моментального снимка, выполните следующий скрипт на издателе:

USE < **Publication database name** >GO EXEC sp_dropsubscription @publication = N'', @article = N'all', @subscriber = N'all', @destination_db = N'all' 

Чтобы удалить подписку на моментальный снимок по запросу во все статьи для публикации моментального снимка, выполните следующие действия.

    Выполните следующий скрипт SQL на подписчике:

USE < **Subscription database name** >GO EXEC sp_droppullsubscription @publisher = N'', @publisher_db = N'', @publication = N'' 
USE < **Publication database name** >GO EXEC sp_dropsubscription @publication=N'', @subscriber = N'', @article = N'all', @destination_db = N'all' 

Удаление транзакционной подписки

Чтобы удалить принудительная подписка на все статьи для публикации транзакций, выполните следующий скрипт на издателе:

USE < **Publication database name** >GO EXEC sp_dropsubscription @publication = N'', @article = N'all', @subscriber = N'all', @destination_db = N'all' 

Чтобы удалить подписку по запросу на все статьи для публикации транзакций, выполните следующие действия.

    Выполните следующий скрипт на подписчике:

USE < **Subscription database name** >GO EXEC sp_droppullsubscription @publisher = N'', @publisher_db = N'', @publication = N'' 
USE < **Publication database name** >GO EXEC sp_dropsubscription @publication =N'', @subscriber = N'', @article = N'all', @destination_db = N'' 

Удаление подписки слиянием

Чтобы удалить принудительная подписка, выполните следующий скрипт на издателе:

USE < **Publication database name** >GO EXEC sp_dropmergesubscription @publication = N'', @subscriber = N'', @subscriber_db = N'', @subscription_type = N'push' 

Чтобы удалить подписку по запросу, выполните следующие действия.

    Выполните следующий скрипт на подписчике:

USE < **Subscription database name** >GO EXEC sp_dropmergepullsubscription @publication = N'', @publisher = N'', @publisher_db = N'' 
USE < **Publication database name** >GO EXEC sp_dropmergesubscription @subscription_type = N'pull', @publication = N'', @subscriber = N'', @subscriber_db = N'' 

Удаление публикаций

После удаления всех подписок, которые подписываются на публикацию, можно удалить публикацию. После удаления публикаций в базе данных публикации необходимо задать для параметра базы данных репликации для базы данных публикации значение false. Чтобы удалить публикацию, можно использовать следующие системные хранимые процедуры:

  • sp_droppublication : системная хранимая sp_droppublication процедура позволяет удалить публикацию и связанные с ней статьи. Хранимую процедуру необходимо выполнить на издателе в базе данных публикации.
  • sp_dropmergepublication : системная хранимая sp_dropmergepublication процедура позволяет удалить публикацию слиянием и агент моментальных снимков, связанную с публикацией слиянием. Статьи, связанные с публикацией, также удаляются. Хранимую процедуру необходимо выполнить на издателе в базе данных публикации.
  • sp_replicationdboption : системная хранимая sp_replicationdboption процедура позволяет задать параметр базы данных репликации для текущей базы данных. Хранимую процедуру необходимо выполнить на сервере издателя.

Чтобы удалить публикацию моментального снимка, выполните следующий скрипт на издателе:

USE < **Publication database name** >GO EXEC sp_droppublication @publication = N'' USE master GO exec sp_replicationdboption @dbname = N'', @optname = N'publish', @value = N'false' 

Чтобы удалить публикацию транзакций, выполните следующий скрипт на издателе:

USE < **Publication database name** >GO EXEC sp_droppublication @publication = N'' USE master GO EXEC sp_replicationdboption @dbname = N'', @optname = N'publish', @value = N'false' 

Чтобы удалить публикацию слиянием, выполните следующий сценарий на сайте Publisher:

USE < **Publication database name** >GO EXEC sp_dropmergepublication @publication = N'' USE master GO EXEC sp_replicationdboption @dbname = N'', @optname = N'merge publish', @value = N'false' 

Удаление распространителя

После удаления всех подписок и публикаций можно удалить соответствующего распространителя. Однако перед удалением распространителя необходимо удалить обозначение подписчика с издателя. Для этого используйте следующие хранимые процедуры:

  • sp_dropsubscriber : системная хранимая sp_dropsubscriber процедура позволяет удалить обозначение подписчика с зарегистрированного сервера. Хранимая процедура удаляет запись реестра для подписчика. Хранимая процедура выполняется на издателе в базе данных публикации.
  • sp_dropdistributor : для удаления распространителя sp_dropdistributor можно использовать системную хранимую процедуру. Хранимая процедура выполняется на распространитетеле. Чтобы удалить название подписчика из Publisher, выполните следующий скрипт на сайте Publisher:

USE master GO EXEC sp_dropsubscriber @subscriber = N'', @reserved = N'drop_subscriptions' 

Чтобы удалить распространитель, выполните на распространитетеле следующий сценарий:

USE master GO EXEC sp_dropdistributor @no_checks = 1 

Использование хранимых процедур

При удалении репликации можно также использовать следующие хранимые процедуры:

    sp_removedbreplication : системная хранимая sp_removedbreplication процедура позволяет удалить все объекты репликации из базы данных без обновления данных на распространитетеле. Хранимую процедуру необходимо выполнить на издателе в базе данных публикации или на подписчике в базе данных подписки. Ниже приведен синтаксис этой хранимой процедуры.

sp_removedbreplication '' 
sp_droparticle @publication = N'', @article = N'', @force_invalidate_snapshot = 1 

Ссылки

Дополнительные сведения см. в следующих разделах электронной документации по SQL Server:

  • Отключение публикации и распространения
  • Удаление публикации
  • Удаление принудительной подписки
  • Удаление подписки по запросу

MS SQL Server: пошаговая настройка репликации

date

14.02.2020

user

insci

directory

SQL Server

comments

комментария 2

В этой статье мы рассмотрим, как настроить самый распространений тип репликации в SQL Serverтранзакционную репликацию. Этот тип репликации SQL Server используется для копирования данных в режиме реального времени, то есть данные на подписчиках появляются практически сразу (с учетом времени которое тратится на копирование данных по сети).

�� Онлайн-курс по устройству компьютерных сетей
На углубленном курсе «Архитектура современных компьютерных сетей» вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Репликация транзакций проста в настройке и доступна во всех версиях SQL Server. Данный тип репликации используется для двух целей:

    Репликация данных между несколькими серверами для read доступа (например, для разгрузки серверов OLTP типа);

Хотя у SQL Server есть много решений для балансировки нагрузки select запросов и средств обеспечения отказоустойчивости, транзакционная репликация это самый простой и быстрый способ, так как вы можете реплицировать отдельные объекты. Так же этот вид репликации полностью доступен в Standard лицензии SQL Server ( в отличии от групп доступности Always On, которые полноценно доступны только в Enterprise).

Преимущество репликации перед Always ON и зеркалированием баз данных в том, что с помощью репликации вы можете скопировать отдельные объекты (отдельные таблицы/представления), а не базу данных целиком.

Единственный минус транзакционной репликации —она не может работать в синхронном режиме – то есть, дожидаться завершения транзакции на подписчиках. Поэтому в случае форс-мажорного выключения любого участника репликации, данные могут быть потеряны или может произойти рассинхронизация между издателем и подписчиками.

SQL Server: основы технологии репликации

В любом типе репликации SQL Server есть 3 типа серверов:

  • Publisher (издатель) – основной экземпляр-источник, который публикует статьи;
  • Distributor (распространитель) – экземпляр который распространяет статьи на сервера-подписчики. Этот тип экземпляра не хранит у себя данные издателя на постоянной основе, а распространяет их подписчикам;

Роли могу пересекаться между собой. Например, один экземпляр может быть и издателем, и подписчиком (но не самого себя).

Работа репликации транзакций осуществляется через внутренние агенты SQL Server’а:

  • Агент чтения журналов;
  • Агент моментальных снимков;
  • Агент распространения.

При появлении транзакций в объектах, участвующих в репликации, на издателе, агент чтения журналов копирует эти транзакции на экземпляр-распространитель, затем агент распространитель копирует данные на подписчиков. Агент моментальных снимков участвует только тогда, когда нужно скопировать новый моментальный снимок (обычно это происходит при инициализации и реинициализации репликации).

Транзакции доставляются на подписчиков в той последовательности, в которой они были отправлены на издателя. Если транзакций слишком много, образуется очередь.

Транзакционная репликация работает асинхронно, так же как и асинхронные режимы Always On и зеркалирования баз данных. То есть, данные, которые были записаны на издатель, будут отправлены на подписчики без гарантии доставки в случае сбоя во время передачи данных. Это нужно учитывать, если вы собираетесь использовать транзакционную репликацию для избыточности и высокой доступности данных в SQL Server.

Схема связи агентов между собой из официальной документации:

схема реализации репликации базы данных в MS SQL Server

Рассмотрим, как настроить репликацию в SQL Server на следующем тестовом стенде:

  • 2 виртуальные машины с Windows Server 2019 в одной сети;
  • 2 установленных экземпляра SQL Server 2019.
  • testnode1\node1 – издатель (Publisher);
  • testnode2\node2 – подписчик (Subscriber);
  • testnode2\node2 – распространитель (Distributor).

В этом примере мы будем реплицировать одну таблицу с testnode1\node1 на testnode\node2. В роли распространителя будет выступать testnode2\node2.

Настройка распространителя в SQL Server

Для начала нужно настроить экземпляр распространителя. В разделе Replication, в контекстном меню нажмите Configure Distribution

Configure Distribution - настройка распространителя репликации

Так как мы хотим использовать этот экземпляр в качестве распространителя, выбираем первый пункт (testnove2 will act as its own Distributor; SQL Server will create a distribution databasse and log).

выбор роли replication disrtibutor в sql server

путь к каталогу снапшоотв репликации sql server

Указываем директорию для моментальных снимков. Я оставлю стандартный путь.

sql server путь к базе данных Distribution

Указываем директорию для базы данных Distribution. Если есть такая возможность, то лучше разместить файлы базы данных distribution на отдельном массиве дисков. Особенно это важно, если планируется большой объём реплицируемых данных.

На этом шаге можно указать экземпляры, которые смогут использовать данный сервер как распространитель. Я сразу добавлю testnode1\node1. Это можно сделать и позже, после начальной конфигурации.

настройка подписчиков репликации sql server

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

пароль для связи между Publisher и Distributor

После этого можно жать Finish. На этом настройка распространителя завершена.

Если вы хотите изменить пароль распространителя или разрешить другим издателям использовать этот распространитель, то можно это сделать через Distributor Properties

Distributor Properties в sql server 2019настройки распространителя sql репликации

Настройка издателя репликации в SQL Server

Теперь переходим к настройкам издателя репликации. Запустите тот же мастер Configure Distributuin.

Настройка издателя репликации SQL Server

Выберите второй пункт, указываем сервер распространитель – testnode2\node2

указать имя распространителя репликации

После этого введите пароль, который вы указывали при настройке распространителя и нажмите Finish.

Теперь можно создать новую публикацию: Replication -> Local Publication -> New Publication.

создание публикации sql server

Укажите базу данных, которая будет участвовать в репликации.

выберите базу данных для репликации

Выберите тип репликации. Доступны:

  • Snapshot publication;
  • Transactional publication (выберите этот тип репликации);
  • Peer-to-Peer publication;
  • Merge publication.

Transactional publication - транзакционная репликация

Выберите таблицы, которые нужно реплицировать. С помощью транзакционной репликации так же можно реплицировать пользовательские процедуры, функции и представления. Реплицируемые объекты называются Articles (Статьи).

выбор таблицы для репликации sql server

На следующем шаге можете указать фильтр для публикации.

sql фильтр репликации

Чтобы мастер сразу создал моментальный снимок, выберите опцию “Create a snapshot immediately and keep the snapshot available to initialize subscriptions”.

создать снимок sql server для инициализации репликации

выбор сервисных учетных записей

Укажите аккаунты, из-под которых будут выполняться агенты. Нажмите Security Settings и выберите “Run under SQL Server Agent service account”.

В имени публикации я указываю названия сервера-подписчика. Так легче ориентироваться если публикаций на другие сервера будет много.

настройка публикации

publication создана

Настройка подписчика репликации в SQL

На testnode2\node2 в разделе Replication -> Local Subscriptions создайте новую подписку.

создать подписку репликации -></p><div class='code-block code-block-13' style='margin: 8px 0; clear: both;'>
<!-- 13idcards -->
<script src=

Local Subscriptions в sql server» width=»339″ height=»256″ />

Выберите издателя, базу данных и публикацию в ней.

выбор издателя репликации

Выберите пункт “Run all agents at the Distributor”, чтобы агенты выполнялись на распространителе. В моём случае подписчик и распространитель совпадают, но обычно это разные сервера.

Если выбрать второй пункт (“Run each agent at its Subscriber”), то агенты будут выполняться на подписчике. Этот вариант предпочтителен, если распространитель у вас “формальный” и находится на одном сервере с издателем или подписчиком

Run all agents at the Distributor

Укажите базу данных, в которую будут реплицироваться данные из Subscription Database.

выбор базы даннх, в которую нужно реплицировать данные sql server

Снова укажите аккаунт, из-под которого будут выполняться агенты репликации.

выбор сервисных аккаунтов

Если вы хотите, чтобы данные реплицировались постоянно, выбирайте режим Agent Schedule -> Run continuously.

тип репликации постоянная Run continuously

Включите опцию Initialize, чтобы инициализировать подписку после завершения работы мастера.

Memory Optimized репликация

При включении параметра “Memory Optimized” таблицы на подписчике с этой публикации будут созданы как “In memory”. Если вы не планируете эти таблицы как таблицы для использования в оперативной памяти, то не отмечайте этот параметр.

настройка подписки закончена

На этом настройка подписки завершена. Теперь необходимо проверить работоспособность публикации и корректность выполнения репликации таблицы.

Мониторинг и управление репликацией в SQL Server

Практически всю настройку существующих публикаций можно провести через Replication Monitor.

Replication Monitor в sql server

Добавьте издателей через распространителя (Add Publisher -> Specify a Distributor and Add its Publishers).

Specify a Distributor and Add its Publishers

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

список доступных репликаций в sql server

Убедимся, что агент моментальных снимков отработал и доставил снимок на распространителя. В моём случае сначала была ошибки о том, что аккаунту из-под которого работают агенты, не хватает прав на базе TestDatabase1. Для решения этой проблемы я добавил сервисному аккаунту (из-под которого работает SQL Server) роль db_owner в базе TestDatabase1 на обоих экземплярах.

мониторинг репликации sql server

Так же убедимся, что распространитель доставил транзакции на подписчика.

процесс выполнения репликации

В логах агентов ошибок нет, проверим что наша таблица действительно появилась в базе.

Для начала добавим новую запись в таблицу.

проверка репликации данных в sql server

Проверяем, что эта запись реплицировалась на testnode2\node2.

данные успешно реплицированы sql server 2019

На этом базовая настройка репликации транзакций в SQL Server закончена.

Для диагностики проблем с репликацией в основном используется Replication Monitor, но можно использовать и дополнительные инструменты диагностики SQL Server.

�� Онлайн-курс по устройству компьютерных сетей
На углубленном курсе «Архитектура современных компьютерных сетей» вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Предыдущая статьяПредыдущая статья Следующая статья Следующая статья

Delete a Publication (Удаление публикации)

В этом разделе описывается удаление публикации в SQL Server с помощью SQL Server Management Studio, Transact-SQL или объектов управления репликацией (RMO).

В этом разделе

  • Для удаления публикации используется:Среда SQL Server Management StudioTransact-SQLобъекты RMO;

Использование среды SQL Server Management Studio

Удалите публикации из папки локальных публикаций в SQL Server Management Studio.

Удаление публикации
  1. Подключение издателю в Management Studio, а затем разверните узел сервера.
  2. Раскройте папку Репликация , а затем папку Локальные публикации .
  3. Щелкните правой кнопкой мыши публикацию, которую требуется удалить, и выберите Удалить.

Использование Transact-SQL

Публикации могут быть удалены программно, с помощью хранимых процедур репликации. Какие именно хранимые процедуры для этого применяются, зависит от типа удаляемой публикации.

При удалении публикации опубликованные объекты базы данных публикации и связанные с ними объекты базы данных подписки не удаляются. При необходимости их необходимо удалить вручную, при помощи инструкции DROP .

Удаление публикации моментальных снимков или транзакций
  1. Выполните одно из следующих действий:
  2. Для удаления отдельной публикации в базе данных публикации на издателе выполните инструкцию sp_droppublication .
  3. Чтобы удалить все публикации и удалить все объекты репликации из опубликованной базы данных, выполните процедуру sp_removedbreplication на издателе. Укажите значение tran в параметре @type. Если распространитель недоступен или база данных находится в подозрительном состоянии или в режиме «вне сети», укажите значение 1 в параметре @force(необязательно). Укажите имя базы данных в параметре @dbname , если процедура sp_removedbreplication не выполнялась в базе данных публикации (необязательно).

Примечание. Если задать значение 1 в параметре @force , в базе данных могут остаться объекты публикации, связанные с репликацией.

Удаление публикации слиянием
  1. Выполните одно из следующих действий:
  2. Чтобы удалить одну публикацию, выполните sp_dropmergepublication (Transact-SQL) на издателе в базе данных публикации.
  3. Чтобы удалить все публикации и удалить все объекты репликации из опубликованной базы данных, выполните процедуру sp_removedbreplication на издателе. Укажите значение merge в параметре @type. Если распространитель недоступен или база данных находится в подозрительном состоянии или в режиме «вне сети», укажите значение 1 в параметре @force(необязательно). Укажите имя базы данных в параметре @dbname , если процедура sp_removedbreplication не выполнялась в базе данных публикации (необязательно).

Примечание. Если задать значение 1 в параметре @force , в базе данных могут остаться объекты публикации, связанные с репликацией.

Примеры (Transact-SQL)

В следующем примере показано удаление публикации транзакций и отключение функции публикации транзакций для базы данных. В этом примере предполагается, что все подписки были удалены ранее. Дополнительные сведения см. в разделе Delete a Pull Subscription или Delete a Push Subscription.

DECLARE @publicationDB AS sysname; DECLARE @publication AS sysname; SET @publicationDB = N'AdventureWorks'; SET @publication = N'AdvWorksProductTran'; -- Remove a transactional publication. USE [AdventureWorks2022] EXEC sp_droppublication @publication = @publication; -- Remove replication objects from the database. USE [master] EXEC sp_replicationdboption @dbname = @publicationDB, @optname = N'publish', @value = N'false'; GO 

В следующем примере показано удаление публикации слиянием и отключение функции публикации слиянием для базы данных. В этом примере предполагается, что все подписки были удалены ранее. Дополнительные сведения см. в разделе Delete a Pull Subscription или Delete a Push Subscription.

DECLARE @publication AS sysname DECLARE @publicationDB AS sysname SET @publication = N'AdvWorksSalesOrdersMerge' SET @publicationDB = N'AdventureWorks' -- Remove the merge publication. USE [AdventureWorks] EXEC sp_dropmergepublication @publication = @publication; -- Remove replication objects from the database. USE master EXEC sp_replicationdboption @dbname = @publicationDB, @optname = N'merge publish', @value = N'false' GO 

При помощи объектов RMO

Публикации можно удалять программно с помощью объектов RMO. Классы RMO, используемые, чтобы удалить публикацию, зависят от типа удаляемой публикации.

Удаление публикации моментальных снимков или публикации транзакций
  1. Создайте соединение с издателем с помощью класса ServerConnection .
  2. Создайте экземпляр класса TransPublication.
  3. Задайте для публикации свойства Name и DatabaseName , а также установите созданное на шаге 1 соединение ConnectionContext в качестве значения для свойства.
  4. Чтобы убедиться в существовании публикации, проверьте свойство IsExistingObject . Если значение этого свойства равно false, то либо на шаге 3 были неверно определены свойства публикации, либо публикация не существует.
  5. Вызовите метод Remove .
  6. (Необязательно) Если в базе данных не существует других публикаций транзакций, базу данных можно отключить от публикации транзакций следующим образом.
    1. Создайте экземпляр класса ReplicationDatabase. В качестве значения для свойства ConnectionContext укажите экземпляр соединения ServerConnection , созданный на шаге 1.
    2. Вызовите метод LoadProperties . Если этот метод возвращает значение false, убедитесь, что база данных существует.
    3. Задайте для публикации свойства EnabledTransPublishing в значение false.
    4. Вызовите метод CommitPropertyChanges .
    Удаление публикации слиянием
    1. Создайте соединение с издателем с помощью класса ServerConnection .
    2. Создайте экземпляр класса MergePublication.
    3. Задайте для публикации свойства Name и DatabaseName , а также установите созданное на шаге 1 соединение ConnectionContext в качестве значения для свойства.
    4. Чтобы убедиться в существовании публикации, проверьте свойство IsExistingObject . Если значение этого свойства равно false, то либо на шаге 3 были неверно определены свойства публикации, либо публикация не существует.
    5. Вызовите метод Remove .
    6. (Необязательно) Если в базе данных не существует других публикаций слиянием, базу данных можно отключить от публикации слиянием следующим образом.
      1. Создайте экземпляр класса ReplicationDatabase. Присвойте свойству ConnectionContext значение экземпляра ServerConnection из шага 1.
      2. Вызовите метод LoadProperties . Если этот метод возвращает значение false, проверьте, существует ли база данных.
      3. Задайте для публикации свойства EnabledMergePublishing в значение false.
      4. Вызовите метод CommitPropertyChanges .

      Примеры (объекты RMO)

      В следующем примере удаляется публикация транзакций. Если в этой базе данных не существует других публикаций транзакций, публикация транзакций также отключается.

      // Define the Publisher, publication database, // and publication names. string publisherName = publisherInstance; string publicationName = "AdvWorksProductTran"; string publicationDbName = "AdventureWorks2022"; TransPublication publication; ReplicationDatabase publicationDb; // Create a connection to the Publisher // using Windows Authentication. ServerConnection conn = new ServerConnection(publisherName); try < conn.Connect(); // Set the required properties for the transactional publication. publication = new TransPublication(); publication.ConnectionContext = conn; publication.Name = publicationName; publication.DatabaseName = publicationDbName; // Delete the publication, if it exists and has no subscriptions. if (publication.LoadProperties() && !publication.HasSubscription) < publication.Remove(); >else < // Do something here if the publication does not exist // or has subscriptions. throw new ApplicationException(String.Format( "The publication could not be deleted. " + "Ensure that the publication exists and that all " + "subscriptions have been deleted.", publicationName, publisherName)); > // If no other transactional publications exists, // disable publishing on the database. publicationDb = new ReplicationDatabase(publicationDbName, conn); if (publicationDb.LoadProperties()) < if (publicationDb.TransPublications.Count == 0) < publicationDb.EnabledTransPublishing = false; >> else < // Do something here if the database does not exist. throw new ApplicationException(String.Format( "The database does not exist on .", publicationDbName, publisherName)); > > catch (Exception ex) < // Implement application error handling here. throw new ApplicationException(String.Format( "The publication could not be deleted.", publicationName), ex); > finally
      ' Define the Publisher, publication database, ' and publication names. Dim publisherName As String = publisherInstance Dim publicationName As String = "AdvWorksProductTran" Dim publicationDbName As String = "AdventureWorks2022" Dim publication As TransPublication Dim publicationDb As ReplicationDatabase ' Create a connection to the Publisher ' using Windows Authentication. Dim conn As ServerConnection = New ServerConnection(publisherName) Try conn.Connect() ' Set the required properties for the transactional publication. publication = New TransPublication() publication.ConnectionContext = conn publication.Name = publicationName publication.DatabaseName = publicationDbName ' Delete the publication, if it exists and has no subscriptions. If publication.LoadProperties() And Not publication.HasSubscription Then publication.Remove() Else ' Do something here if the publication does not exist ' or has subscriptions. Throw New ApplicationException(String.Format( _ "The publication could not be deleted. " + _ "Ensure that the publication exists and that all " + _ "subscriptions have been deleted.", _ publicationName, publisherName)) End If ' If no other transactional publications exists, ' disable publishing on the database. publicationDb = New ReplicationDatabase(publicationDbName, conn) If publicationDb.LoadProperties() Then If publicationDb.TransPublications.Count = 0 Then publicationDb.EnabledTransPublishing = False End If Else ' Do something here if the database does not exist. Throw New ApplicationException(String.Format( _ "The database does not exist on .", _ publicationDbName, publisherName)) End If Catch ex As Exception ' Implement application error handling here. Throw New ApplicationException(String.Format( _ "The publication could not be deleted.", _ publicationName), ex) Finally conn.Disconnect() End Try 

      В следующем примере удаляется публикация слиянием. Если в этой базе данных не существует других публикаций слиянием, публикация слиянием также отключается.

      // Define the Publisher, publication database, // and publication names. string publisherName = publisherInstance; string publicationName = "AdvWorksSalesOrdersMerge"; string publicationDbName = "AdventureWorks2022"; MergePublication publication; ReplicationDatabase publicationDb; // Create a connection to the Publisher. ServerConnection conn = new ServerConnection(publisherName); try < // Connect to the Publisher. conn.Connect(); // Set the required properties for the merge publication. publication = new MergePublication(); publication.ConnectionContext = conn; publication.Name = publicationName; publication.DatabaseName = publicationDbName; // Delete the publication, if it exists and has no subscriptions. if (publication.LoadProperties() && !publication.HasSubscription) < publication.Remove(); >else < // Do something here if the publication does not exist // or has subscriptions. throw new ApplicationException(String.Format( "The publication could not be deleted. " + "Ensure that the publication exists and that all " + "subscriptions have been deleted.", publicationName, publisherName)); > // If no other merge publications exists, // disable publishing on the database. publicationDb = new ReplicationDatabase(publicationDbName, conn); if (publicationDb.LoadProperties()) < if (publicationDb.MergePublications.Count == 0 && publicationDb.EnabledMergePublishing) < publicationDb.EnabledMergePublishing = false; >> else < // Do something here if the database does not exist. throw new ApplicationException(String.Format( "The database does not exist on .", publicationDbName, publisherName)); > > catch (Exception ex) < // Implement application error handling here. throw new ApplicationException(String.Format( "The publication could not be deleted.", publicationName), ex); > finally
      ' Define the Publisher, publication database, ' and publication names. Dim publisherName As String = publisherInstance Dim publicationName As String = "AdvWorksSalesOrdersMerge" Dim publicationDbName As String = "AdventureWorks2022" Dim publication As MergePublication Dim publicationDb As ReplicationDatabase ' Create a connection to the Publisher. Dim conn As ServerConnection = New ServerConnection(publisherName) Try ' Connect to the Publisher. conn.Connect() ' Set the required properties for the merge publication. publication = New MergePublication() publication.ConnectionContext = conn publication.Name = publicationName publication.DatabaseName = publicationDbName ' Delete the publication, if it exists and has no subscriptions. If (publication.LoadProperties() And Not publication.HasSubscription) Then publication.Remove() Else ' Do something here if the publication does not exist ' or has subscriptions. Throw New ApplicationException(String.Format( _ "The publication could not be deleted. " + _ "Ensure that the publication exists and that all " + _ "subscriptions have been deleted.", _ publicationName, publisherName)) End If ' If no other merge publications exists, ' disable publishing on the database. publicationDb = New ReplicationDatabase(publicationDbName, conn) If publicationDb.LoadProperties() Then If publicationDb.MergePublications.Count = 0 _ And publicationDb.EnabledMergePublishing Then publicationDb.EnabledMergePublishing = False End If Else ' Do something here if the database does not exist. Throw New ApplicationException(String.Format( _ "The database does not exist on .", _ publicationDbName, publisherName)) End If Catch ex As Exception ' Implement application error handling here. Throw New ApplicationException(String.Format( _ "The publication could not be deleted.", _ publicationName), ex) Finally conn.Disconnect() End Try 

      Как удалить системную БД distribution после некорректной настройки репликации?

      После некорректной настройки SQL Server 2017 образовалась системная БД distribution. Все попытки отключить репликацю системными средствами потерпели неудачу (ввиду спешки и отсутствия опыта). Остановив сервер удалил саму БД физически с ЖМД. Теперь база имеет статус «Ожидание восстановления». При этом в «Свойствах издателя» имеется запись, что «Этот сервер является своим собственным распространителем». Как вернуть «все как было»?

      • Вопрос задан 16 мая 2023
      • 80 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *