2012-01-20 24 views
9

Ho scritto la seguente query usando la documentazione al: Oracle Documentation per copiare alcuni dati da un database/tabella sul mio server di produzione in database/tabella sul server Sandbox.Come copiare i dati da un database/tabella ad un altro database/tabella

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);

Tuttavia, sono costantemente in esecuzione in Connection failed errore. C'è qualcosa di sbagliato nella query?

+0

La tabella di destinazione esiste già? – tallybear

+0

'production_IP' rappresenta un indirizzo IP? Se sì, non è sufficiente. È necessario impostare i nomi di TNS e utilizzare un SID o un nome di servizio o utilizzare un nome di connessione facile (che include anche un SID o un nome di servizio). – Codo

+0

@tallybear: Sì –

risposta

16

In un tipico ambiente Oracle, sono stati impostati i nomi di TNS. Questo è un servizio per cercare i parametri di connessione per le istanze Oracle dato un SID o un nome di servizio. Nella sua forma più semplice, i nomi di TNS sono un file chiamato tnsnames.ora situato nella variabile di ambiente TNS_ADMIN (che punta alla directory in cui si trova il file).

Date le SID PROD e SANDBOX, è quindi possibile copiare le tabelle dalla linea di comando SQLPLUS:

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

Si prega di notare che questo comando COPY supporta solo un set limitato di tipi di dati Oracle: char, la data, lungo, varchar2, numero.

Se non sono stati impostati i nomi di TNS, è necessario conoscere il nome host o l'indirizzo IP, il numero di porta e il nome del servizio. La sintassi diventa allora:

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); 

Per determinare il SID e/o il nome del servizio, è meglio avere uno sguardo al file tnsnames.ora sul server di database stesso. Se siete in grado di accedere al database, è possibile utilizzare le seguenti query per determinare il nome SID e il servizio (ma non mi chiedete che cosa si tratta):

select name from v$database; 

select * from global_name; 

select instance_number, instance_name, host_name from v$instance; 
Problemi correlati