2012-11-10 10 views
5

Oracleデータベースが2つあり、Prod DB用の挿入スクリプトを生成して後でテストDB上で実行することにより、TOADを使用してDBをテストするためにprod DBからデータを頻繁にコピーします。Oracleのデータベース間でデータをコピー

私はバッチファイルを使用して高速化しようとしています。

私はthisソリューションを使用できますが、DBにはauto-incrementの列があります。このソリューションを使用する場合、その列は影響を受けますか?何らかの形でスクリプトを変更する必要がありますか?私はこれまでデータベースをアクセスできず、月曜日にしかこれをテストすることができない限りこれを試していません。

私はこれを達成する良い方法はありますか?私が本質的に探しているのは、TOADを使用してこれを行うのに費やす時間を最小限に抑えるバッチファイルを使用して、コピー手順全体を実行することです。

解決策が単純でない場合は、適切な方向に導くことができます。

+0

非常に便利ですが、[COPY](http://docs.oracle.com/cd/E11882_01/server.112/e16604/apb.htm#CHDEAEDE)コマンドは最終的に廃止され、いくつかの奇妙な行動。これを行う最も簡単で最速の方法は、[データベース・リンク](http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_5005.htm#i2061505)を使用することです。 –

+1

エクスポート - インポートも考慮することができます。 – user75ponic

答えて

5

2つのテーブルの構造が同じであることを確認してください。

ターゲットデータベースに接続します。

ソースデータベースへのパブリックリンクを作成します。これを行うには、ユーザーに「CREATE PUBLIC DATABASE LINK」システム権限が必要です。

CREATE PUBLIC DATABASE LINK mylink 
    CONNECT TO source_user IDENTIFIED BY source_password 
    USING 'source_entry_in_tnsnames'; 

コピーデータ:

INSERT INTO mytable SELECT * FROM [email protected]; 

テーブルの主キーは、シーケンスから来る場合に配列を設定 - ソース・データベースと同じ値 - 少なくとも:

ALTER SEQUENCE mysequence increment by 100000; 
SELECT mysequence.nextval FROM DUAL; 
ALTER SEQUENCE mysequence increment by 1; 
+0

'source_entry_in_tnsnames'を一重引用符で囲むことは非常に重要です。それがなければ、オラクルがなぜあなたにエラーを投げるのか疑問に思うかもしれません。 [ドキュメント](https://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_5005.htm)を参照してください。 –

関連する問題