2011-07-05 22 views
5

Soy nuevo en Oracle, y estoy trabajando para mover datos específicos de una base de datos en un servidor a la base de datos en otro servidor.Mover datos entre diferentes servidores en Oracle

Los dos DB tienen el mismo esquema, pero quiero obtener columnas específicas a las que hagan referencia sus claves y mover los datos a otro servidor. Estoy intentando descubrir cuál sería el mejor plan de ataque.

Se prefiere un método que permita una línea de comando para poder escribir la clave de los datos que deseo mover. ¿Es posible lograr con un script PLSQL?

Gracias.

Respuesta

8

Suponiendo que se puede crear conexiones de red entre las dos bases de datos, la opción más sencilla sería la creación de un enlace de base de datos entre ellos, es decir

CREATE DATABASE LINK to_b 
    CONNECT TO username_on_b 
    IDENTIFIED BY password 
    USING 'tns_alias_for_b' 

A continuación, puede utilizar ese enlace de base de datos para consultar datos de la base de datos B , es decir

INSERT INTO table_name(list_of_columns) 
    SELECT list_of_columns 
    FROM [email protected]_b 
    WHERE primary_key_value = <<some value>>; 

que puede ser una declaración SQL recta, que forma parte de un procedimiento PL/SQL, o parte de una secuencia de comandos SQL * Plus. Un procedimiento PL/SQL

CREATE OR REPLACE PROCEDURE move_row_from_b( 
    p_key_value IN table_name.primary_key%type 
) 
AS 
BEGIN 
    INSERT INTO table_name(list_of_columns) 
    SELECT list_of_columns 
     FROM [email protected]_b 
    WHERE primary_key_value = p_key_value; 
END move_row_from_b; 

cual puede ser invocado ya sea a través EXEC de SQL * Plus o por medio de un bloque PL/SQL anónimos

SQL> exec move_row_from_b(23); 

BEGIN 
    move_row_from_b(23); 
END; 

O se podría escribir un SQL * Plus guión

variable key_value number; 
accept key_value prompt 'Enter key: ' 
INSERT INTO table_name(list_of_columns) 
    SELECT list_of_columns 
    FROM [email protected]_b 
    WHERE primary_key_value = :key_value; 
+0

Gracias, estaba buscando utilizar un enlace de base de datos, pero no estaba seguro de si era el mejor enfoque. ¿Conoces alguna forma de que pueda aceptar la entrada del usuario? Es decir. Puedo escribir "23" y selecciona la columna donde table_id = '23'? – null

+0

@null - Agregué algunos ejemplos de llamarlo. Los scripts SQL * Plus pueden aceptar la entrada del usuario. PL/SQL no puede, sin embargo, puede llamar a un procedimiento y pasar parámetros. –

+0

Muchas gracias, esto es exactamente lo que estaba buscando. Había visto que esto era posible, pero no estaba seguro de si era un enfoque inteligente (nunca lo había hecho antes). – null

Cuestiones relacionadas