SQL Server script to remove replication?
I have been asked to write a SQL script that can be run, which will stop replication and remove the subscriber/subscription.
Is this at all possible? Or do you have to use the GUI?
2 Answers 2
Which version of SQL Server you are using.
Google as well provides MSDN article in results
How to: Disable Publishing and Distribution (Replication Transact-SQL Programming) — http://msdn.microsoft.com/en-us/library/ms147921.aspx
![]()
If you’re look to completely remove replication, including all the «bits». Or your server only has one publication and this is the one you’re trying to remove.
I would recommend:
- Connect to the Publisher or Distributor you want to disable in Microsoft SQL Server Management Studio, and then expand the server node.
- Right-click the Replication folder, and then click Disable Publishing and Distribution.
- Follow the steps in the Disable Publishing and Distribution Wizard, and instead of processing select the option to generate scripts.
This has the advantage of not only completely cleaning things up. But also removing the distribution database, which if you’ve ever dealt with before is known to become littered with remnants of replications past.
MS SQL Server: пошаговая настройка репликации
14.02.2020
insci
SQL Server
Один комментарий
В этой статье мы рассмотрим, как настроить самый распространений тип репликации в SQL Server – транзакционную репликацию. Этот тип репликации SQL Server используется для копирования данных в режиме реального времени, то есть данные на подписчиках появляются практически сразу (с учетом времени которое тратится на копирование данных по сети).
Репликация транзакций проста в настройке и доступна во всех версиях SQL Server. Данный тип репликации используется для двух целей:
- Репликация данных между несколькими серверами для read доступа (например, для разгрузки серверов OLTP типа);
- Как решение для избыточности данных отдельных объектов.
Хотя у SQL Server есть много решений для балансировки нагрузки select запросов и средств обеспечения отказоустойчивости, транзакционная репликация это самый простой и быстрый способ, так как вы можете реплицировать отдельные объекты. Так же этот вид репликации полностью доступен в Standard лицензии SQL Server ( в отличии от групп доступности Always On, которые полноценно доступны только в Enterprise).
Преимущество репликации перед Always ON и зеркалированием баз данных в том, что с помощью репликации вы можете скопировать отдельные объекты (отдельные таблицы/представления), а не базу данных целиком.
Единственный минус транзакционной репликации —она не может работать в синхронном режиме – то есть, дожидаться завершения транзакции на подписчиках. Поэтому в случае форс-мажорного выключения любого участника репликации, данные могут быть потеряны или может произойти рассинхронизация между издателем и подписчиками.
SQL Server: основы технологии репликации
В любом типе репликации SQL Server есть 3 типа серверов:
- Publisher (издатель) – основной экземпляр-источник, который публикует статьи;
- Distributor (распространитель) – экземпляр который распространяет статьи на сервера-подписчики. Этот тип экземпляра не хранит у себя данные издателя на постоянной основе, а распространяет их подписчикам;
- Subscriber (подписчик) – экземпляр который получает распространяемые статьи.
Роли могу пересекаться между собой. Например, один экземпляр может быть и издателем, и подписчиком (но не самого себя).
Работа репликации транзакций осуществляется через внутренние агенты SQL Server’а:
- Агент чтения журналов;
- Агент моментальных снимков;
- Агент распространения.
При появлении транзакций в объектах, участвующих в репликации, на издателе, агент чтения журналов копирует эти транзакции на экземпляр-распространитель, затем агент распространитель копирует данные на подписчиков. Агент моментальных снимков участвует только тогда, когда нужно скопировать новый моментальный снимок (обычно это происходит при инициализации и реинициализации репликации).
Транзакции доставляются на подписчиков в той последовательности, в которой они были отправлены на издателя. Если транзакций слишком много, образуется очередь.
Транзакционная репликация работает асинхронно, так же как и асинхронные режимы Always On и зеркалирования баз данных. То есть, данные, которые были записаны на издатель, будут отправлены на подписчики без гарантии доставки в случае сбоя во время передачи данных. Это нужно учитывать, если вы собираетесь использовать транзакционную репликацию для избыточности и высокой доступности данных в 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…

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


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

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

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

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


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

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

После этого введите пароль, который вы указывали при настройке распространителя и нажмите Finish.
Теперь можно создать новую публикацию: Replication -> Local Publication -> New Publication.

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

Выберите тип репликации. Доступны:
- Snapshot publication;
- Transactional publication (выберите этот тип репликации);
- Peer-to-Peer publication;
- Merge publication.

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

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

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


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


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

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

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

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

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

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

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

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

На этом настройка подписки завершена. Теперь необходимо проверить работоспособность публикации и корректность выполнения репликации таблицы.
Мониторинг и управление репликацией в SQL Server
Практически всю настройку существующих публикаций можно провести через Replication Monitor.

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

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

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

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

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

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

На этом базовая настройка репликации транзакций в SQL Server закончена.
Для диагностики проблем с репликацией в основном используется Replication Monitor, но можно использовать и дополнительные инструменты диагностики SQL Server.
Как удалить репликацию ms sql
Скрипт SQL Server для удаления репликации?

