2011-07-05 47 views
5

我是Oracle的新手,我正在将特定数据从一台服务器上的数据库移动到另一台服务器上的数据库。在oracle中的不同服务器之间移动数据

这两个数据库具有相同的模式,但我想要拉他们的键引用特定列并将数据移动到其他服务器。我试图找出最佳的攻击计划是什么。

一种允许使用命令行的方法,因此我可以输入要移动的数据的密钥。用PLSQL脚本完成也许是可能的吗?

谢谢。

回答

8

假设你可以建立两个数据库之间的网络连接,最简单的办法是在它们之间创建一个数据库链接,即

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

然后,您可以使用该数据库链接查询从数据库B的数据,即

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

这可以是直的SQL语句,PL/SQL过程的一部分或SQL * Plus脚本的一部分。 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; 

这既可以通过从SQL * Plus EXEC或通过匿名PL/SQL块

SQL> exec move_row_from_b(23); 

BEGIN 
    move_row_from_b(23); 
END; 

或者你可以写一个SQL * Plus脚本

调用
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

谢谢,我只是在研究使用数据库链接,但不知道这是否是最好的方法。你知道我可以接受用户输入的方式吗?即我可以输入“23”并选择table_id ='23'的列吗? – null

+0

@null - 添加了一些调用它的例子。 SQL * Plus脚本可以接受用户输入。 PL/SQL不能通过调用过程并传递参数。 –

+0

非常感谢这正是我一直在寻找的。我已经看到这是可能的,但不知道这是否是一种聪明的做法(以前从未做过)。 – null

相关问题