Репликация. Прошу совета.

Joss
Дата: 15.01.2009 19:41:16
Есть следующая задача.
Имеется: головной офис и филиалы, разбросанные по районам. Интернет почти везде слабый. Модемы, телефонная линия, выделенки нет.
Необходимо вести общую базу данных.
Способ решения - репликация данных. (Синхронизировать часто не надо, достаточно раз-два в месяц. Критичен объем данных, передаваемый по и-нету)

Что предпринято. Центральная база стоит на MS SQL Server 2005. Поставил у себя MS SQL Express. Сделал реплики для каждого филиала и разместил их у себя на машине. (Синхронизация по запросу)
Сымитировал работу с филиалом. Сделал полный бэкап реплики, заархивировал, передал на другой компьютер, где есть MS SQL Express, разархивировал, восстановил базу. Внес некоторые изменения, опять бэкап, архивирование, передача, разархивирование, восстановление, синхронизация реплики.

Почему я так расписываю подробно? Дело в том, что объем базы (начальный) в бэкапе ~ 20 Mb, в архиве ~ 4 Mb. А потом будет ещё расти. Я хотел передавать не полную реплику, а только изменения (Differential). Но такие бэкапы отказываются восстанавливаться. И приходится передавать полный бэкап, что сложновато.

Может кто-нибудь сталкивался с этим или решал сходные проблемы? Как это делалось? В смысле синхронизации данных из нескольких источников без сети.

===================================================================
А, ты, вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса?
Mr Marmelad
Дата: 15.01.2009 19:57:19
Коллега а какой смысл в синхронизации? Ещё раз объясните пжст архитектуру - есть центральная база и Вы хотите раз - два - переслать из нее значения в другие? Объём данных - в Вашем случае совсем не критичен.
GreenSunrise
Дата: 15.01.2009 20:15:48
Странно. Топик вы назвали "Репликация", а прочитать в хелпе про репликацию не удосужились. Почитайте про merge-репликацию и не торопитесь изобретать велосипед.
Joss
Дата: 16.01.2009 00:53:04
to GreenSumrise

Наверно я так читаю хелп, как Вы - мой пост (шутка). Читал я про репликацию, читал. Но, теория - теорией, а главное - практика. Это моя первая задача с репликацией, так что я могу кое-что не понимать или понимать неправильно. Так что как в том анекдоте. "Ты тут не мудрствуй, ты пальцем покажи..."

Попробую рассказать о проблеме более подробно.

Имеется: головной офис и филиалы, разбросанные по районам. Филиалов больше десятка. Значительно больше. В базе около 40 таблиц. около 30 - данные практически не меняются. Это различные справочники и классификаторы. В остальных таблицах - переменные данные. При чем каждый филиал вносит свои данные, которые не перекрываются. (основные фонды, договора, платежки и т.п.). Раз в месяц эти данные надо объединять, обрабатывать, анализировать.

Надо иметь базы на местах, а потом сливать их в главном офисе. Решил использовать репликацию. Два типа репликации. Для таблиц, которые не изменяются - метод моментальных снимков. Для таблиц, которые изменяются - merge-репликация.

Проблема синхронизации. Как синхронизировать? Если бы сервера были в локальной сети, то не было бы проблем. А так связь с офисами через электронную почту, да модем типа 56К. Выделенка есть далеко не у всех. Правда, вроде бы через интернет можно создать виртуальную локальную сеть. Но как к этому отнесется наш админ? И насколько она будет надежна?

Я предполагаю решить эту проблему так. Создаю копии баз данных и подписки на своем компьютере для всех офисов и выполняю на нем синхронизацию. Потом бэкапю базы и рассылаю бэкапы по филиалам. В офисах работают с базой, затем делают бэкап и отсылают обратно. Здесь я восстанавливаю базы из бекапов, провожу синхронизацию, после обрабатывается общая база, производится необходимая корректировка. Потом опять синхронизация, бэкапы, рассылка и все по новой. При такой организации трафик более гига за один раз. Как его сократить? Бэкап приходится делать полный, т.к. бэкап изменений (Differential) не хочет восстанавливаться.

Или можно синхронизировать через интернет? Вероятно можно. Но я об этом не читал.
Mr Marmelad
Дата: 16.01.2009 01:03:20
Joss
около 30 - данные практически не меняются. Это различные справочники и классификаторы. В остальных таблицах - переменные данные. При чем каждый филиал вносит свои данные, которые не перекрываются. (основные фонды, договора, платежки и т.п.). Раз в месяц эти данные надо объединять, обрабатывать, анализировать.


