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

Откуда: DTS
Сообщений: 187
Добрый день!

Есть два сервера:
- SRV1 - девелопер сервер
- SRV2 - продакшн сервер, на котором работает предприятие

на каждом по базе:
- SRV1.DB1
- SRV1.DB2

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

Вопросы:
1. как лучше организовать синхронизацию справочников и системных таблиц?
2. можно ли автоматизировать синхронизацию структур данных, не затрагивая сами данные?
3. этот вариант мы рассматриваем в рамках одного домена, как концептуально реализовать эту схему при отсутствии постоянной связи между SRV1 и SRV2?

Спасибо! Хочется найти системное решение для подобных схем.
29 окт 12, 12:57    [13390090]     Ответить | Цитировать Сообщить модератору
 Re: Синхронизация БД  [new]
Crimean
Member

Откуда:
Сообщений: 13147
> 1. как лучше организовать синхронизацию справочников и системных таблиц?

вести такие справочники отдельно, реализовать для них закачку через MERGE алгоритм, помещать исходники справочников в саурс контрол систему. но если "исторически" справочники "изначально" наполняются в не-продакшене (где попало) - сделать еще и выгрузку для них, будет быстрее / проще, а "правильно" после сделаете

> 2. можно ли автоматизировать синхронизацию структур данных, не затрагивая сами данные?

конечно, поиск / FAQ

> реализовать эту схему при отсутствии постоянной связи между SRV1 и SRV2?

через сохранение метаданных в файл
29 окт 12, 13:25    [13390347]     Ответить | Цитировать Сообщить модератору
 Re: Синхронизация БД  [new]
chatm
Member

Откуда: Москва
Сообщений: 480
maffey,

про метаданные.

Структура девелоперской базы может менятся? Если да, то на каком этапе принимается решение, что продуктив должен быть "накатан" из девелоперской базы?

В SAP, например, для этих целей используется понятие "траснпорта", когда обновление метаданных в продуктиве происходит по решению РП.
29 окт 12, 14:14    [13390889]     Ответить | Цитировать Сообщить модератору
 Re: Синхронизация БД  [new]
maffey
Member

Откуда: DTS
Сообщений: 187
chatm,

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

вопрос не организационный, а скорее технологический.
29 окт 12, 15:06    [13391455]     Ответить | Цитировать Сообщить модератору
 Re: Синхронизация БД  [new]
maffey
Member

Откуда: DTS
Сообщений: 187
Crimean
> 1. как лучше организовать синхронизацию справочников и системных таблиц?

вести такие справочники отдельно, реализовать для них закачку через MERGE алгоритм, помещать исходники справочников в саурс контрол систему. но если "исторически" справочники "изначально" наполняются в не-продакшене (где попало) - сделать еще и выгрузку для них, будет быстрее / проще, а "правильно" после сделаете

> 2. можно ли автоматизировать синхронизацию структур данных, не затрагивая сами данные?

конечно, поиск / FAQ

> реализовать эту схему при отсутствии постоянной связи между SRV1 и SRV2?

через сохранение метаданных в файл


Crimean, 2 и 3 - ок

по пункту 1. как лучше организовать синхронизацию справочников и системных таблиц?

На данный момент реализован SSIS проект, который эту проблему решает практически полностью за исключением одной важной детали - по окончании его выполнения дестинейшн-справочники имеют нужное наполнение, идентичное сурс-справочникам.
НО пользовательские таблицы, смотрящие в этот справочник имеют наполнение, требующее корректировки - апдейтов и занулений (в случае удаления значения из справочника). Т.е. если на один справочник смотрят 10 пользовательских, то на 10 справочников - уже 100! Скриптами поддерживать это хозяйство не очень правильно.

Очень не хочется изобретать велосипед, какие мысли?
29 окт 12, 15:17    [13391584]     Ответить | Цитировать Сообщить модератору
 Re: Синхронизация БД  [new]
Crimean
Member

Откуда:
Сообщений: 13147
maffey
по окончании его выполнения дестинейшн-справочники имеют нужное наполнение, идентичное сурс-справочникам
...
НО пользовательские таблицы, смотрящие в этот справочник имеют наполнение, требующее корректировки


это чего это? щаз "закидают помидорами", но "принято" справочники делать как-то так:

Id ( int identity / guid default (newid()) / ... ) primary key, -- DRI
ApplicationCode ... unique, -- key value
RowAlive -- признак "актуальности" записи
...


соответственно, DRI работает по ПК (суррогат, который нельзя менять), а работа с данными идет по "естественному ключу"
если сделать так, то при MERGE справочника записи НЕ удаляются, а "метятся" как утратившие актуальность
соответственно, для вновь создаваемых данных устаревшие значения не допускаются, при этом все старые данные показываются корректно и не возникает коллизий данных
безусловно, никаких изменений естественных ключей при MERGE не будет, так как, к примеру, C1 >> C2 в смысле естественного значения ключа приведет к тому, что в продакшене C1 задепрекейтится ("взведется" RowAlive) + появится C2
а вы, при необходимости - сделаете некую "миграцию" старых данных на C2, если это будет необходимо
29 окт 12, 16:06    [13392007]     Ответить | Цитировать Сообщить модератору
 Re: Синхронизация БД  [new]
maffey
Member

Откуда: DTS
Сообщений: 187
Crimean
справочники делать как-то так:

Id ( int identity / guid default (newid()) / ... ) primary key, -- DRI
ApplicationCode ... unique, -- key value
RowAlive -- признак "актуальности" записи
...



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

Спасибо!
30 окт 12, 08:50    [13394548]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить