Зміна шпальти таблиці, що бере участь в реплікації

Іноді структура таблиці, яка бере участь в реплікації потребує зміни. Для цього може бути кілька причин - спочатку неправильний вибір типу даних, відсутність значення за замовчуванням або необхідність перейменувати стовпець. Спроба змінити структуру таблиці безпосередньо закінчиться помилкою:

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

Метод, який ми вибираємо, залежить частково від типу реплікації і розміру таблиці, але є два основні варіанти:

Для реплікації моментальних знімків (Snapshot Replication) це очевидний вибір. Ми видаляємо підписку на цю статтю, видаляємо статтю, потім вносимо зміни в таблицю. Далі в зворотному порядку (додаємо статтю, додаємо підписку на статтю). Наступного разу, коли Snapshot Agent (агент знімків) буде запущений, він збере нову схему без всяких проблем.
Для реплікації транзакцій (Transactional Replication) ми теж можемо вибрати сценарій, описаний вище. Однак ми повинні бути більш обережними в цьому випадку. За замовчуванням операції вставки, зміни та видалення, виконані на видавця, поширюються на передплатника в формі виклику збереженої процедури. Змінюючи визначення стовпця, ми можливо повинні змінити пов'язані збережені процедури на всіх передплатників. Доповнення значення за замовчуванням труднощів не викличе, але безпосереднє зміна типу поля як описано вище вимагатиме модифікації аргументів збережених процедур. Для таблиці tEmployees з прикладу вище, ці процедури існують на передплатника у вигляді:

оперативне зміна таблиці

Хоча вищезгаданий сценарій може використовуватися для реплікації транзакцій або реплікації зведенням, внутрішня методологія різна через відрізняється характеру цих двох методів. Для реплікації зведенням, деталі оновлених рядків були б збережені в MSmerge_contents, і якщо зазначена рядок була змінена один раз або сто, в цій системній таблиці буде тільки один запис (для синхронізації / реплікації), в той час як при реплікації транзакцій, 100 змін рядка приведуть до 100 оновлень передплатника. Це означає, що реплікація зведенням, має перевагу перед реплікацією транзакцій, тому що нам потрібно виконати 2 зміни кожної терміни, щоб зробити зміна схеми.