2011-07-05 9 views
5

私はOracleを使い慣れていません。特定のデータをあるサーバーのDBから別のサーバーのDBに移動する作業を進めています。oracleの異なるサーバー間でデータを移動する

2つのDBは同じスキーマですが、キーで参照されている特定の列をプルして、そのデータを別のサーバーに移動する必要があります。私はこれに対する攻撃の最良の計画が何であるか把握しようとしています。

私は移動したいデータのキーを入力できるだけのコマンドラインを許可する方法が好まれます。おそらくPLSQLスクリプトで達成することは可能でしょうか?

ありがとうございました。

答えて

8

あなたは2つのデータベース間のネットワーク接続を作成することができると仮定すると、最も簡単なオプションは、あなたは、データベースBからのデータを照会するためにそのデータベース・リンクを使用することができ、すなわち、

CREATE DATABASE LINK to_b 
    CONNECT TO username_on_b 
    IDENTIFIED BY password 
    USING 'tns_alias_for_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プロシージャ

いずれか

SQL> exec move_row_from_b(23); 

BEGIN 
    move_row_from_b(23); 
END; 

それとも、SQL * Plusスクリプト

を書くことができ、SQL * PlusのからEXECを介して、または無名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; 

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

関連する問題