2012-01-20 50 views
9

He escrito la siguiente consulta usando la documentación en: Oracle Documentation para copiar algunos datos de una base de datos/tabla en mi servidor de producción a la base de datos/tabla en el servidor Sandbox.Cómo copiar datos de una base de datos/tabla a otra base de datos/tabla

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

Sin embargo, estoy en constante funcionamiento en Connection failed error. ¿Hay algo mal con la consulta?

+0

¿La tabla de destino ya existe? – tallybear

+0

¿'production_IP' representa una dirección IP? Si es así, eso no es suficiente. Necesita tener los nombres de TNS configurados y usar un SID o un nombre de servicio o usar un nombre de conexión fácil (que también incluye un SID o un nombre de servicio). – Codo

+0

@tallybear: Sí –

Respuesta

16

En un entorno típico de Oracle, tiene nombres TNS configurados. Es un servicio para buscar los parámetros de conexión para las instancias de Oracle dado un SID o nombre de servicio. En su forma más simple, TNS names es un archivo llamado tnsnames.ora ubicado por la variable de entorno TNS_ADMIN (que apunta al directorio donde está el archivo).

Teniendo en cuenta los SID PROD y SANDBOX, a continuación, puede copiar las tablas a partir de la utilidad de línea de comandos SQLPLUS:

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

Tenga en cuenta que este comando COPY sólo admite un conjunto limitado de tipos de datos de Oracle: char, fecha, largo, varchar2, número.

Si no tiene los nombres de los TNS configurados, necesitará saber el nombre de host o la dirección IP, el número de puerto y el nombre del servicio. La sintaxis se convierte entonces en:

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

Para determinar el SID y/o nombre de servicio, lo mejor es echar un vistazo en el archivo tnsnames.ora en el propio servidor de base de datos. Si usted es capaz de conectarse a la base de datos, puede utilizar las siguientes preguntas para determinar el nombre de SID y el servicio (pero no me pregunta cuál es cuál):

select name from v$database; 

select * from global_name; 

select instance_number, instance_name, host_name from v$instance; 
Cuestiones relacionadas