2012-11-10 23 views
5

Ich habe 2 Oracle-Datenbanken und ich häufig kopieren Daten von prod DB zu Test DB mit TOAD, durch Erstellen von Einfügeskripten für Prod DB und später auf der Test-DB.Kopieren von Daten aus einer Datenbank in eine andere in Oracle

Ich versuche, es schneller durch eine Batchdatei zu machen.

Ich denke, dass ich this Lösung verwenden kann, aber die DB hat eine auto-increment Spalte. Wenn ich diese Lösung verwende, wäre diese Spalte betroffen? Muss ich das Skript irgendwie ändern? Ich habe das bisher nicht probiert, da ich keinen Zugang zur DB habe und das nur am Montag testen könnte.

Gibt es einen besseren Weg, um dies zu erreichen? Nach was ich im Wesentlichen suche, ist die ganze Kopierprozedur, die eine Batch-Datei verwendet, die die Zeit minimieren würde, die ich dabei mit TOAD verbringe.

Auch ist es in Ordnung, wenn ich in die richtige Richtung geführt werden kann, wenn die Lösung nicht einfach ist.

+0

Obwohl es sehr nützlich sein kann, wird der [COPY] (http://docs.oracle.com/cd/E11882_01/server.112/e16604/apb.htm#CHDEEAEDE) Befehl schließlich veraltet, und es hat etwas komisches Verhalten. Der einfachste und schnellste Weg wäre ein [Datenbanklink] (http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_5005.htm#i2061505). –

+1

Export-Import kann auch in Betracht gezogen werden. – user75ponic

Antwort

5

Stellen Sie sicher, dass die beiden Tabellen die gleiche Struktur haben.

Verbindung mit der Zieldatenbank herstellen.

Erstellen Sie eine öffentliche Verknüpfung zur Quelldatenbank. Der Benutzer sollte die Systemberechtigung "CREATE PUBLIC DATABASE LINK" dafür haben.

CREATE PUBLIC DATABASE LINK mylink 
    CONNECT TO source_user IDENTIFIED BY source_password 
    USING 'source_entry_in_tnsnames'; 

Kopieren der Daten:

INSERT INTO mytable SELECT * FROM [email protected]; 

Wenn der Primärschlüssel der Tabelle, aus einer Sequenz stammt, stellen die Sequenz - mindestens - den gleichen Wert wie in der Quelldatenbank:

ALTER SEQUENCE mysequence increment by 100000; 
SELECT mysequence.nextval FROM DUAL; 
ALTER SEQUENCE mysequence increment by 1; 
+0

Die einfachen Anführungszeichen um 'source_entry_in_tnsnames' sind entscheidend; Ohne sie könnten Sie sich fragen, warum Oracle Fehler auf Sie wirft. Siehe [die Dokumentation] (https://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_5005.htm). –

Verwandte Themen