Копирование данных между таблицами в разных базах данных без ПК (например, синхронизация) - PullRequest
0 голосов
/ 25 августа 2009

У меня есть таблица (A) в базе данных, в которой нет PK, она имеет около 300 тыс. Записей.

У меня есть копия подмножества (B) этой таблицы в другой базе данных, она имеет только 50 КБ и содержит резервную копию для данного диапазона времени (данные за июль).

Я хочу скопировать из таблицы B недостающие записи в таблицу A, не дублируя, конечно, существующие записи. (Я могу создать ссылку на базу данных, чтобы все было проще)

Какую стратегию я могу использовать, чтобы успешно вставить в A недостающие строки из B.

Это столбцы таблицы:

IDLETIME    NUMBER  
ACTIVITY    NUMBER      
ROLE    NUMBER          
DURATION    NUMBER      
FINISHDATE  DATE    
USERID  NUMBER
.. 40 extra varchar columns here ... 

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

Какой может быть возможный способ действовать в этом случае?

Я использую Oracle 9i в таблице A и Oracle XE (10) в B

Примерное количество копируемых элементов - 20 000

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 25 августа 2009

Если объемы данных достаточно малы, я бы пошел со следующим

CREATE DATABASE LINK A CONNECT TO ... IDENTIFIED BY ... USING ....;
INSERT INTO COPY
SELECT * FROM table@A
MINUS
SELECT * FROM COPY;

Вы говорите, что нужно скопировать около 20 000, но не столько, сколько во всем наборе данных. Другой вариант - удалить текущее содержимое копии и вставить все содержимое исходной таблицы.

Если полные наборы данных велики, вы можете использовать хэш , но я подозреваю, что он все равно попытается перетащить весь набор данных по ссылке БД, чтобы применить хеш в локальной базе данных. 1008 *

1 голос
/ 25 августа 2009

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

...