Копирование данных между таблицами в разных базах данных без ПК (например, синхронизация)
У меня есть таблица ( 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 ответа
Если объемы данных достаточно малы, я бы пошел со следующим
CREATE DATABASE LINK A CONNECT TO ... IDENTIFIED BY ... USING ....;
INSERT INTO COPY
SELECT * FROM table@A
MINUS
SELECT * FROM COPY;
Вы говорите, что есть около 20000 копий, но не столько во всем наборе данных. Другой вариант - удалить текущее содержимое копии и вставить все содержимое исходной таблицы.
Если полные наборы данных велики, вы можете использовать хеш, но я подозреваю, что он все равно попытается перетащить весь набор данных по ссылке в БД, чтобы применить хеш в локальной базе данных.
Если в таблице не должно быть повторяющихся строк, вы можете применить уникальный или первичный ключ ко всем столбцам. Если затраты на ключ / индекс будут слишком велики, вы также можете запросить базу данных в вашем приложении, чтобы узнать, существует ли она, и выполнить вставку, только если она отсутствует.