Коллега Да у вас не репликация нужна а Дата Март - или Хранилище как Вы его называете. Это Аналитика а не репликация. И Решать ее надо с помощью ETL - прототип которого Вы и придумали но если Вы повнимательнее поизучаете SSIS Вы найдете там массу чего интересного по Вашему вопросу.

Это чисто с технической точки зрения - но для начала - спросите Ваш бизнес - а что собственно они хотят анализировать. И с этой "ерунды " и начните.
Дедушка
Дата: 16.01.2009 08:46:55
to Joss:
для Вас существенными являются следующие моменты
Joss
1. каждый филиал вносит свои данные, которые не перекрываются.
2.надо иметь базы на местах, а потом ... раз в месяц... сливать их в главном офисе.
3.связь с офисами через электронную почту, да модем типа 56К.

В таблицах в которых данные изменяются наверное есть поле "дата вставки\обновления" если нет заведите. В каждом филиале сохраняйте в файл только новые\изменённые данные. пересылайте их по е-маилу в головной офис. В головном создайте либо SSIS пакет либо скрипт который берет аттачи из писем и обрабатывает. Как бонус можно сделать этот пакет\скрипт универсальным чтобы его можно было использовать ещё и в филиалах для обработки присылаемых по почте справочников из головного офиса.
Joss
Дата: 16.01.2009 10:56:21
Спасибо за наводку. У меня под рукой только двухтомник Р.Вьейра "SQL Server 2000. Программирование" а там про ETL - (от англ. Extract, Transform, Load) ничего нет. Как и про службы SQL Server 2005 Integration Services (SSIS). Сейчас нарыл в и-нете материал и залез в изучение. Может подкините пару практических советов, на что стоит обратить особое внимание?

А репликация все-таки нужна. Таблицы между собой связаны по первичным ключам и как это обеспечить без репликации - я не представляю.
Дедушка
Дата: 16.01.2009 11:03:38
Joss
...Таблицы между собой связаны по первичным ключам и как это обеспечить без репликации - я не представляю.

обеспечить что?
GreenSunrise
Дата: 16.01.2009 13:01:46
Joss
Сымитировал работу с филиалом. Сделал полный бэкап реплики, заархивировал, передал на другой компьютер, где есть MS SQL Express, разархивировал, восстановил базу. Внес некоторые изменения, опять бэкап, архивирование, передача, разархивирование, восстановление, синхронизация реплики.

1. Я не понимаю, зачем вам и бэкапы туда-сюда таскать, и репликацию одновременно с этим иметь. Уж или одно или другое.

И еще несколько вопросов:
2. Каков объем ИЗМЕНИВШИХСЯ данных за период между синхронизациями?
3. Почему не делать синхронизацию чаще, тогда поменьше данных надо будет передавать.
4. Не вопрос, а предложение - VPN настройте, и будет вам нормальная репликация без таскания бэкапов. А админа не спрашивать надо, хочется ему что-то делать или нет, а задания ему давать в приказном порядке :-)
Mr Marmelad
Дата: 16.01.2009 16:55:15
Joss,

Самый практический совет - Начните переговоры с бизнесом. Спросите их - ЧТО , РЕБЯТА ВАМ НАДО? Конкретно. Это или отчётность или складирование информации для последующего анализа или управление (контроль) работы на местах. Или всё вместе взятое. Если У Вас Коллега SQL 2000 - SSIS там нет. Он появился в 2005. Но по моему Вы и указывали 2005 где то в начале. Значит - Подготовьте для начала себе базочку - отстойник - типа того что Вы и делаете бякапами. На своём компе. Но данные туда реплицировать наверное смысла нет. Их надо грузить. То есть на основе того что хочет бизнес - составить Extract - процесс. Выборку данных с мест. На Вашем объёме - ето просто мелочь. Потом начнётся Transformation - подготовка к общему заливу - синхронизация всех деталей - перемена ключей, агрегирование - усреднение и так далее. Там и с ключми разберётесь. А вот в конце будет Load - загрузка в Ваш финальный аппартат - или Куб, Или Хранилище - Или среднюю арифметическую базочку. В Зависимости от Вашего Бизнес Требования. Конечно можно и репликацию замутить. Но это помоему будет в Вашем случае слишком "круто" - Изучайте SSIS Настоятельно рекоммедую.