2009-08-24 17 views
0

Ich habe eine Tabelle (A) in einer Datenbank, die keine PK hat es hat etwa 300 k Datensätze.Kopieren von Daten zwischen Tabellen in verschiedenen Datenbanken ohne PKs (wie Synchronisieren)

Ich habe eine Teilmenge Kopie (B) dieser Tabelle in anderen Datenbank, dies hat nur 50k und enthält eine Sicherung für einen bestimmten Zeitraum (Juli Daten).

Ich möchte aus der Tabelle B die fehlenden Datensätze in Tabelle A kopieren, ohne natürlich bestehende Datensätze zu duplizieren. (Ich kann eine Datenbankverknüpfung erstellen, um die Dinge einfacher zu machen)

Welche Strategie kann ich folgen A in die fehlenden Zeilen von B. erfolgreich einfügen

Dies sind die Tabellenspalten:

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

Meine größte Sorge ist der Mangel an PK. Kann ich mit allen Spalten so etwas wie einen Hash oder eine PK erstellen?

Was könnte in diesem Fall möglich sein?

Ich verwende Oracle 9i in Tabelle A und Oracle XE (10) in B

Die ungefähre Anzahl der Elemente ist 20.000

Dank im Voraus zu kopieren.

+0

Gibt es in Tabelle A keine Eindeutigkeit Einschränkungen Reihen? – pilcrow

+0

Nö es Arent‘ – OscarRyz

Antwort

1

Solange keine doppelten Zeilen in der Tabelle existieren sollten, könnten Sie einen einzigartigen oder Primärschlüssel für alle Spalten anwenden. Wenn der Overhead eines Schlüssels/Index zu viel zu verwalten wäre, könnten Sie auch die Datenbank in Ihrer Anwendung abfragen, um zu sehen, ob sie existiert, und die Einfügung nur durchführen, wenn sie abwesend ist

+0

‚... Sie können auch die Datenbank in Ihrer Anwendung abfragen, um zu sehen, ob es existiert, und nur den Einsatz durchführen, wenn es nicht vorhanden ist ...‘Nun ja, aber .. WIE? Über die erste Option Ich habe keine Berechtigungen zum Erstellen der PK – OscarRyz

2

Wenn die Datenmengen klein genug sind , würde ich mit den folgenden

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

Sie sagen, es gibt etwa 20.000 zu kopieren, aber nicht, wie viele in der gesamten Datensatz gehen. Die andere Möglichkeit besteht darin, den aktuellen Inhalt der Kopie zu löschen und den gesamten Inhalt der ursprünglichen Tabelle einzufügen. Wenn die vollständigen Datasets groß sind, könnten Sie mit hash gehen, aber ich vermute, dass es immer noch versuchen würde, das gesamte Dataset über den DB-Link zu ziehen, um den Hash in der lokalen Datenbank anzuwenden.

+0

+1 Die Daten sind etwa 300k. Ich versuchte, den Minus-Operator, aber ich habe: Fehler: ORA-12704: Zeichensatz Mismatch Ich denke, das ist, weil sie verschiedene Installationen oder so etwas. – OscarRyz

+0

ehm Nun, ich weiß, dass ich diese Fehlermeldung nicht nur von Zahlen und Datumsspalten bekommen kann. Es stellt sich heraus, ich habe ein Dutzend Spalten mehr :( – OscarRyz