web-dev-qa-db-ja.com

Oracleでは、スキーマを別のテーブルスペースにどのように移動しますか?

スキーマがUSERSテーブルスペースに作成されていることに気付きましたが、ローカルルールは、それ自体がテーブルスペースにある必要があるということです。 Oracleでは、スキーマを別のテーブルスペースにどのように移動しますか?

5
Stuart Woodward

スキーマ自体を保存したり、表領域en blocを変更したりすることはできません。実際、これは単なるメタ構造です。代わりに-DEFAULT TABLESPACE基礎となるUSERの属性。これを変更すると、デフォルトでこのオブジェクトに新しいオブジェクトが作成されます(別のオブジェクトを明示的に指定しない限り)。

さらに、各タイプの構造(テーブル/インデックス/パーティション...)には、別のテーブルスペースに移動する独自の方法があります。 (つまり、テーブルを移動しても、その上に構築されたインデックスは移動されません。これは、パフォーマンスを向上させるためにインデックスを別のファイルシステムに格納する必要があるため、かなり望ましくありません)。つまり、スキーマオブジェクトのコンテンツをオブジェクトごとに移動する必要があります。

7
Iľja

10および11Gの場合、データポンプユーティリティを使用します。ここのチュートリアルに従ってください:

http://techxploration.blogspot.com.au/2012/10/changing-tablespace-of-Oracle-schema.html

最善の方法ではないにしても、最も安全な方法です。

2
ai10

多くのスクリプトを試しましたが、すべてのオブジェクトで機能しませんでした。クラスター化されたオブジェクトを tablespace から別のオブジェクトに移動することはできません。そのためには、expdpを使用する必要があります。したがって、すべてのオブジェクトを異なるテーブルスペースに移動するには、expdpが最良のオプションであることをお勧めします。

以下はコマンドです。

Nohup expdp\"/ as sysdba \" DIRECTORY = test_dir DUMPFILE = users.dmp LOGFILE = users.log TABLESPACES = USERS&

明確な説明: https://www.orahow.com/2018/06/move-all-objects-to-another-tablespace.html

0
santosh tiwary