2012-11-10 7 views
5

Mam 2 bazy danych Oracle i często kopiuję dane z DBP do przetestowania DB przy użyciu TOAD, generując skrypty wstawiania dla Prod DB i uruchamiając je później na testowym DB.Kopiowanie danych z jednej bazy danych do drugiej w Oracle

Próbuję zrobić to szybciej poprzez plik wsadowy.

Myślę, że mogę użyć rozwiązania this, ale DB ma kolumnę auto-increment. Jeśli użyję tego rozwiązania, czy ta kolumna zostanie naruszona? Czy muszę w jakiś sposób zmienić skrypt? Nie próbowałem tego, ponieważ nie mam dostępu do bazy danych i będę mógł to przetestować tylko w poniedziałek.

Czy istnieje lepszy sposób, w jaki mogę to osiągnąć? Czego zasadniczo szukam, to wykonanie całej procedury kopiowania przy użyciu pliku wsadowego, który zminimalizowałby czas poświęcony na to, używając TOAD.

Co więcej, jeśli nie uda mi się znaleźć rozwiązania we właściwym kierunku, nie ma problemu.

+0

Mimo że może być bardzo użyteczne, polecenie [KOPIUJ] (http://docs.oracle.com/cd/E11882_01/server.112/e16604/apb.htm#CHDEAEDE) zostanie w końcu usunięte i ma już jakieś dziwne zachowanie. Najłatwiejszym i najszybszym sposobem na to byłoby użycie [łącza do bazy danych] (http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_5005.htm#i2061505). –

+1

Można również rozważyć eksport-import. – user75ponic

Odpowiedz

5

Upewnij się, że dwie tabele mają taką samą strukturę.

Połącz się z docelową bazą danych.

Utwórz publiczny link do źródłowej bazy danych. Użytkownik powinien mieć uprawnienie systemowe "CREATE PUBLIC DATABASE LINK", aby to zrobić.

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

skopiować dane:

INSERT INTO mytable SELECT * FROM [email protected]; 

Jeśli klucz podstawowy tabeli pochodzi z sekwencji, należy ustawić sekwencję do - co najmniej - taką samą wartość jak w bazie danych Źródło:

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

Pojedyncze cytaty dotyczące 'source_entry_in_tnsnames' są kluczowe; bez nich możesz spędzić trochę czasu zastanawiając się, dlaczego Oracle rzuca na ciebie błędy. Zobacz [dokumentację] (https://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_5005.htm). –