web-dev-qa-db-ja.com

データベース全体に影響を与えて現在のデータを置き換える方法

私は2つのデータベースを持っているとAとBは言います。これらは同じです。データレコードが最新または古いことを期待しています。最新のもの(A)から試して、古いもの(B)にインプしたい。

次のコマンドで古いものにインポートすると

impユーザー名/パスワードfile = xxx.dmp fromuser = Auser touser = Buser

bはすでにすべてのテーブルを持っているため、これは実際にはインポートされません。

したがって、現在のDBをインポートおよび置換するコマンドがあることは誰でも知っています。ありがとうございました

ちなみに私はOracleを使っています

6
jasonfungsing

インポートは、スキーマ、オブジェクト、およびデータ全体をロードするためのものです。ある程度の柔軟性はありますが、個々のテーブルをロードし、データをロードするだけです。ターゲットスキーマにデータがあるテーブルの存在を適切に処理しません。これは、ターゲットスキーマの古いデータに、新しいソーススキーマで更新または削除されたレコードが含まれている場合に特に問題になります。

Oracle 10g以上を使用している場合の解決策は、代わりにData Pumpを使用することです。このユーティリティには、ターゲットスキーマの既存のテーブルまたは既存のテーブルのデータをソーススキーマのデータで置き換える機能など、はるかに強力な機能があります。 詳細

以前のバージョンのデータベースを使用している場合は、いくつかの回避策があります。 詳細を確認してください。 ただし、すべての制約を無効にして、後処理のラウンドでデータを修正する必要がある場合があります。

7
APC

または、余裕がある場合は、問題のテーブルをBから削除し、importまたはimpdpを使用して再作成します。通常、スキーマ全体を削除(ドロップユーザーUUUUカスケード)してから、たとえば本番環境からテスト/開発データベースを「更新」するときに、新しいインポートを作成します。

7
slovon

Datapump(exp/impの代わりにexpdp/impdp)を使用して TABLE_EXISTS_ACTION = TRUNCATE (または必要に応じてREPLACE)を指定するだけです。

7
Gaius