|
Объединить две одинаковые БД
|
|||
---|---|---|---|
#18+
Не знал куда задать вопрос, но т.к. управление на РВ (10.5), то задал вопрос сюда :) Буду краток как некогда :) Есть несколько БД, которые вели филиалы (или что-то в этом роде). Сегодня поставлена задача объединить их всех в одну БД, чтобы было нагляднее (или так то иначе удобнее). Вопрос: а как это можно сделать "малой кровью"? Структура у всех одинаковая, НО уникальные ID во всех ключевых таблицах свои и + существуют ещё таблицы связей по этим ID у каждых филиалов свои. Может есть у кого опыт, как это по легкому разрулить? Или мнение, как выйти из ситуации: например, создать что-то из чего вытягивать те данные которые "вдруг" понадобились? P.S. Если это не по теме, то прошу модератора перекинуть в соответствующий тематический раздел ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2014, 00:42 |
|
Объединить две одинаковые БД
|
|||
---|---|---|---|
#18+
AISНО уникальные ID во всех ключевых таблицах свои Тут двояко можно понять. То ли ID в разных базах свои то есть не пересекаются, то ли свои то есть возможно и пересекаются :) Допустим ID могут пересекаться. Тогда во всех базах расширяем столбцы с ID (включая связи) на несколько цифр и в каждой базе в этих старших цифрах делаем свое значение Например было: create table doc (id numeric(5) primary key ...) ID - 1, 2, 3 в каждой базе стало create table doc (id numeric(7) primary key ...) (предположем что 100 филиалов) ID - 0100001, 0100002, 0100003 в 1-й базе, 0200001, 0200002, 0200003 во 2-й базе ... Это делается естественно только для таблиц не являющихся общими справочниками. Далее. Для отчетов физически базы можно либо сливать в одну схему, либо каждую базу в отдельную схему загружать, и создать одну схему с view по таблицам из всех схем. create view doc as select * from base1.doc union select * from base1.doc ... У нас мы делали вариант с view. Но у нас данных было не сильно много - базы только по несколько Гбайтов. Если базы большие, то лучше после устранения пересечения ID настроить репликацию из всех баз в одну схему. Но вообще эта тема не такая простая. Очень много технических и организационных проблем придется решить. Если есть возможность отказаться от сведения в одну базу, то я бы не стал связываться :) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2014, 03:59 |
|
Объединить две одинаковые БД
|
|||
---|---|---|---|
#18+
А мы реализовывали 2 схему Непростое занятие. Потом все-таки проапдейтили базы в филиалах для более простого слития Вариант с репликацией в единую базу тоже интересен, что-то подобное пробовали, но все-таки остановились на слитии через уникальные ID ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2014, 10:20 |
|
Объединить две одинаковые БД
|
|||
---|---|---|---|
#18+
ais сразу есть вопрос использования новых/старых баз... 1.старые будут в таком же виде использоваться на местах? 2.новая база для кого? и что с ней делать?отчеты? 3.или все теперь будут использовать слитую вместе базу для общей работы? 4.слияние баз - только один раз и сливается руками? или же сложнее? 5.конечно же общие справочники-есть такие? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2014, 11:26 |
|
Объединить две одинаковые БД
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky , во первых спасибо за такую подробную рекомендацию. Вроде всё просто и понятно, но... Anatoly Moskovsky... Это делается естественно только для таблиц не являющихся общими справочниками. ... А как быть, если есть общие по тематике справочники и в них есть как совпадения, так и различия? Например, в таблице-клиент в разных БД может быть один и тот же клиент, но по факту с разными ID в каждой БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2014, 22:38 |
|
Объединить две одинаковые БД
|
|||
---|---|---|---|
#18+
AISА как быть, если есть общие по тематике справочники и в них есть как совпадения, так и различия? Например, в таблице-клиент в разных БД может быть один и тот же клиент, но по факту с разными ID в каждой БД. Справочники вводимые юзерами необходимо разделять по ID. И надо модифицировать систему отчетов, чтобы в при выборе из справочника в фильтре отчета скрывались дубликаты по отображаемому имени. А выбранная запись внутри разворачивалась в список ID и применялась к отчету. Никто не обещал что будет легко :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2014, 04:47 |
|
Объединить две одинаковые БД
|
|||
---|---|---|---|
#18+
Не знаю, насколько в тему и правильно. Не пинайте сильно. Как давно смотрели систему страховой компании с филиалами, так там было сделано следующее. Все ID из целочисленых были переведены в real в которых дробная часть после запятой был просто номер филиала. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2014, 10:09 |
|
Объединить две одинаковые БД
|
|||
---|---|---|---|
#18+
Разрешите высказаться в стиле "я такой умный, как моя жена потом". Вот если бы базы филиалов были бы сформированы в своё время как реплики центральной базы, то проблемы бы не было вообще никакой - все ID были бы уникальными и лежали бы в непересекающихся диапазонах. А так придётся действовать, как предлагает Анатолий Московский. Правда придётся поудалять все внешние ключи, а потом восстанавливать. Та ещё работка. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2014, 12:45 |
|
Объединить две одинаковые БД
|
|||
---|---|---|---|
#18+
mgl_wwwПравда придётся поудалять все внешние ключи, а потом восстанавливать. Та ещё работка. Автоматизируется за 5 минут :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2014, 20:36 |
|
|
start [/forum/topic.php?fid=15&msg=38674183&tid=1335332]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
157ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 268ms |
0 / 0 |