0

2 つのオラクル サーバーolaolb.

どちらもwinサーバー2003で実行され、同じOracle 11.2gがインストールされ、同じOracleサービスがありますorcl

多くのテーブルを所有orclする同じユーザーlogin_byがいますが、各テーブルには主キーがあります。

これで、 はolbのクローン (コピー) として表示されolaます。

のテーブルがlogin_byデータのログに挿入されました。olaとでデータが異なりolbます。

これらのデータを から にインポートolbolaます。ユーザーのデータをlogin_bydmpファイルにエクスポートしましたolb。しかし、同じスキーマ (同じユーザー、テーブルを持っている) を持っているため、これdmpをにインポートすることはできません。インポートは失敗します。olaola

では、他にアイデアはあるのだろうか?

ところで、ネットワークoraorb介して相互にアクセスすることはできません。


更新(私がやったこと):

1 件のデータを からエクスポートolb:

exp login_by/000000@orcl file=c:\olb.dmp

2 にデータをインポートしますola

imp login_by/000000@orcl fromuser=login_by touser=login_by  file=c:\olb.dmp

これは、次の 2 つの理由で失敗します。

1 login_byola のユーザーは同じテーブルを持っています。

,in2 'table1 ola it may contain a record withid=1 , and the same tabletable1 inolb may contain a record with the sameid=1 id ' という名前の同じテーブルのwhere the場合は、主キーです。

4

1 に答える 1

0

expdpまず、 andimpdpの代わりにexpandに切り替えることをお勧めしますimp

私は...するだろう:

  1. dmp ファイルをインスタンスなどの新しいスキーマにインポートしcloneますola。例えばimp clone/xxxxxx@orcl fromuser=login_by touser=clone file=c:\olb.dmp
  2. cloneにすべてのテーブルにSELECT を付与しlogin_byます。
  3. としてlogin_by、新しい行をクエリしてテーブルcloneに挿入します。login_by
  4. すすぎ、他のインスタンスについて繰り返します。

3 番目の方法は、関連するデータの量と、ターゲット テーブルにまだ存在しない行を特定するのがいかに簡単か難しいかによって異なります。

たとえば、単純なことをするだけかもしれませんINSERT INTO login_by.thetable SELECT * FROM clone.thetable WHERE id IN (SELECT id FROM clone.thetable MINUS SELECT id FROM login_by.thetable);

または、ID が一致する可能性がある場合は、a を使用MERGEして、同じ ID を持つ行が更新され、新しい行が挿入されるようにすることができます。

于 2013-07-23T06:53:22.983 に答える