Как это сделать?
Есть две базы данных, абсолютно идентичных по количеству таблиц, их названий и т.п. Но записи - разные как и их количество. Порядок расположения записей в таблицах после объединения значения не имеет.
Access: объединить две DB в одну
-
- Уже с Приветом
- Posts: 11040
- Joined: 15 May 2001 09:01
- Location: Minneapolis, MN (10000 lakes) USA
Access: объединить две DB в одну
Мимоходом...
-
- Уже с Приветом
- Posts: 1536
- Joined: 03 Aug 2000 09:01
В случае с Ораклом я бы делал так:
1. Создать database link между двумя базами. Если они находятся в одном инстансе (т.е. две схемы, многие называют их отдельными базами данных) - линк создавать не надо, но надо, тем не менее дать привилегии из одной схемы на другую.
2. написать pl/sql anonimous block or stored procedure, в котором используя user_tables view, делать что-то типа этого (не отлажено, писалось без доступа к ораклу):
for c1 in (select table_name from user_tables) loop
execute immediate "insert into DBDEST."||c1.table_name||
" select * from DBSOURCE."||c1.table_name;
commit;
end loop;
Здесь DBDEST - destination scheme, DBSOURCE - source scheme, commit можно поставить после цикла если таблицы маленькие или rollback segments большие.
Этот подход не учитывает необходимость генерации новых первичных ключей. Если нужно, приведенный выше кусок кода надо будет усложнять и углублять с использованием sequences или max(<primary key>).
К сожалению, ничего попроще в голову не приходит. Будет очень интересно если есть другие подходы.
1. Создать database link между двумя базами. Если они находятся в одном инстансе (т.е. две схемы, многие называют их отдельными базами данных) - линк создавать не надо, но надо, тем не менее дать привилегии из одной схемы на другую.
2. написать pl/sql anonimous block or stored procedure, в котором используя user_tables view, делать что-то типа этого (не отлажено, писалось без доступа к ораклу):
for c1 in (select table_name from user_tables) loop
execute immediate "insert into DBDEST."||c1.table_name||
" select * from DBSOURCE."||c1.table_name;
commit;
end loop;
Здесь DBDEST - destination scheme, DBSOURCE - source scheme, commit можно поставить после цикла если таблицы маленькие или rollback segments большие.
Этот подход не учитывает необходимость генерации новых первичных ключей. Если нужно, приведенный выше кусок кода надо будет усложнять и углублять с использованием sequences или max(<primary key>).
К сожалению, ничего попроще в голову не приходит. Будет очень интересно если есть другие подходы.
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: Access: объединить две DB в одну
EMT wrote:Как это сделать?
Есть две базы данных, абсолютно идентичных по количеству таблиц, их названий и т.п. Но записи - разные как и их количество. Порядок расположения записей в таблицах после объединения значения не имеет.
How to Merge Records from Two Identical Access Databases
......
If you would like to see my code, drop me a line at datafast@comcast.net.
Cабина
-
- Уже с Приветом
- Posts: 1536
- Joined: 03 Aug 2000 09:01
Re: Access: объединить две DB в одну
Sabina wrote:EMT wrote:Как это сделать?
Есть две базы данных, абсолютно идентичных по количеству таблиц, их названий и т.п. Но записи - разные как и их количество. Порядок расположения записей в таблицах после объединения значения не имеет.
How to Merge Records from Two Identical Access Databases......
If you would like to see my code, drop me a line at datafast@comcast.net.
Cабина
Хорошая статья, напомнила мне, что reference tables обьединять нельзя. Обьединять можно только fact tables, и то с большой осторожностью.
Кстати, помогает, когда reference tables are prefixed with some prefix, e.g. "ref_". In this case it is easier to skip them in the piece of code I gave in the previous post.