2012-01-20 17 views
9

Napisałem następujące zapytanie, korzystając z dokumentacji pod adresem: Oracle Documentation, aby skopiować niektóre dane z bazy danych/tabeli na moim serwerze produkcyjnym do bazy danych/tabeli na serwerze Sandbox.Jak skopiować dane z jednej bazy danych/tabeli do innej bazy danych/tabeli

COPY FROM username1/[email protected]<production_IP> to username2/[email protected]<sandbox_IP> INSERT TABLE_C (*) USING (SELECT * FROM TABLE_C WHERE COL_A = 4884);

Jednak ja ciągle działa w Connection failed błędu. Czy coś jest nie tak z zapytaniem?

+0

Czy tabela docelowa już istnieje? – tallybear

+0

Czy "production_IP" oznacza adres IP? Jeśli tak, to nie wystarczy. Musisz mieć ustawione nazwy TNS i używać identyfikatora SID lub nazwy usługi lub użyć nazwy łatwego połączenia (która zawiera również identyfikator SID lub nazwę usługi). – Codo

+0

@tallybear: Tak –

Odpowiedz

16

W typowym środowisku Oracle masz skonfigurowane nazwy TNS. Jest to usługa sprawdzająca parametry połączenia dla instancji Oracle z podanym identyfikatorem SID lub nazwą usługi. W swojej najprostszej postaci nazwy TNS to plik o nazwie tnsnames.ora zlokalizowany przez zmienną środowiskową TNS_ADMIN (która wskazuje katalog, w którym znajduje się plik).

Biorąc pod SID PROD i SANDBOX można następnie skopiować tabele z narzędzia wiersza poleceń SQLPLUS:

COPY FROM username1/[email protected] to username2/[email protected] 
    INSERT TABLE_C (*) USING (SELECT * FROM TABLE_C WHERE COL_A = 4884); 

Należy pamiętać, że to polecenie COPY obsługuje tylko ograniczony zestaw typów danych Oracle: char, data, długi, varchar2, liczba.

Jeśli nie masz skonfigurowanych nazw TNS, musisz znać nazwę hosta lub adres IP, numer portu i nazwę usługi. Składnia wówczas postać:

COPY FROM username1/[email protected]//192.168.3.17:1521/PROD_SERVICE to username2/[email protected]//192.168.4.17:1521/SANDBOX_SERVICE 
    INSERT TABLE_C (*) USING (SELECT * FROM TABLE_C WHERE COL_A = 4884); 

Aby określić Sid i/lub nazwę usługi, najlepiej zajrzeć do pliku TNSNAMES.ORA na samym serwerze bazy danych. Jeśli jesteś w stanie zalogować się do bazy danych, można użyć następujących zapytań do określenia nazwy Sid i usług (ale nie pytaj mnie, co jest czym):

select name from v$database; 

select * from global_name; 

select instance_number, instance_name, host_name from v$instance; 
Powiązane problemy