Как лучше однократно объединить несколько БД в одну?

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

Встала задача объединения всех региональных БД на базе московской и переноса на выделенный сервер (MS SQL Server 2012 Standart Edition), с последующей работой с системой только через него.

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

Интересует, какие существуют возможные варианты решений для подобного рода задач.

UPDATE
Всем спасибо за советы.
Понравилась идея с изменением внешних ключей на "on update cascade". Нашёл и доработал скрипт, генерирующий SQL-код сначала для удаления, затем для создания заново констрейтов (с сохранением параметров и заменой только on update) с последующим их чеком. Но в процессе тестирования выяснилось, что в случае нескольких внешних ключей между двумя таблицами (например, UserCreatorID, UserEditorID) все, кроме первого fk, должны быть no action. И к сожалению, таких случаев довольно много.

Переход на GUID'ы посчитан нецелесообразным, так как придётся дорабатывать ещё и клиентские приложения.

Сейчас решаем, работать ли с разными диапазонами ключей, или их регенерировать с использованием вспомогательных полей. Но так как встала другая срочная задача, вопрос миграции на единый сервер отложен на некоторое время.
  • Вопрос задан
  • 3407 просмотров
Пригласить эксперта
Ответы на вопрос 2
@ldvldv
1. Установить на все связи "on update cascade"

2. для каждой БД выбрать непересекающийся диапазон ИД

основная БД: 0-1000000000
региональная БД1: 1000000000-2000000000
региональная БД2: 2000000000-3000000000
региональная БД3: 3000000000-4000000000

3. увеличить значения ИД для всех таблиц

региональная БД1:
"update table1 set id=id + 1000000000"
"update table2 set id=id + 1000000000"
"update table3 set id=id + 1000000000"

региональная БД2:
"update table1 set id=id + 2000000000"
"update table2 set id=id + 2000000000"
"update table3 set id=id + 2000000000"

региональная БД3:
"update table1 set id=id + 3000000000"
"update table2 set id=id + 3000000000"
"update table3 set id=id + 3000000000"

4. Импортировать данные из региональных БД
5. Установить значения для последовательностей больше последних ИД в таблицах
Ответ написан
aenikitin
@aenikitin
Инфраструктурный администратор
На мой взгляд, ваш путь только через миграцию всех таблиц БД в промежуточные с переходом на id типа guid и дальнейшую смену первичного ключа. Работа большая, но других вариантов не вижу.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы