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
エラー。クエリに問題はありますか?
一般的な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;
gpl_project/gpl_project@gpldatar
をgpl_project/gpl_project@gplrdp
にコピーします。 BGROUPMASTER
は、select * from BGROUPMASTER
を使用して置き換えます。
以下は私が使用したソリューションです。リモートデータベースのリンクを作成し、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