2012-11-10 8 views
5

Ho 2 database Oracle e copio frequentemente dati da prod DB per testare DB utilizzando TOAD, generando script di inserimento per Prod DB e eseguendolo sul DB di test in un secondo momento.Copia dati da un database a un altro in Oracle

Sto provando a farlo più velocemente attraverso un file batch.

Penso di poter utilizzare la soluzione this ma il DB ha una colonna auto-increment. Se utilizzo questa soluzione, la colonna verrebbe interessata? Devo cambiare lo script in qualche modo? Non ho provato questo fino a quando non ho accesso al DB e sarei in grado di testare questo solo il lunedì.

C'è un modo migliore per farlo? Quello che sto cercando in sostanza sta facendo l'intera procedura di copia utilizzando un file batch, il che ridurrebbe al minimo il tempo speso a farlo usando TOAD.

Inoltre, per me va bene se posso essere guidato nella giusta direzione, se la soluzione non è semplice.

+0

Anche se può essere molto utile, il comando [COPY] (http://docs.oracle.com/cd/E11882_01/server.112/e16604/apb.htm#CHDEAEDE) sarà eventualmente obsoleto e ha qualche strano comportamento Il modo più semplice e veloce per farlo sarebbe quello di utilizzare un [collegamento database] (http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_5005.htm#i2061505). –

+1

Anche l'importazione-esportazione può essere presa in considerazione. – user75ponic

risposta

5

Assicurarsi che i due tavoli abbiano la stessa struttura.

Connessione al database di destinazione.

Creare un collegamento pubblico al database di origine. L'utente dovrebbe avere il privilegio di sistema "CREATE PUBLIC DATABASE LINK" per fare ciò.

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

copiare i dati:

INSERT INTO mytable SELECT * FROM [email protected]; 

Se la chiave primaria della tabella viene da una sequenza, impostare la sequenza per - almeno - lo stesso valore nel database di origine:

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

Le virgolette singole attorno a 'source_entry_in_tnsnames' sono cruciali; senza di loro, potresti passare un po 'di tempo a chiedersi perché Oracle ti lancia degli errori. Vedere [la documentazione] (https://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_5005.htm). –