Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как реализовать синхронизацию баз на двух удаленных серверах?  [new]
uaggster
Member

Откуда:
Сообщений: 1073
Коллеги, приветствую!
Помогите, т.с., концептуально. В какую сторону копать?

Имеется некая сеть самостоятельных филиалов (~50), каждый из которых обладает некой самостоятельной базой (~40 Гб).
Необходимо реплицировать эти базы на некий центральный сервер (только восходящая репликация, от филиала на центральный сервер).
Требования к этой синхронизации:
0. Каждый филиал реплицирует данные в свою БД на центральном сервере.
1. Каналы связи между филиалами и центральным офисом - разной степени стабильности и не быстрые, 1-20 Мбит. Разрывы связи - возможны.
2. Базы в филиалах - OLTP, но поток изменения - небольшой.
3. Заказчик хочет видеть изменения в центральной базе максимально оперативно. С задержкой порядка ~10 сек. (в случае, если изменились данные, относящиеся к одному... ну, заказу, назовем так). Изменения затрагивают множество таблиц, но объем данных при этом - небольшой, и, в принципе, может быть передан даже со скоростью 1 Мбит за 3-5 секунд.
4. В случае, если объем изменившихся данных - большой, и/или связь прервалась - попытки связаться должны продолжаться пока ситуация не рассосется. И данные должны быть по итогу - переданы.
5. Обе базы всегда должны быть доступными на чтение/изменение. Разрыв связи между центром и филиалом никак не должен влиять ни на целостность данных, ни на оперативную доступность ни той, ни другой базы.
6. Все изменения в данных, которые сделает у себя центр (если таковые вдруг случатся) - должны быть перезатёрты данными из филиала.

Подскажите хотя бы в каком направлении копать? Логшиппинг? Стандартный? Самописанный? Миррор баз? Репликация?
Что-то руками колдовать?

Microsoft SQL Server 2012 - 11.0.5058.0 (X64)
May 14 2014 18:34:29
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
8 июл 15, 12:38    [17867051]     Ответить | Цитировать Сообщить модератору
 Re: Как реализовать синхронизацию баз на двух удаленных серверах?  [new]
Хитрый еж
Guest
uaggster
Коллеги, приветствую!
Помогите, т.с., концептуально. В какую сторону копать?

Имеется некая сеть самостоятельных филиалов (~50), каждый из которых обладает некой самостоятельной базой (~40 Гб).
Необходимо реплицировать эти базы на некий центральный сервер (только восходящая репликация, от филиала на центральный сервер).
Требования к этой синхронизации:
0. Каждый филиал реплицирует данные в свою БД на центральном сервере.
1. Каналы связи между филиалами и центральным офисом - разной степени стабильности и не быстрые, 1-20 Мбит. Разрывы связи - возможны.
2. Базы в филиалах - OLTP, но поток изменения - небольшой.
3. Заказчик хочет видеть изменения в центральной базе максимально оперативно. С задержкой порядка ~10 сек. (в случае, если изменились данные, относящиеся к одному... ну, заказу, назовем так). Изменения затрагивают множество таблиц, но объем данных при этом - небольшой, и, в принципе, может быть передан даже со скоростью 1 Мбит за 3-5 секунд.
4. В случае, если объем изменившихся данных - большой, и/или связь прервалась - попытки связаться должны продолжаться пока ситуация не рассосется. И данные должны быть по итогу - переданы.
5. Обе базы всегда должны быть доступными на чтение/изменение. Разрыв связи между центром и филиалом никак не должен влиять ни на целостность данных, ни на оперативную доступность ни той, ни другой базы.
6. Все изменения в данных, которые сделает у себя центр (если таковые вдруг случатся) - должны быть перезатёрты данными из филиала.

Подскажите хотя бы в каком направлении копать? Логшиппинг? Стандартный? Самописанный? Миррор баз? Репликация?
Что-то руками колдовать?

Microsoft SQL Server 2012 - 11.0.5058.0 (X64)
May 14 2014 18:34:29
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)


Все сделаете стандартными средствами SQL сервера. Конечно лудше использовать восходящюю репликацию от филиалов к центру.
МИРРОР БАЗ ОЧЕНЬ ТРУДОЗАТРАТЕН В ПЛАНЕ БЫСРОЙ ДОСТУПНОСТИ, СНАЧАЛО ДОЛЖЕН БЫТЬ МИРРОР, А ТОЛЬКО ПОТОМ ДОСТУП К ЭТОМУ МИРРОРРУ. Можно сделать и самописанную версию, типа триггера, который сразу все обновления будет порцеонно добавлять сразу к себе и в центральный сервер.
8 июл 15, 13:57    [17867427]     Ответить | Цитировать Сообщить модератору
 Re: Как реализовать синхронизацию баз на двух удаленных серверах?  [new]
komrad
Member

Откуда:
Сообщений: 5764
uaggster,

10 секунд на нестабильных каналах? сомневаюсь...
ну если только репликация - transactional or merge
8 июл 15, 14:02    [17867460]     Ответить | Цитировать Сообщить модератору
 Re: Как реализовать синхронизацию баз на двух удаленных серверах?  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
uaggster,

ну видимо придется выбирать между мерж и транзакционной репликацией . вот тут неплохо сравнили их тыц . Могу от себя добавить, что мердж устойчива к падениям связи и есть механизмы для разруливания конфликтов, с другой стороны она сильнее грузит Publisher - на каждой таблице входящей в репликацию создаются триггеры на которых происходят некоторые действия с механизмом репликации и если лочится какая-нибудь служебная таблица репликационная, то ждут все процессы изменения данных в пользовательских таблицах. В транзакционной такого нет, там после коммита изменений данных в пользовательской таблице считываются закомиченная команда из лога транзакций и отправляется агентом в репликацию - выходит что транзакция в пользовательской таблице никак не связана с механизмом репликации и не ждет ничего.
9 июл 15, 11:22    [17870940]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить