新しいまたは異なるテーブルスペースへのスキーマのインポート


13

データの作成元とは異なる単一の新しいテーブルスペースまたは異なるテーブルスペースを使用して、スキーマをOracle 11gR2にインポートする便利な方法はありますか?

例として、OLDDBからBLOG_DATAをエクスポートしました。すべてのユーザーデータはUSERSテーブルスペースに保存されています。

NEWDBで、BLOG_DATAスキーマをインポートしますが、このユーザー専用に作成されたBLOG_DATAテーブルスペースにユーザーオブジェクトを保存します。

BLOG_DATAユーザーを作成し、BLOG_DATAテーブルスペースを作成し、そのユーザーのデフォルトのテーブルスペースとして設定し、適切な無制限のクォータを追加しました。

CREATE TABLESPACE blog_data DATAFILE SIZE 1G;

CREATE USER blog_data IDENTIFIED BY secretpassword DEFAULT TABLESPACE blog_data QUOTA UNLIMITED ON blog_data;

GRANT connect,resource TO blog_data

スキーマは次のようなものでOLDDBからエクスポートされました

exp blog_data/secretpassword@OLDDB file=blog_data.dmp 

以下のフィルの優れた答えを読んだ後、私は不思議に思いました

データにはデフォルトの表領域(ユーザーがクォータを持っている唯一の表領域)以外に移動する場所がないため、これによりimpはすべてのユーザーオブジェクトをそのデフォルトの表領域に配置するように強制されますか?

imp blog_data/secretpassword@NEWDB file=blog_data.dmp

これにより、newdbのblog_dataテーブルスペースにblog_dataスキーマ全体が配置されますか?これが機能しない理由や、特定のオブジェクトなどで問題が発生する理由はありますか?

更新:

簡単なテストを行ったところ、これが事実であることがわかりました。Impオブジェクトを元のテーブルスペースに配置できない場合(テーブルスペースが存在しないなど)、そのユーザーのデフォルトのテーブルスペースにオブジェクトを配置します。詳細な説明:http : //www.dolicapax.org/?p=57

それでも、Philが示唆しているようにData Pumpを使用することは、好ましい選択肢であると思われます。


レガシーexpユーティリティを使用してエクスポートされましたか、それともexpdp(データポンプ)でエクスポートされましたか?
フィリ

例では、上記のように、従来のexpユーティリティでエクスポートされました。expdpを簡単に使用して、古いdbサーバーからファイルを取得できれば、新しいテーブルスペースへの移行が簡単になると思いますか?
ロイ

私は答えで両方をカバーしました。使用データポンプ-それは、このタスクを実行する方が簡単です
Philᵀᴹ

回答:


15

oracle impユーティリティを使用してインポートする場合、実際には別の表領域を指定することはできません。ただし、回避策として、テーブルスペースROWS=Nへのインポートを実行してテーブルを事前に作成し、テーブルごとに新しいテーブルスペースに移動してから、テーブル作成エラーを無視してパラメータを使用してインポートを再度実行し、すべてをインポートすることができますデータの。USERSalter table mytable move tablespace BLOG_DATA;IGNORE=Y

データがData Pump(expdp)を使用してエクスポートされた場合(余談ですが、古いレガシーexp/ impユーティリティではなく、誰もがこれを使用する必要があります)、REMAP_TABLESPACEパラメーターを使用して別のテーブルスペースに簡単にインポートできます。

例えば:

impdp scott/tiger@ZOMG file=blog_data.dmp directory=mydir remap_tablespace=USERS:BLOG_DATA

フィル、どうもありがとう。私は疑問に思っていました:インポートされるユーザーがデフォルトのテーブルスペースに排他的にクォータを持っている場合、impはデータのソースのレイアウトに関係なくそのデフォルトのテーブルスペースにすべてのインポートされたオブジェクトを配置しますか?
ロイ

私は似たようなことに取り組んでいますが、QA envを実稼働に合わせたいので、expdp / impdpを使用したDB全体の移行です。remap_tablespaceを使用すると、すべてのスキーマが別の単一のテーブルスペースに再マップされますが、スキーマごとにremap_tablespaceを使用してimpdpコマンドを実行できると思います。これは仕事を達成する必要があります。
ニコラス・ド・フォントネ

0

以下の手順に従ってください:-

  • ユーザーをエクスポートする
  • コマンドを使用してインポートを実行
    imp system/manager file=export.dmp indexfile=newfile.sql
    newfile.sqlます。これにより、データがインポートされ、すべての定義がに保存されます。
  • 必要なオブジェクトをドロップします。
  • newfile.sql表領域を変更した後、スクリプトを実行します。
  • 必要なオブジェクトのバックアップからインポートします。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.