web-dev-qa-db-ja.com

あるデータベース/テーブルから別のデータベース/テーブルにデータをコピーする方法

Oracle Documentation を使用して次のクエリを作成し、本番サーバーのデータベース/テーブルからサンドボックスサーバーのデータベース/テーブルにデータをコピーします。

COPY FROM username1/passwd1@<production_IP> to username2/passwd2@<sandbox_IP> INSERT TABLE_C (*) USING (SELECT * FROM TABLE_C WHERE COL_A = 4884);

しかし、私は常にConnection failedエラー。クエリに問題はありますか?

11
name_masked

一般的なOracle環境では、TNS名が設定されています。これは、SIDまたはサービス名が指定されたOracleインスタンスの接続パラメーターを検索するサービスです。最も簡単な形式では、TNS名はtnsnames.oraというファイルで、環境変数TNS_ADMINによって検索されます(ファイルが存在するディレクトリを指します)。

SIDがPRODおよびSANDBOXの場合、SQLPLUSコマンドラインユーティリティからテーブルをコピーできます。

COPY FROM username1/passwd1@PROD to username2/passwd2@SANDBOX
    INSERT TABLE_C (*) USING (SELECT * FROM TABLE_C WHERE COL_A = 4884);

このCOPYコマンドがサポートするOracleデータ型のセットは、char、date、long、varchar2、numberのみであることに注意してください。

TNS名を設定していない場合は、ホスト名またはIPアドレス、ポート番号、およびサービス名を知っている必要があります。構文は次のようになります。

COPY FROM username1/passwd1@//192.168.3.17:1521/PROD_SERVICE to username2/passwd2@//192.168.4.17:1521/SANDBOX_SERVICE
    INSERT TABLE_C (*) USING (SELECT * FROM TABLE_C WHERE COL_A = 4884);

SIDやサービス名を特定するには、データベースサーバー自体のTNSNAMES.ORAファイルを調べるのが最善です。データベースにログインできる場合は、次のクエリを使用してSIDとサービス名を確認できます(ただし、どちらであるかは尋ねないでください)。

select name from v$database;

select * from global_name;

select instance_number, instance_name, Host_name from v$instance;
19
Codo

gpl_project/gpl_project@gpldatargpl_project/gpl_project@gplrdpにコピーします。 BGROUPMASTERは、select * from BGROUPMASTERを使用して置き換えます。

1
susheel

以下は私が使用したソリューションです。リモートデータベースのリンクを作成し、INSERTコマンドを使用してデータを入力しました。

CREATE DATABASE LINK database_link_name 
CONNECT TO my_user_name IDENTIFIED BY my_password
USING 'tns_name';

INSERT INTO my_table SELECT * FROM my_remote_table@database_link_name;

作業後にデータベースリンクを削除する場合。以下を使用します。

DROP DATABASE LINK database_link_name;

役立つ情報については、このリンクを参照してください: https://asktom.Oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:9532217300346683472

0
Steve Trautmann