2009-08-24 6 views
0

J'ai une table (A) dans une base de données qui n'a pas PK il a environ 300 k enregistrements.Copier des données entre des tables dans des bases de données différentes sans PK (comme la synchronisation)

J'ai une copie de sous-ensemble (B) de cette table dans une autre base de données, celle-ci a seulement 50k et contient une sauvegarde pour une période donnée (données de juillet).

Je veux copier de la table B les enregistrements manquants dans le tableau A sans dupliquer les enregistrements existants bien sûr. (Je peux créer un lien de base de données pour faciliter les choses)

Quelle stratégie puis-je suivre pour insérer avec succès dans A les lignes manquantes de B.

Ce sont les colonnes de la table:

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

Mon la plus grande préoccupation est le manque de PK. Puis-je créer quelque chose comme un hachage ou un PK en utilisant toutes les colonnes?

Quelle pourrait être une façon de procéder dans ce cas?

J'utilise Oracle 9i dans le tableau A et Oracle XE (10) B

Le nombre approximatif d'éléments à copier est 20.000

Merci à l'avance.

+0

Existe-t-il des contraintes d'unicité sur les lignes du tableau A? – pilcrow

+0

non là arent ' – OscarRyz

Répondre

1

Tant qu'aucune ligne en double ne doit exister dans la table, vous pouvez appliquer une clé unique ou primaire à toutes les colonnes. Si le surdébit d'une clé/index est beaucoup à maintenir, vous pouvez également interroger la base de données dans votre application pour voir si elle existe, et n'effectuer l'insertion que si elle est absente

+0

"... vous pouvez également interroger la base de données dans votre application pour voir si elle existe, et n'effectuer l'insertion que si elle est absente ..." Eh bien oui mais .. COMMENT? A propos de la première option Je n'ai pas les privilèges pour créer le PK – OscarRyz

2

Si les volumes de données sont assez petits , Je voudrais aller avec ce qui suit

CREATE DATABASE LINK A CONNECT TO ... IDENTIFIED BY ... USING ....; 
INSERT INTO COPY 
SELECT * FROM [email protected] 
MINUS 
SELECT * FROM COPY; 

Vous dites qu'il ya environ 20 000 à copier, mais pas combien dans l'ensemble de données. L'autre option consiste à supprimer le contenu actuel de la copie et à insérer tout le contenu de la table d'origine. Si les jeux de données complets sont volumineux, vous pouvez utiliser un hash, mais je suppose qu'il essaierait quand même de faire glisser l'ensemble de données entier sur le lien DB pour appliquer le hachage dans la base de données locale.

+0

+1 Les données sont d'environ 300k. J'ai essayé l'opérateur moins, mais j'ai: Erreur: ORA-12704: incompatibilité de jeu de caractères Je suppose que c'est parce qu'ils sont des installations différentes ou quelque chose. – OscarRyz

+0

Eh bien, je sais que je ne peux pas obtenir ce message d'erreur à partir des seuls chiffres et colonnes de date. Il se trouve que j'ai une douzaine de colonnes de plus :( – OscarRyz

Questions connexes