2011-07-05 91 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

相關問題