- Подключитесь к издателю или распространителю, который вы хотите отключить в Microsoft SQL Server Management Studio, а затем разверните узел сервера.
- Щелкните правой кнопкой мыши папку «Репликация» и выберите «Отключить публикацию и распространение».
- Следуйте инструкциям мастера отключения публикации и распространения и вместо обработка выберите вариант генерировать скрипты.
Как исправить испорченную репликацию на MS SQL Server
SQL Server script to remove replication?
I have been asked to write a SQL script that can be run, which will stop replication and remove the subscriber/subscription.
Is this at all possible? Or do you have to use the GUI?
2 Answers 2
Which version of SQL Server you are using.
Google as well provides MSDN article in results
How to: Disable Publishing and Distribution (Replication Transact-SQL Programming) — http://msdn.microsoft.com/en-us/library/ms147921.aspx
![]()
![]()
If you’re look to completely remove replication, including all the «bits». Or your server only has one publication and this is the one you’re trying to remove.
I would recommend:
- Connect to the Publisher or Distributor you want to disable in Microsoft SQL Server Management Studio, and then expand the server node.
- Right-click the Replication folder, and then click Disable Publishing and Distribution.
- Follow the steps in the Disable Publishing and Distribution Wizard, and instead of processing select the option to generate scripts.
This has the advantage of not only completely cleaning things up. But also removing the distribution database, which if you’ve ever dealt with before is known to become littered with remnants of replications past.
Как удалить репликацию ms sql
Статья представляет собой краткий справочник по использованию утилит командной строки для репликации MS SQL Server 2000.
Одну из ведущих ролей в репликации MS SQL Server играют агенты, которые являются утилитами командной строки. В данной статье мы рассмотрим четыре агента репликации: distrib.exe — Replication Distribution Agent, snapshot.exe — Replication Snapshot Agent, replmerg.exe — Replication Merge Agent и logread.exe — Replication Log Reader Agent.
Обычно, все эти четыре утилиты можно найти в каталоге C:\Program Files\Microsoft SQL Server\80\COM . Для того, что бы посмотреть параметры их вызова, необходимо запустить соответствующие исполняемые файлы с ключом «-?». На Вашем экране будет представлен синтаксис их запуска и перечень возможных ключей. Эта информация собрана в находящейся ниже по тексту таблице.
| distrib.exe [-?] | snapshot.exe [-?] | replmerg.exe [-?] | logread.exe [-?] | ||||||||||||||||
| Код |
| CREATE PROCEDURE dbo.ZvkList AS SELECT * FROM ACCESSDB. [Заявки] |
| Код |
| CREATE PROCEDURE dbo.ZvkList AS SELECT * FROM ACCESSDB. "Заявки" |
| Код |
| CREATE PROCEDURE dbo.ZvkList AS SELECT * FROM "ACCESSDB. Заявки" |
"Check Syntax" проходит на ура, а вот если жму на кнопку OK , то выскакивает
| Цитата |
| Error 7475: Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options to be set for the connection. This ensures consistent query semantics. Enable these options and then reissue your query. |
В свойствах сервера выставлял галки ANSI_NULLS и ANSI_WARNINGS. Не помогло.
Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл
Репутация: 2
Всего: 44
Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006
Репутация: нет
Всего: 8
Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл
Репутация: 2
Всего: 44
| Цитата(HappyLife @ 7.9.2007, 13:55 ) |
| DimW, нет, эти самые точки означают что база данных слинкованная а не локальная. Это синтаксис MS SQL |
сори, кто бы мог подумать
Профиль
Группа: Модератор
Сообщений: 20541
Регистрация: 8.4.2004
Где: Зеленоград
Репутация: 13
Всего: 453
О(б)суждение моих действий — в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция — Администрация форума.
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
- вопросам по СУБД для которых нет отдельных подфорумов
- вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
- инструменты для работы с СУБД
- вопросы проектирования БД
- теоретически вопросы о СУБД
Данный форум не предназначен для:
- вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
- обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
- обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
- просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
- объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы:
При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.
Для вставки кода используйте теги [code=sql] [/code].
Литературу по базам данных можно поискать здесь.
Действия модераторов можно обсудить здесь.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
[ Время генерации скрипта: 0.1090 ] [ Использовано запросов: 21 ] [ GZIP включён ]
Как удалить репликацию ms sql
Скрипт SQL Server для удаления репликации?
Меня попросили написать сценарий SQL, который можно запустить, чтобы остановить репликацию и удалить подписчика/подписку.
Это вообще возможно? Или вам нужно использовать графический интерфейс?
Ответы

Какую версию SQL Server вы используете.
Google также предоставляет статью MSDN в результатах
Как отключить публикацию и распространение (программирование репликации на языке Transact-SQL) — http://msdn.microsoft.com/en-us/library/ms147921.aspx

Если вы хотите полностью удалить репликацию, включая все «биты». Или на вашем сервере есть только одна публикация, которую вы пытаетесь удалить.
Я бы порекомендовал:
- Подключитесь к издателю или распространителю, который вы хотите отключить в Microsoft SQL Server Management Studio, а затем разверните узел сервера.
- Щелкните правой кнопкой мыши папку «Репликация» и выберите «Отключить публикацию и распространение».
- Выполните действия, описанные в мастере отключения публикации и распространения, и вместо обработки выберите параметр для создания сценариев .
Преимущество этого заключается не только в полной очистке вещей. Но также удаление базы данных распространителя, которая, если вы когда-либо имели дело раньше, как известно, засорена остатками прошлых репликаций.
Полную документацию можно найти здесь .

и используйте номер процесса, чтобы убить его, как показано ниже: kill 65
Связанные вопросы
Добавить столбец со значением по умолчанию в существующую таблицу в SQL Server
Вставить результаты хранимой процедуры во временную таблицу
SQL-запрос для выбора дат между двумя датами
Как я могу выполнить инструкцию UPDATE с JOIN в SQL Server?
Перед созданием временной таблицы проверьте, существует ли временная таблица, и удалите, если она существует.

