ヘッダーをスキップ
Oracle® Database管理者ガイド
11gリリース2 (11.2)
B56301-08
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

14 表領域の管理

この章の内容は、次のとおりです。


関連項目:

  • データベース構造、領域管理、表領域およびデータファイルの詳細は、『Oracle Database概要』を参照してください。

  • Oracle Databaseサーバーによって作成および管理されるデータファイルと一時ファイルの作成方法は、第17章「Oracle Managed Filesの使用」を参照してください。


表領域を管理するためのガイドライン

表領域は、関連する論理構造をグループ化するデータベース記憶域です。データベースのデータファイルは表領域に格納されます。Oracle Databaseの表領域を使用して作業する前に、次の各項で説明するガイドラインについて理解してください。

複数の表領域の使用

データベース操作を実行する際に複数の表領域を使用すると、システムの柔軟性が向上します。データベースに複数の表領域があるときには、次のことが可能です。

  • ユーザー・データをデータ・ディクショナリ・データから分離し、I/Oの競合を減らす。

  • あるアプリケーションのデータを別のアプリケーションのデータから分離し、表領域をオフライン化する必要が生じた場合に、複数のアプリケーションが影響を受けないようにする。

  • I/Oの競合を低減するために、異なるディスク・ドライブ上に異なる表領域のデータファイルを配置する。

  • 別の表領域をオンライン状態に維持しながら、個々の表領域をオフライン化して、全体の可用性を高める。

  • 高い更新アクティビティ、読取り専用アクティビティ、一時セグメント記憶域など、異なるタイプのデータベース利用のために異なる表領域を確保することによって、表領域利用を最適化する。

  • 表領域のバックアップを個別に作成する。

一部のオペレーティング・システムでは、同時にオープン可能なファイルの数に制限が設けられています。このような制限によって、同時にオンライン化可能な表領域の数に影響が出ることがあります。そのため、使用しているオペレーティング・システムの制限を超えないように、表領域を効率よく計画する必要があります。表領域はデータベースの要件を満たすために必要な数だけ作成し、構成するファイル数もできるかぎり少なくなるようにしてください。表領域のサイズを大きくする必要がある場合は、小さいデータファイルを多数作成するのではなく、1つまたは2つの大きなデータファイルを追加するか、または自動拡張を使用可能にしてデータファイルを作成します。

これらの要素を考慮に入れてデータを再検討し、データベース設計に必要となる表領域の数を決定してください。

ユーザーに対する表領域割当て制限の割当て

表、クラスタ、マテリアライズド・ビュー、索引およびその他のオブジェクトを作成しようとするユーザーには、そのオブジェクトを作成するための権限と、そのオブジェクトのセグメントを格納する表領域の割当て制限(領域の許容または制限)を付与します。


注意:

パッケージ、プロシージャ、ファンクションなどのPL/SQLオブジェクトの場合、ユーザーにはオブジェクトを作成する権限のみが必要です。これらのPL/SQLオブジェクトを作成するための、明示的な表領域割当ては必要ありません。


関連項目:

ユーザーの作成方法および表領域割当て制限の割当て方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

表領域の作成

表領域を作成する場合、表領域を格納するデータベースを作成する必要があります。どのデータベースでも、重要な表領域はSYSTEM表領域で、ここにはデータ・ディクショナリやシステム・ロールバック・セグメントなど、データベース・サーバー機能の基本となる情報が格納されます。SYSTEM表領域は、データベース作成時に最初に作成される表領域です。これは他のすべての表領域と同様に管理されますが、より高いレベルの権限が必要であり、また一部制限事項があります。たとえば、SYSTEM表領域の名前変更、削除、オフライン化は実行できません。

SYSAUX表領域は、データベースの作成時に必ず作成され、SYSTEM表領域の補助表領域として機能します。これには、様々なOracle製品および機能で使用されるスキーマが格納されるため、各製品で独自の表領域を持つ必要がなくなります。SYSTEM表領域と同様に、SYSAUX表領域を管理するためにはより高いレベルのセキュリティが必要で、この表領域の名前変更や削除はできません。SYSAUX表領域の管理については、「SYSAUX表領域の管理」を参照してください。

表領域を作成する手順はオペレーティング・システムによって異なりますが、必ず最初に、オペレーティング・システムを使用して、データファイルが割り当てられるディレクトリ構造を作成する必要があります。ほとんどのオペレーティング・システムでは、新しい表領域を作成するとき、またはデータファイルを加えて既存の表領域を変更するときに、データファイルのサイズと完全なファイル名を指定します。新しい表領域を作成するとき、または既存の表領域を変更するときは、いずれの場合も、データベースは、指定されたとおりにデータファイルを自動的に割り当てて、フォーマットします。

新しい表領域を作成するには、SQL文CREATE TABLESPACEまたはCREATE TEMPORARY TABLESPACEを使用します。表領域を作成するには、CREATE TABLESPACEシステム権限が必要です。後で、ALTER TABLESPACEまたはALTER DATABASE文を使用して、この表領域を変更できます。そのためには、ALTER TABLESPACEまたはALTER DATABASEシステム権限が必要です。

また、CREATE UNDO TABLESPACE文を使用して、UNDOレコードを格納するために特別に設計されたUNDO表領域と呼ばれる特殊なタイプの表領域を作成できます。これらは、データベースが生成するレコードで、リカバリや読込み一貫性のために、またはROLLBACK文の要求を受けて、データベースの変更をロールバックまたは取り消す際に使用されます。UNDO表領域の作成および管理の詳細は、第16章「UNDOの管理」を参照してください。

永続表領域および一時表領域の作成とメンテナンスについては、次の各項で説明します。

ローカル管理表領域

ローカル管理表領域では、その表領域内のすべてのエクステント情報がビットマップを使用して追跡されるため、次のような利点があります。

  • 領域操作が高速かつ同時に実行されます。領域の割当てと割当て解除によって、ローカル管理のリソース(ヘッダー・ファイルに格納されているビットマップ)が変更されます。

  • パフォーマンスが向上します。

  • ローカル管理の一時表領域ではUNDOやREDOが生成されないため、読取り可能なスタンバイ・データベースを使用できます。

  • AUTOALLOCATE句を指定すると、データベースで適切なエクステント・サイズが自動的に選択されるため、領域割当てが簡素化されます。

  • 必要な情報はファイル・ヘッダーとビットマップ・ブロックに格納されるため、データ・ディクショナリに対するユーザーの依存性が低下します。

  • ローカル管理表領域では、使用可能エクステントを結合する必要はありません。

SYSTEM表領域も含めて、すべての表領域をローカルに管理できます。

DBMS_SPACE_ADMINパッケージによって、ローカル管理表領域のメンテナンス手順が提供されます。


関連項目:


ローカル管理表領域の作成

ローカル管理表領域を作成するには、CREATE TABLESPACE文のEXTENT MANAGEMENT句にLOCALを指定します。これは新しい永続表領域に対するデフォルトですが、AUTOALLOCATE句またはUNIFORM句を指定するには、EXTENT MANAGEMENT LOCAL句を指定する必要があります。AUTOALLOCATE句(デフォルト)を指定してデータベースでエクステントを自動的に管理するか、または表領域を特定サイズ(UNIFORM)の均一エクステントで管理するかを指定できます。

様々なサイズのオブジェクトが表領域に含まれ、異なるエクステント・サイズの多数のエクステントが必要と予測される場合は、AUTOALLOCATEを選択してください。領域の割当てと割当て解除を厳密に制御しなくてもよい場合は、AUTOALLOCATEを選択すると表領域の管理作業が簡素化されます。この設定では、ある程度の領域が無駄になるという短所もありますが、ほとんどの場合、Oracle Databaseによって領域が管理されるという利点の方が重要です。

未使用領域の厳密な制御が必要で、オブジェクトに割り当てられる領域、エクステントの数とサイズを正確に予測できる場合は、UNIFORMを選択してください。この設定によって、表領域から使用できない領域がなくなります。

エクステント管理のタイプを明示的に指定しない場合は、Oracle Databaseによってエクステント管理が次のように判断されます。

  • CREATE TABLESPACE文にDEFAULT記憶域句を指定しない場合、データベースでは自動割当てのローカル管理表領域が作成されます。

  • CREATE TABLESPACE文にDEFAULT記憶域句を指定した場合、データベースでは次のことが考慮されます。

    • MINIMUM EXTENT句を指定した場合、MINIMUM EXTENTINITIALおよびNEXTの値が等しく、PCTINCREASEの値が0 (ゼロ)かどうかが評価されます。その場合、データベースにより、エクステント・サイズ = INITIALで均一なローカル管理表領域が作成されます。MINIMUM EXTENTINITIALおよびNEXTパラメータの値が等しくない場合、またはPCTINCREASEが0(ゼロ)でない場合は、指定したエクステント記憶域パラメータが無視され、自動割当てのローカル管理表領域が作成されます。

    • MINIMUM EXTENT句を指定しなかった場合、データベースは、INITIALおよびNEXTの記憶域値が等しく、PCTINCREASEが0(ゼロ)であるかどうかのみを評価します。その場合、表領域はローカル管理で均一です。それ以外の場合は、ローカル管理の表領域が作成され、自動的に割り当てられます。

次の文は、ローカル管理表領域lmtbsbを作成し、AUTOALLOCATEを指定しています。

CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M
    EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

AUTOALLOCATEを指定すると、表領域はシステム管理になり、最小エクステント・サイズは64KBとなります。

AUTOALLOCATEのかわりにUNIFORMを指定すると、表領域は均一サイズのエクステントで管理されます。このサイズは、UNIFORMSIZE句で指定できます。SIZEを指定しないと、デフォルト・サイズは1MBになります。

次の例は、均一の128Kエクステントを持つ表領域を作成します。(2Kブロックを使用するデータベースでは、各エクステントは64のデータベース・ブロックに相当します。)それぞれの128Kエクステントは、このファイルのエクステント・ビットマップ内のビットとして表されます。

CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M
    EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;

EXTENT MANAGEMENT LOCALを明示的に指定する場合は、DEFAULTの記憶域句、MINIMUM EXTENTまたはTEMPORARYを指定できません。ローカル管理の一時表領域を作成するには、CREATE TEMPORARY TABLESPACE文を使用します。


注意:

ローカル管理表領域にデータファイルを割り当てる場合は、ユーザー領域の一部である、領域管理に使用されるメタデータ(エクステント・ビットマップまたは領域ヘッダー・セグメント)用の領域を考慮する必要があります。たとえば、エクステント管理句でUNIFORM句を指定し、その際にSIZEパラメータを省略した場合、デフォルトのエクステント・サイズは1MBです。この場合、データファイルに指定されたサイズは1MBよりも大きい(最低1ブロックとビットマップの領域を足したもの)必要があります。

ローカル管理表領域のセグメント領域管理の指定

ローカル管理表領域では、Oracle Databaseでセグメント領域の管理に使用できる方法には、自動と手動の2つがあります。手動セグメント領域管理では、「空きリスト」と呼ばれるリンクされたリストを使用してセグメント内の空き領域を管理しますが、自動セグメント領域管理では、ビットマップを使用します。自動セグメント領域管理の方がより効率的な方法で、すべての新しい永続ローカル管理表領域のデフォルトです。

自動セグメント領域管理では、手動セグメント領域管理に比べて領域の使用効率が向上します。また、ユーザー数やインスタンス数の増加につれて拡張されるという点で自己チューニング型です。Oracle Real Application Clusters環境の場合、自動セグメント領域管理ではインスタンスに対する領域の動的アフィニティに対処できます。さらに、多くの標準的な処理負荷の場合、自動セグメント領域管理を使用したアプリケーションのパフォーマンスは、手動セグメント領域管理を使用して適切にチューニングされたアプリケーションよりも優れています。

自動セグメント領域管理は新しい永続ローカル管理表領域のデフォルトですが、SEGMENT SPACE MANAGEMENT AUTO句を使用して明示的に使用可能にできます。

次の文は、自動セグメント領域管理を行うlmtbsb表領域を作成します。

CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M
    EXTENT MANAGEMENT LOCAL 
    SEGMENT SPACE MANAGEMENT AUTO;

SEGMENT SPACE MANAGEMENT MANUAL句を指定すると、自動セグメント領域管理を使用禁止にできます。

表領域の作成時に指定するセグメント領域管理方法は、その後表領域に作成されたすべてのセグメントに対して適用されます。表領域のセグメント領域管理モードは変更できません。


注意:

  • エクステント管理をLOCAL UNIFORMに設定する場合は、各エクステントに5以上のデータベース・ブロックがあることを確認する必要があります。

  • エクステント管理をLOCAL AUTOALLOCATEに設定する場合、およびデータベースのブロック・サイズが16KB以上の場合は、最小で5ブロック(64KBに切り上げられる)のエクステントが作成され、セグメント領域管理が管理されます。

  • SYSTEM表領域に自動セグメント領域管理を指定することはできません。


自動セグメント領域管理を使用するローカル管理表領域は、単一ファイル表領域、つまり、bigfile表領域(「bigfile表領域」を参照)としても作成できます。

bigfile表領域

bigfile表領域は、単一で非常に大きい(最大40億ブロック)データファイルを持つ可能性がある表領域です。これに対して、従来のsmallfile表領域には複数のデータファイルを格納できますが、各データファイルは大きくありません。bigfile表領域の利点は、次のとおりです。

  • 8000ブロックを持つbigfile表領域には、32TBのデータファイルを格納できます。32000ブロックを持つbigfile表領域には、128TBのデータファイルを格納できます。1つのOracle Databaseのデータファイルの最大数は制限されています(通常は64000ファイル)。したがって、bigfile表領域によって、Oracle Databaseの記憶域容量が大幅に増加します。

  • bigfile表領域を使用すると、データベースに必要なデータファイルの数を減らすことができます。また、別の利点として、CREATE DATABASE文とCREATE CONTROLFILE文のDB_FILES初期化パラメータとMAXDATAFILESパラメータを調整すると、データファイル情報に必要なSGA領域の量と制御ファイルのサイズを削減できます。

  • bigfile表領域によるデータファイルの透過性によって、データベース管理が簡素化されます。ALTER TABLESPACE文のSQL構文を使用すると、基礎となる各データファイルではなく表領域で操作を実行できます。

bigfile表領域は、自動セグメント領域管理を指定したローカル管理表領域でのみサポートされます。ただし、ローカル管理のUNDO表領域、一時表領域およびSYSTEM表領域の3つは例外です。


注意:

  • bigfile表領域は、ストライプ化やRAID、および動的に拡張可能な論理ボリュームをサポートする、自動ストレージ管理(Oracle ASM)などの論理ボリューム・マネージャとともに使用することを目的にしています。

  • パラレル問合せ実行およびRMANのバックアップ・パラレル化で問題が生じる可能性があるため、ストライプ化をサポートしていないシステムにはbigfile表領域を作成しないでください。

  • 表領域の容量が制限される場合があるため、大規模なファイル・サイズをサポートしていないプラットフォームでbigfile表領域を使用することはお薦めしません。サポートされているファイルの最大サイズの詳細は、ご使用のオペレーティング・システム固有のドキュメントを参照してください。


bigfile表領域の作成

bigfile表領域を作成するには、CREATE TABLESPACE文のBIGFILEキーワード(CREATE BIGFILE TABLESPACE...)を指定します。Oracle Databaseは、自動セグメント領域管理を指定したローカル管理表領域を自動的に作成します。この文には、EXTENT MANAGEMENT LOCALおよびSEGMENT SPACE MANAGEMENT AUTOを必要に応じて指定できます。ただし、EXTENT MANAGEMENT DICTIONARYまたはSEGMENT SPACE MANAGEMENT MANUALを指定すると、データベースはエラーを返します。この文の残りの構文はCREATE TABLESPACE文と同じですが、指定できるのは1つのデータファイルのみです。次に例を示します。

CREATE BIGFILE TABLESPACE bigtbs 
    DATAFILE '/u02/oracle/data/bigtbs01.dbf' SIZE 50G
...

SIZEは、キロバイト(KB)、メガバイト(MB)、ギガバイト(GB)またはテラバイト(TB)で指定できます。

データベース作成時にデフォルトの表領域タイプをBIGFILEに設定している場合は、CREATE TABLESPACE文にBIGFILEキーワードを指定する必要はありません。この場合、bigfile表領域はデフォルトで作成されます。

データベース作成時にデフォルトの表領域タイプをBIGFILEに設定しておきながら、従来の表領域(smallfile)を作成する場合は、CREATE SMALLFILE TABLESPACE文を指定すると、デフォルトの表領域タイプよりも作成する表領域が優先されます。

bigfile表領域の識別

次のビューには、表領域をbigfile表領域として識別するBIGFILE列が含まれています。

  • DBA_TABLESPACES

  • USER_TABLESPACES

  • V$TABLESPACE

bigfile表領域は、その単一データファイルの相対ファイル番号によっても識別できます。その番号は、ほとんどのプラットフォームで1024ですが、OS/390では4096です。

圧縮された表領域

表領域内に作成されるすべての表がデフォルトで圧縮されるように指定できます。DEFAULTキーワードを使用し、その後に表の作成時に使用する圧縮タイプ句を1つ指定して、表圧縮のタイプを指定します。

次の文は、表領域内に作成されるすべての文で、特に指定がないかぎりOLTP圧縮が使用されることを示しています。

CREATE TABLESPACE ... DEFAULT COMPRESS FOR OLTP ... ;

デフォルトの表領域圧縮指定は、その表領域に表を作成するときに上書きできます。


関連項目:

  • 表圧縮の様々なタイプの詳細は、「表圧縮の使用」を参照してください。

  • デフォルトの圧縮タイプで表領域を作成するときに使用する正確な構文は、『Oracle Database SQL言語リファレンス』を参照してください。


暗号化された表領域

永続表領域を暗号化して機密データを保護できます。表領域の暗号化はアプリケーションに対して完全に透過的であるため、アプリケーションの変更は不要です。暗号化表領域では、主にデータベース以外の手段による未承認のアクセスからデータを保護します。たとえば、あるOracle Databaseから別のOracle Databaseに移動するため、または格納用のオフサイト施設に移動するために暗号化された表領域をバックアップ・メディアに書き込むと、表領域は暗号化されたままになります。また、暗号化表領域では、データベースのセキュリティ機能を回避して、オペレーティング・システムのファイル・システムから直接データベース・ファイルにアクセスしようとするユーザーからデータを保護します。

表領域の暗号化によって、すべてのセキュリティ問題に対処できるわけではありません。たとえば、データベース内からのアクセスは制御できません。暗号化された表領域に格納されているオブジェクトに対する権限が付与されたユーザーは、追加のパスワードやキーを指定せずにそれらのオブジェクトにアクセスできます。

表領域を暗号化すると、すべての表領域ブロックが暗号化されます。暗号化は、表、クラスタ、索引、LOB(BASICFILESECUREFILE)、表パーティション、索引パーティションなどを含むすべてのセグメント・タイプに対してサポートされています。


注意:

暗号化された表領域に格納されているSECUREFILE LOBに対してLOB暗号化を使用する必要はありません。

最大限のセキュリティを確保するために、暗号化された表領域のデータは、UNDO表領域、REDOログおよび一時表領域に書き込まれる場合は自動的に暗号化されます。暗号化されたUNDO表領域や一時表領域を明示的に作成する必要はなく、実際、これらの表領域タイプに暗号化を指定することはできません。

異なる表領域に別のパーティションがあるパーティション表およびパーティション索引表の場合は、同じ表または索引で、暗号化された表領域と暗号化されていない表領域の両方を使用できます。

表領域暗号化はOracle Databaseの透過的データ暗号化機能を使用しますが、この機能を使用するには、データベースのマスター暗号化鍵を保存するためにOracleウォレットを作成する必要があります。暗号化された表領域を作成する場合、および暗号化データを格納または取得する場合は、ウォレットがオープンしている必要があります。ウォレットは、オープンするとすべてのセッションで使用可能になり、明示的にクローズするか、データベースが停止されるまではオープンしたままになります。

表領域を暗号化するには、COMPATIBLE初期化パラメータを11.1.0以上に設定した状態でデータベースをオープンする必要があります。Oracle Database 11g リリース2の新規インストールでは、COMPATIBLEのデフォルト設定は11.2.0です。表領域を作成できるユーザーは、暗号化された表領域も作成できます。

透過的データ暗号化では、次に示すAdvanced Encryption Standard(AES)アルゴリズムやTriple Data Encryption Standard(3DES)アルゴリズムなど、業界標準の暗号化アルゴリズムがサポートされています。

  • AES256

  • AES192

  • AES128

  • 3DES168

暗号化キーの長さはアルゴリズム名で示されています。たとえば、AES128アルゴリズムでは128ビットのキーが使用されます。表領域の作成時に使用するアルゴリズムを指定し、異なる表領域で別々のアルゴリズムを使用できます。理論上は、キーの長さが長くなるほどセキュリティが強化されますが、その分、CPUオーバーヘッドがかかります。アルゴリズムをCREATE TABLESPACE分で指定しなかった場合、AES128がデフォルトです。表領域の暗号化にはディスク領域オーバーヘッドは発生しません。

次の文では、デフォルトの暗号化アルゴリズムを使用して暗号化された表領域を作成しています。

CREATE TABLESPACE securespace
DATAFILE '/u01/app/oracle/oradata/orcl/secure01.dbf' SIZE 100M
ENCRYPTION
DEFAULT STORAGE(ENCRYPT);

次の文では、AES256アルゴリズムを使用して同じ表領域を作成しています。

CREATE TABLESPACE securespace
DATAFILE '/u01/app/oracle/oradata/orcl/secure01.dbf' SIZE 100M
ENCRYPTION USING 'AES256'
DEFAULT STORAGE(ENCRYPT);

制限事項

暗号化された表領域の制限事項は、次のとおりです。

  • 既存の表領域は、ALTER TABLESPACE文で暗号化できません。ただし、データ・ポンプまたはSQL文(CREATE TABLE AS SELECTALTER TABLE MOVEなど)を使用して、既存の表データを暗号化された表領域に移動できます。

  • 暗号化された表領域は、別のデータベースにトランスポートする際に制限を受けます。「トランスポータブル表領域の使用に関する制限事項」を参照してください。

  • 暗号化された表領域が含まれたデータベースをリカバリする場合(SHUTDOWN ABORTの後、またはデータベース・インスタンスが停止する致命的なエラーの後など)は、リカバリ・プロセスがデータ・ブロックとREDOを復号化できるように、データベースのマウントの後にOracleウォレットをオープンしてからデータベースをオープンする必要があります。

また、透過的データ暗号化に関する一般的な制限事項は、『Oracle Database Advanced Security管理者ガイド』を参照してください。

表領域の暗号化情報の問合せ

DBA_TABLESPACESUSER_TABLESPACESのデータ・ディクショナリ・ビューには、ENCRYPTEDという列が含まれています。表領域が暗号化されている場合は、この列にYESと表示されます。

V$ENCRYPTED_TABLESPACESビューには、現在暗号化されているすべての表領域がリストされます。次の問合せでは、暗号化された表領域の名前と暗号化アルゴリズムが表示されます。

SELECT t.name, e.encryptionalg algorithm 
FROM  v$tablespace t, v$encrypted_tablespaces e
WHERE t.ts# = e.ts#;
 
NAME                           ALGORITHM 
------------------------------ --------- 
SECURESPACE                    AES256  

関連項目:

  • 透過的データ暗号化の詳細およびウォレットを作成して開く手順は、『Oracle Database 2日でセキュリティ・ガイド』を参照してください。

  • 表領域全体を暗号化する代替方法は、「機密データを格納する列の暗号化」を参照してください。

  • Oracle Real Application Clusters環境でOracleウォレットを使用する方法については、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。

  • CREATE TABLESPACE文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。


一時表領域

一時表領域には、セッションの間のみ存続する一時データが格納されます。一時表領域を使用すると、メモリーに格納できない複数のソート操作の同時実行性を改善し、ソート時の領域管理操作の効率を改善できます。

一時表領域は、次の情報を格納するために使用します。

  • 中間ソート結果

  • 一時表と一時索引

  • 一時LOB

  • 一時Bツリー

特定のインスタンスのソート操作はすべて、一時表領域内の1つのソート・セグメントを共有し、ソート・セグメントは、一時領域を必要とするソート操作を実行する各インスタンスに存在します。ソート・セグメントは、一時表領域を使用してソート処理を実行する最初の文によってインスタンスの起動後に作成され、停止時にのみ解放されます。

デフォルトでは、新規にOracle Databaseをインストールするたびに、TEMPという単一の一時表領域が作成されます。追加の一時表領域は、CREATE TABLESPACE文で作成できます。一時表領域を各データベース・ユーザーに割り当てるには、CREATE USER文またはALTER USER文を使用します。複数のユーザーが単一の一時表領域を共有できます。

一時表領域には、オブジェクトを明示的に作成できません。


注意:

前述の説明の例外は、一時表です。一時表を作成すると、一時表を新規の一時表領域内に作成する場合を除き、その行はデフォルト一時表領域に格納されます。詳細は、「一時表の作成」を参照してください。

デフォルト一時表領域

一時表領域が明示的に割り当てられていないユーザーは、データベースのデフォルト一時表領域(新規インストールではTEMP)を使用します。データベースのデフォルト一時表領域は次のコマンドで変更できます。

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tablespace_name;

データベースの現行のデフォルト一時表領域を判断するには、次の問合せを実行します。

SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE
   PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE';

PROPERTY_NAME              PROPERTY_VALUE
-------------------------- ------------------------------
DEFAULT_TEMP_TABLESPACE    TEMP

一時表領域の領域割当て

一時表領域のソート・セグメントの領域割当てと割当て解除は、V$SORT_SEGMENTビューを使用して表示できます。V$TEMPSEG_USAGEビューでは、そのセグメント内の現行のソート・ユーザーが識別されます。

一時表領域を使用するソート操作が完了しても、ソート・セグメントに割り当てられたエクステントの割当ては解除されず、エクステントには、使用可能マークおよび再利用可能マークが付けられます。DBA_TEMP_FREE_SPACEビューには、各一時表領域の割当済領域の合計と空き領域が表示されます。詳細は、「一時表領域の領域使用情報の表示」を参照してください。大量の未使用領域があるローカル管理の一時表領域は手動で縮小できます。詳細は、「ローカル管理の一時表領域の縮小」を参照してください。


関連項目:

  • ユーザーの作成方法および一時表領域の割当て方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

  • デフォルト一時表領域の詳細は、『Oracle Database概要』を参照してください。

  • V$SORT_SEGMENTV$TEMPSEG_USAGEおよびDBA_TEMP_FREE_SPACEの各ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

  • ソートのチューニングの説明は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。


ローカル管理の一時表領域の作成

ローカル管理表領域では、領域の管理がより簡単で効率的であるため、一時表領域には理想的です。ローカル管理の一時表領域では、一時表領域外のデータを変更せず、一時表領域データのREDOを生成しない一時ファイルが使用されます。このため、読取り専用データベースまたはスタンバイ・データベースでディスク上ソート操作を実行できます。

一時ファイルの情報を表示するには、データファイルの場合とは異なるビューも使用します。V$TEMPFILEおよびDBA_TEMP_FILESビューは、V$DATAFILEおよびDBA_DATA_FILESビューに相当します。

ローカル管理の一時表領域を作成するには、CREATE TEMPORARY TABLESPACE文を使用します。この文を発行するには、CREATE TABLESPACEシステム権限が必要です。

次の文では、各エクステントが16MBの一時表領域が作成されます。16MBの各エクステント(標準ブロック・サイズが2KBのときは8000個のブロックに相当)は、このファイルのビットマップに1ビットで表されます。

CREATE TEMPORARY TABLESPACE lmtemp TEMPFILE '/u02/oracle/data/lmtemp01.dbf' 
     SIZE 20M REUSE
     EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M;

すべての一時表領域は均一サイズのローカル管理エクステントを使用して作成されるため、一時表領域の場合、エクステント管理句はオプションです。SIZEのデフォルトは1MBです。SIZEに別の値を指定するには、前述の文を使用できます。


注意:

オペレーティング・システムによっては、一時ファイルのブロックが実際にアクセスされるまで、一時ファイル用の領域が割り当てられない場合があります。領域の割当ての遅延のため、一時ファイルの作成およびサイズ変更が速くなります。ただし、後で一時ファイルが使用されるときに、十分なディスク領域を使用可能にする必要があります。使用しているシステムでデータベースがこのように一時ファイルを割り当てているかどうかは、オペレーティング・システムのマニュアルを参照して判断してください。

bigfile一時表領域の作成

通常の表領域と同様に、単一ファイル(大型ファイル)の一時表領域を作成できます。単一ファイルの一時表領域を作成するには、CREATE BIGFILE TEMPORARY TABLESPACE文を使用します。bigfile表領域の詳細は、「bigfile表領域の作成」および「bigfile表領域の変更」の項を参照してください。ただし、データファイルのかわりに一時ファイルを使用する一時表領域を作成する点を考慮に入れてください。

一時表領域の領域使用情報の表示

DBA_TEMP_FREE_SPACEディクショナリ・ビューには、各一時表領域の領域使用に関する情報が表示されます。この情報には、割当て済領域と空き領域が含まれます。これらの統計を表示するには、次のコマンドを使用してこのビューを問い合せます。

SELECT * from DBA_TEMP_FREE_SPACE;
 
TABLESPACE_NAME                     TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE
----------------------------------- --------------- --------------- ----------
TEMP                                250609664       250609664       249561088

複数の一時表領域: 表領域グループの使用

ユーザーは、一時表領域グループを使用して複数の表領域から一時領域を消費できます。単一の一時表領域ではなく表領域グループを使用することによって、ソート(特に多数のパーティションがある表でのソート)の結果を保持するのに1つの表領域では不十分な場合に発生する問題を回避できます。パラレル実行のサーバーで表領域グループを使用すると、1回のパラレル操作で複数の一時表領域を使用できます。

表領域グループには、次の特性があります。

  • これには1つ以上の表領域が含まれます。1つのグループに含まれる表領域の数に明示的な制限はありません。

  • 表領域のネームスペースを共有するため、表領域グループにはグループ内の表領域と同じ名前は付けられません。

  • 表領域グループ名は、データベースにデフォルト一時表領域を割り当てるとき、またはユーザーに一時表領域を割り当てるときに表領域名が表示される場所に指定できます。

表領域グループは明示的に作成しません。表領域グループは、最初の一時表領域がグループに割り当てられると暗黙的に作成されます。また、表領域グループに含まれる最後の一時表領域がグループから削除されると、その表領域グループが削除されます。

DBA_TABLESPACE_GROUPSビューには、表領域グループとそのメンバーの表領域がリスト表示されます。


関連項目:

一時表領域または表領域グループのユーザーへの割当ての詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

表領域グループの作成

表領域グループは、CREATE TEMPORARY TABLESPACE文またはALTER TABLESPACE文にTABLESPACE GROUP句を指定したときに、指定した表領域グループが存在していない場合に暗黙的に作成されます。

たとえば、group1およびgroup2が両方とも存在しない場合は、次の文によってこの2つのグループが作成され、それぞれのグループには指定の表領域のみがメンバーとして含まれます。

CREATE TEMPORARY TABLESPACE lmtemp2 TEMPFILE '/u02/oracle/data/lmtemp201.dbf'
     SIZE 50M
     TABLESPACE GROUP group1;

ALTER TABLESPACE lmtemp TABLESPACE GROUP group2;

表領域グループのメンバーの変更

表領域を既存の表領域グループに追加するには、CREATE TEMPORARY TABLESPACE文またはALTER TABLESPACE文のTABLESPACE GROUP句で既存の表領域グループ名を指定します。

次の文は、表領域を既存のグループに追加します。これにより、表領域lmtemp3を作成してgroup1に追加します。その結果、group1には表領域lmtemp2lmtemp3が含まれます。

CREATE TEMPORARY TABLESPACE lmtemp3 TEMPFILE '/u02/oracle/data/lmtemp301.dbf'
     SIZE 25M
     TABLESPACE GROUP group1;

次の文も表領域を既存のグループに追加しますが、この場合、表領域lmtemp2はすでにgroup1に属しているため、実質的にはgroup1からgroup2への移動となります。

ALTER TABLESPACE lmtemp2 TABLESPACE GROUP group2;

この結果、group2にはlmtemplmtemp2が含まれ、group1にはtmtemp3のみが含まれます。

次の文を使用すると、表領域をグループから削除できます。

ALTER TABLESPACE lmtemp3 TABLESPACE GROUP '';

これによって、表領域lmtemp3はどのグループにも属さなくなります。さらに、group1に属するメンバーがなくなるため、group1は暗黙的に削除されます。

デフォルト一時表領域としての表領域グループの割当て

ALTER DATABASE...DEFAULT TEMPORARY TABLESPACE文を使用して、表領域グループをデータベースのデフォルト一時表領域として割り当てます。次に例を示します。

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE group2;

これで、明示的に一時表領域が割り当てられていないユーザーは表領域lmtemplmtemp2を使用することになります。

表領域グループがデフォルト一時表領域に指定されている場合、そのグループのメンバーの表領域は削除できません。メンバーの表領域を削除するには、最初にその表領域を表領域グループから削除する必要があります。同様に、単一の一時表領域がデフォルト一時表領域に指定されている場合は、その一時表領域は削除できません。

表領域の非標準のブロック・サイズの指定

DB_BLOCK_SIZE初期化パラメータで指定された標準のデータベース・ブロック・サイズとは異なるブロック・サイズの表領域を作成できます。この機能によって、ブロック・サイズの異なる表領域をデータベース間でトランスポートできます。

CREATE TABLESPACE文のBLOCKSIZE句を使用して、データベースの標準とは異なるブロック・サイズを指定して表領域を作成できます。BLOCKSIZE句を正しく実行するためには、DB_CACHE_SIZEと、少なくとも1つのDB_nK_CACHE_SIZE初期化パラメータをすでに設定している必要があります。さらに、BLOCKSIZE句で指定する整数を1つのDB_nK_CACHE_SIZEパラメータの設定に対応付ける必要があります。冗長な指定になりますが、BLOCKSIZEDB_BLOCK_SIZE初期化パラメータで指定されている標準のブロック・サイズと同じに指定することも可能です。

次の文は表領域lmtbsbを作成しますが、ブロック・サイズをDB_BLOCK_SIZE初期化パラメータで指定されている標準のデータベース・ブロック・サイズとは異なるサイズにします。

CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M
    EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K
    BLOCKSIZE 8K; 

関連項目:


REDOレコードの書込みの制御

一部のデータベース操作については、データベースでREDOレコードを生成するかどうかを制御できます。REDOを使用しないと、メディア・リカバリはできません。ただし、REDOの生成を抑制するとパフォーマンスが改善されるため、簡単にリカバリできる操作に適している場合があります。たとえば、CREATE TABLE...AS SELECT文は、データベース障害やインスタンス障害が発生した場合に操作を繰り返すことができます。

これらの操作を表領域内のオブジェクトに対して実行するときにREDOを抑制するには、CREATE TABLESPACE文にNOLOGGING句を指定します。この句を指定しないか、かわりにLOGGINGを指定した場合は、表領域内のオブジェクトに変更が行われるとREDOが生成されます。一時セグメントや一時表領域の場合は、ロギング属性に関係なくREDOは生成されません。

表領域レベルで指定するロギング属性は、その表領域内で作成されるオブジェクトのデフォルト属性になります。このデフォルトのロギング属性は、CREATE TABLE文を使用するなど、スキーマ・オブジェクト・レベルでLOGGINGNOLOGGINGを指定することで上書きできます。

スタンバイ・データベースがある場合は、NOLOGGING句を指定すると、そのスタンバイ・データベースの可用性と精度に問題が生じます。この問題を克服するために、FORCE LOGGINGモードを指定できます。CREATE TABLESPACE文にFORCE LOGGING句を指定すると、表領域内のオブジェクトを変更するすべての操作について、REDOレコードを強制的に生成させることができます。これにより、オブジェクト・レベルでの指定が上書きされます。

FORCE LOGGINGモードの表領域を別のデータベースにトランスポートすると、新しい表領域ではFORCE LOGGINGモードは維持されません。


関連項目:

  • NOLOGGINGモードで実行できる操作の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

  • FORCE LOGGINGモードの詳細と、CREATE DATABASE文でFORCE LOGGING句を使用する効果の詳細は、「FORCE LOGGINGモードの指定」を参照してください。


表領域の可用性の変更

オンラインの表領域をオフライン化すると、一般的な使用を一時的に禁止にできます。データベースの残りの部分はオープンしていて使用可能であり、ユーザーはデータにアクセスできます。逆に、オフライン状態の表領域をオンライン化して、データベース・ユーザーがその表領域内のスキーマ・オブジェクトを使用できるようにすることもできます。表領域の可用性を変更するには、データベースをオープンする必要があります。

表領域の可用性を変更するには、ALTER TABLESPACE文を使用します。そのためには、ALTER TABLESPACEまたはMANAGE TABLESPACEシステム権限が必要です。


関連項目:

表領域内の各データファイルの可用性を変更する方法の詳細は、「データファイルの可用性の変更」を参照してください。

表領域のオフライン化

表領域は、次のような場合にオフライン化できます。

  • データベースの一部のみを使用できないようにし、残りの部分には正常にアクセスできるようにする場合

  • 表領域のバックアップをオフラインで実行する場合(ただし、表領域はオンラインでも、使用中でもバックアップ可能です)

  • アプリケーションの更新またはメンテナンスを行う間、アプリケーションとその表グループを一時的にアクセス不可にする場合

  • 表領域のデータファイルの名前の変更または再配置をする場合

    詳細は、「データファイルの名前変更と再配置」を参照してください。

表領域をオフライン化すると、その関連ファイルがすべてオフライン化されます。

次の表領域はオフライン化できません。

  • SYSTEM

  • UNDO表領域

  • 一時表領域

表領域をオフライン化する前に、その表領域がデフォルト表領域としてすでに割り当てられているユーザーの表領域割当ての変更を考慮してください。このようなユーザーは表領域がオフラインの間その中のオブジェクトにアクセスできないため、表領域割当ての変更をお薦めします。

ALTER TABLESPACE...OFFLINE文では、次のパラメータを指定できます。

説明
NORMAL 表領域のどのデータファイルにもエラー条件が存在していない場合は、この表領域を通常の方法でオフライン化できます。書込みエラーが発生していると、現時点では表領域のデータファイルをオフライン化することはできません。OFFLINE NORMALを指定すると、データベースは表領域のデータファイルすべてのチェックポイントを取ってから、それらのファイルをオフライン化します。NORMALはデフォルトです。
TEMPORARY 表領域の1つまたは複数のデータファイルについてエラー条件が存在している場合でも、表領域を一時的にオフライン化できます。OFFLINE TEMPORARYを指定すると、データベースはまだオフライン化されていないデータファイルのチェックポイントを取ってから、これらのファイルをオフライン化します。

オフラインになっているファイルがないときに表領域を一時的にオフライン化する場合は、表領域をオンラインに戻す前にメディア・リカバリを実行する必要はありません。しかし、表領域の1つまたは複数のファイルが書込みエラーのためにオフラインになっており、この表領域を一時的にオフライン化する場合は、表領域をオンラインに戻す前にリカバリする必要があります。

IMMEDIATE データベースによりデータファイル上のチェックポイントがチェックされることなく、表領域をただちにオフラインにできます。OFFLINE IMMEDIATEを指定すると、表領域をオンライン化する前に表領域のメディア・リカバリが必要です。データベースがNOARCHIVELOGで稼働している場合は、表領域を即時にオフライン化することはできません。


注意:

表領域をオフライン化する必要がある場合は、可能なかぎりNORMAL句(デフォルト)を使用してください。この設定によって、不完全リカバリの後にALTER DATABASE OPEN RESETLOGS文を使用してREDOログ順序をリセットした場合でも、表領域をオンラインに戻すためのリカバリが不要になることが保証されます。

TEMPORARYは、表領域を通常の方法でオフライン化できないときのみ指定してください。この場合、エラーのためにオフライン化されたファイルのみをリカバリする必要があり、その後に表領域をオンライン化できます。IMMEDIATEは、NORMAL設定とTEMPORARY設定を試した後にのみ指定してください。

次の例では、users表領域を通常の方法でオフライン化しています。

ALTER TABLESPACE users OFFLINE NORMAL;

表領域のオンライン化

データベースがオープンされている場合は、いつでもOracle Database内の任意の表領域をオンライン化できます。通常、表領域は、データベース・ユーザーがその中のデータを使用できるようにオンラインになっています。

オンライン化しようとする表領域が、正常に(ALTER TABLESPACE OFFLINE文のNORMAL句を使用して)オフライン化されていない場合は、最初にメディア・リカバリをしないかぎりオンライン化できません。メディア・リカバリを実行しないと、エラーが返されて表領域はオフラインのままになります。


関連項目:

メディア・リカバリの実行方法の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

次の文は、users表領域をオンライン化します。

ALTER TABLESPACE users ONLINE;

読取り専用表領域の使用

表領域を読取り専用にすると、表領域のデータファイルに対して書込み操作ができなくなります。読取り専用表領域の主な目的は、データベース内の大規模かつ静的部分のバックアップおよびリカバリを実行しなくて済むようにすることです。また、読取り専用表領域は、ユーザーが履歴データを変更できないように履歴データを完全に保護する手段でもあります。表領域を読取り専用にすると、その表領域内のすべての表はユーザーの更新権限レベルに関係なく更新できません。


注意:

表領域は、それが作成されたデータベース内でしかオンライン化できないため、読取り専用にすること自体でアーカイブ要件やデータ公開要件を満たすことはできません。ただし、「データベース間での表領域のトランスポート」で説明するように、トランスポータブル表領域機能を使用すると、これらの要件を満たすことができます。

表や索引などの項目は読取り専用表領域から削除できますが、読取り専用表領域内のオブジェクトは作成または変更できません。ALTER TABLE...ADDまたはALTER TABLE...MODIFYなど、データ・ディクショナリ内のファイル記述を更新する文は実行できますが、新しい記述は表領域を読取り/書込み用にするまでは使用できません。

読取り専用表領域は、他のデータベースにトランスポートすることもできます。読取り専用表領域は更新できないため、CD-ROMまたはWrite Once-Read Many(WORM)デバイスに格納できます。

内容は次のとおりです。

表領域を読取り専用にする方法

すべての表領域は、最初は読取り/書込み用として作成されます。表領域を読取り専用に変更するには、ALTER TABLESPACE文でREAD ONLYキーワードを使用します。そのためには、ALTER TABLESPACEまたはMANAGE TABLESPACEシステム権限が必要です。

表領域を読取り専用にするには、あらかじめ次の条件を満たす必要があります。

  • 表領域は必ずオンラインにする。これにより、表領域に適用する必要のあるUNDO情報がないことが保証されます。

  • 表領域をアクティブなUNDO表領域またはSYSTEM表領域にしない。

  • 表領域を現行のオンライン・バックアップに含めない(オンライン・バックアップは、終了時に表領域内にあるすべてのデータファイルのヘッダー・ファイルを更新するためです)。

  • 表領域を一時表領域にできない。

読取り専用表領域のデータにアクセスする際のパフォーマンスを向上させるため、表領域を読取り専用にする直前に、表領域内の表のブロックすべてにアクセスする問合せを発行することをお薦めします。各表に対してSELECT COUNT (*)などの単純な問合せを実行しておくと、それ以降、表領域のデータ・ブロックに最も効率的にアクセスできるようになります。これによって、最後にブロックを変更したトランザクションの状態をデータベースが確認する必要がなくなるからです。

次の文は、flights表領域を読取り専用にします。

ALTER TABLESPACE flights READ ONLY;

データベースのトランザクション処理中に、ALTER TABLESPACE...READ ONLY文を発行できます。この文が発行されると、表領域は一時的に読取り専用モードになり、ALTERコマンドは、既存のトランザクションがコミットまたはロールバックにより完了するまで待機します。表領域に対するそれ以後のDML操作は許可されず、DML文でそれ以降の変更をしようとすると、エラーが返されます。

ALTER TABLESPACE...READ ONLY文は、戻る前に、表領域に対する変更が保留中またはコミット解除されたトランザクション、およびこの文の発行前に開始されたトランザクションがコミットまたはロールバックされるのを待機します。文の発行前に開始されたトランザクションがアクティブなままであっても、表領域に対する変更をロールバックしてセーブポイントまでロールバックすると、文はこのアクティブ・トランザクションを待機しなくなります。

ALTER TABLESPACE文の完了までに長時間かかる場合は、読取り専用状態になるのを妨げているトランザクションを識別できます。次に、それらのトランザクションの所有者に通知し、必要に応じてトランザクションを終了させるかどうかを決定できます。

次の例では、ALTER TABLESPACE...READ ONLY文に対応するトランザクション・エントリが識別され、そのセッション・アドレス(saddr)が表示されます。

SELECT SQL_TEXT, SADDR 
    FROM V$SQLAREA,V$SESSION
    WHERE V$SQLAREA.ADDRESS = V$SESSION.SQL_ADDRESS    
        AND SQL_TEXT LIKE 'alter tablespace%'; 

SQL_TEXT                                 SADDR   
---------------------------------------- --------
alter tablespace tbs1 read only          80034AF0

各アクティブ・トランザクションの開始システム変更番号(SCN)は、V$TRANSACTIONビューに格納されています。このビューを開始SCNの昇順でソートして表示すると、トランザクションが実行順にリストされます。前述の例の場合は、読取り専用文のトランザクション・エントリのセッション・アドレスがわかっているので、V$TRANSACTIONビューで特定できます。開始SCNよりも小さい番号を持つトランザクション(以前に実行されたトランザクションを示します)はすべて、表領域の停止とその後の読取り専用状態になるのを妨げている可能性があります。

SELECT SES_ADDR, START_SCNB 
    FROM V$TRANSACTION
    ORDER BY START_SCNB;

SES_ADDR START_SCNB
-------- ----------
800352A0       3621   --> waiting on this txn
80035A50       3623   --> waiting on this txn
80034AF0       3628   --> this is the ALTER TABLESPACE statement
80037910       3629   --> don't care about this txn

この時点で、ブロックしているトランザクションの所有者を見つけることができます。

SELECT T.SES_ADDR, S.USERNAME, S.MACHINE
   FROM V$SESSION S, V$TRANSACTION T
   WHERE T.SES_ADDR = S.SADDR
   ORDER BY T.SES_ADDR

SES_ADDR USERNAME             MACHINE
-------- -------------------- --------------------
800352A0 DAVIDB               DAVIDBLAP             --> Contact this user
80035A50 MIKEL                LAB61                 --> Contact this user
80034AF0 DBA01                STEVEFLAP           
80037910 NICKD                NICKDLAP

表領域を読取り専用にした後は、その表領域のバックアップをただちに作成することをお薦めします。表領域は読取り専用になっているかぎり変更できないため、それ以後のバックアップは不要です。


関連項目:

『Oracle Databaseバックアップおよびリカバリ・アドバンスト・ユーザーズ・ガイド』

読取り専用表領域を書込み可能にする方法

表領域を書込み可能に変更するには、ALTER TABLESPACE文でREAD WRITEキーワードを指定します。そのためには、ALTER TABLESPACEまたはMANAGE TABLESPACEシステム権限が必要です。

表領域を読取り/書込み用にするには、前提条件として、表領域のみでなく、そのすべてのデータファイルをオンライン化する必要があります。データファイルをオンライン化するには、ALTER DATABASE文のDATAFILE...ONLINE句を使用します。データファイルの現行の状態を確認するには、V$DATAFILEビューを使用します。

次の文は、flights表領域を書込み可能にします。

ALTER TABLESPACE flights READ WRITE;

読取り専用表領域を書込み可能にすると、データファイルの制御ファイル・エントリが更新されるため、読取り専用バージョンのデータファイルをリカバリの開始点として使用できます。

WORMデバイスでの読取り専用表領域の作成

CD-ROMまたはWORMデバイスに読取り専用表領域を作成する手順は、次のとおりです。

  1. 別のデバイスに書込み可能表領域を作成します。その表領域に属するオブジェクトを作成して、データを挿入します。

  2. 表領域を読取り専用に変更します。

  3. 表領域のデータファイルをWORMデバイスにコピーします。ファイルをコピーするには、オペレーティング・システムのコマンドを使用します。

  4. 表領域をオフライン化します。

  5. データファイルの名前を、WORMデバイスにコピーしたファイルと一致するように変更します。これには、RENAME DATAFILE句を指定したALTER TABLESPACE文を使用します。データファイルの名前を変更すると、制御ファイルに記述されているこれらのファイルの名前も変更されます。

  6. 表領域をオンライン化します。

読取り専用表領域内にあるデータファイルのオープンの遅延

大規模データベースのほとんどが、アクセス速度の遅いデバイスや階層形式の記憶デバイス上にある読取り専用表領域に格納されている場合は、READ_ONLY_OPEN_DELAYED初期化パラメータをTRUEに設定することを検討する必要があります。これにより、読取り専用表領域内のデータファイルは、そこに格納されたデータの読取り試行時に初めてアクセスされるため、主にデータベースのオープンなど、特定の操作が高速になります。

READ_ONLY_OPEN_DELAYED=TRUEに設定すると、次のような副次的な影響があります。

  • オープン時には、読取り専用の欠落ファイルや不良ファイルが検出されません。アクセスしようとしたときに初めて検出されます。

  • ALTER SYSTEM CHECK DATAFILESでは、読取り専用ファイルはチェックされません。

  • ALTER TABLESPACE...ONLINEおよびALTER DATABASE DATAFILE...ONLINEでは、読取り専用ファイルはチェックされません。最初のアクセス時にのみチェックされます。

  • V$RECOVER_FILEV$BACKUPおよびV$DATAFILE_HEADERは、読取り専用ファイルにアクセスしません。読取り専用ファイルは結果リスト上に「DELAYED OPEN」というエラーで示され、他の列の値は0(ゼロ)になります。

  • V$DATAFILEは読取り専用ファイルにアクセスしません。読取り専用ファイルにはサイズ「0」がリストされます。

  • V$RECOVERY_LOGは読取り専用ファイルにアクセスしません。リカバリに必要な可能性があるログは、リストに追加されません。

  • ALTER DATABASE NOARCHIVELOGは読取り専用ファイルにアクセスしません。リカバリが必要な読取り専用ファイルがある場合でも、処理が継続します。


    注意:

    • RECOVER DATABASEおよびALTER DATABASE OPEN RESETLOGSは、パラメータ値に関係なく、すべての読取り専用データファイルに引き続きアクセスします。これらの操作で読取り専用ファイルへのアクセスを回避する場合は、該当ファイルをオフライン化します。

    • バックアップ制御ファイルを使用すると、一部のファイルの読取り専用状態が不正確になる場合があります。これにより、これらの操作の一部で予期しない結果が返されることがあります。この状況には注意が必要です。


表領域の変更とメンテナンス

ここでは、表領域の変更とメンテナンスに関する事項について説明します。

この項の内容は次のとおりです。

表領域のサイズの拡大

表領域のサイズを増やすには、表領域のデータファイルのサイズを増やすか、またはデータファイルを追加します。詳細は、「データファイルのサイズ変更」および「データファイルの作成および表領域への追加」を参照してください。

また、データファイルおよびbigfile表領域に対して自動ファイル拡張(AUTOEXTEND)を有効にできます。詳細は、「データファイルの自動拡張機能の使用可能および使用禁止」を参照してください。

ローカル管理表領域の変更

ローカル管理表領域をローカル管理の一時表領域に変更したり、セグメント領域の管理方法を変更することはできません。ローカル管理表領域では、使用可能エクステントを結合する必要はありません。ただし、次のような操作の場合は、ALTER TABLESPACE文をローカル管理表領域に対して使用できます。

bigfile表領域の変更

ALTER TABLESPACE文の次の2つの句は、bigfile表領域使用時におけるデータファイルの透過性をサポートします。

  • RESIZE: RESIZE句を使用すると、bigfile表領域内の単一データファイルを参照せずに、そのデータファイルのサイズを絶対サイズに変更できます。次に例を示します。

    ALTER TABLESPACE bigtbs RESIZE 80G;
    
  • AUTOEXTEND(ADD DATAFILE句の範囲外で使用):

    bigfile表領域では、ADD DATAFILE句の範囲外でAUTOEXTEND句を使用できます。次に例を示します。

    ALTER TABLESPACE bigtbs AUTOEXTEND ON NEXT 20G;
    

bigfile表領域に対してADD DATAFILE句を指定すると、エラーが発生します。

ローカル管理の一時表領域の変更


注意:

ALTER TABLESPACE文にTEMPORARYキーワードを指定して、ローカル管理の永続表領域をローカル管理の一時表領域に変更することはできません。ローカル管理の一時表領域を作成するには、CREATE TEMPORARY TABLESPACE文を使用する必要があります。

次の例に示すとおり、ALTER TABLESPACEを使用すると、一時ファイルを追加したり、オフライン化またはオンライン化できます。

ALTER TABLESPACE lmtemp
   ADD TEMPFILE '/u02/oracle/data/lmtemp02.dbf' SIZE 18M REUSE;

ALTER TABLESPACE lmtemp TEMPFILE OFFLINE;
ALTER TABLESPACE lmtemp TEMPFILE ONLINE;

注意:

一時表領域はオフライン化できません。かわりに、一時ファイルをオフライン化します。V$TEMPFILEビューには、一時ファイルのオンライン化の状態が表示されます。

ALTER DATABASE文を使用すると、一時ファイルを変更できます。

次の文では、一時ファイルをオフラインにしてから、オンラインに戻しています。前述の例の最後の2つのALTER TABLESPACE文と同様に動作します。

ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' OFFLINE;
ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' ONLINE;

次の文では、一時ファイルのサイズが変更されます。

ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' RESIZE 18M;

次の文では、一時ファイルが削除され、オペレーティング・システム・ファイルが削除されます。

ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' DROP
    INCLUDING DATAFILES;

この一時ファイルが属していた表領域は残ります。アラート・ログには、一時ファイルが削除されたことを示すメッセージが書き込まれます。オペレーティング・システム・エラーによってファイルが削除されなかった場合でも文は正常終了しますが、エラーを示すメッセージがアラート・ログに書き込まれます。

ALTER DATABASE文を使用して、既存の一時ファイルの自動拡張を使用可能または使用禁止にしたり、一時ファイル名を変更することもできます。必要な構文は、『Oracle Database SQL言語リファレンス』を参照してください。


注意:

一時ファイルの名前を変更するには、一時ファイルをオフライン化し、オペレーティング・システムのコマンドを使用して、その一時ファイルを名前変更または再配置します。次に、ALTER DATABASE RENAME FILEコマンドを使用してデータベースの制御ファイルを更新します。

ローカル管理の一時表領域の縮小

データベースで大規模なソート操作を実行すると、一時表領域が増大し、ディスク領域の容量が大幅に占有される場合があります。ソート操作が完了しても余分になった領域は解放されず、使用可能マークと再利用可能マークが付けられるのみです。したがって、単一の大規模なソート操作を実行すると、ソート操作の完了後に大量の割当て済一時領域が未使用のままになります。このため、データベースでは、ローカル管理の一時表領域を縮小して未使用領域を解放できます。

一時表領域を縮小する場合は、ALTER TABLESPACE文のSHRINK SPACE句を使用します。一時表領域の特定の一時ファイルを縮小する場合は、ALTER TABLESPACE文のSHRINK TEMPFILE句を使用します。縮小すると、表領域または一時ファイルの他の属性を維持しながら可能なかぎり空き領域を解放します。オプションのKEEP句は、表領域または一時ファイルの最小サイズを定義します。

縮小はオンライン操作です。これは、ユーザー・セッションは必要に応じてソート・エクステントの割当てを継続でき、すでに実行中の問合せは影響を受けないことを意味します。

次の例では、20MBのサイズを確保しながら、ローカル管理の一時表領域のlmtmp1を縮小しています。

ALTER TABLESPACE lmtemp1 SHRINK SPACE KEEP 20M;

次の例では、ローカル管理の一時表領域lmtmp2の一時ファイルlmtemp02.dbfを縮小しています。KEEP句を省略しているため、データベースでは、一時ファイルを最小可能サイズまで縮小することを試みます。

ALTER TABLESPACE lmtemp2 SHRINK TEMPFILE '/u02/oracle/data/lmtemp02.dbf';

表領域の名前変更

永続表領域または一時表領域の名前は、ALTER TABLESPACE文のRENAME TO句を使用して変更できます。たとえば、次の文はusers表領域の名前を変更します。

ALTER TABLESPACE users RENAME TO usersts;

表領域の名前を変更すると、データ・ディクショナリ、制御ファイルおよび(オンライン)データファイル・ヘッダー内でその表領域名への参照がすべて更新されます。表領域IDは変更されないため、たとえば、その表領域がユーザーのデフォルト表領域の場合、DBA_USERSビューには名前が変更された表領域がユーザーのデフォルト表領域として表示されます。

この文の操作では、次の点に注意してください。

  • COMPATIBLEパラメータは、10.0.0以上に設定する必要があります。

  • 名前を変更する表領域がSYSTEM表領域またはSYSAUX表領域の場合、名前は変更されず、エラーが発生します。

  • 表領域内のデータファイルがオフラインの場合、または表領域がオフラインの場合、その表領域の名前は変更されず、エラーが発生します。

  • 表領域が読取り専用の場合、データファイル・ヘッダーは更新されません。これは破損とはみなされませんが、データファイル・ヘッダーの名前が変更されなかったことを示すメッセージがアラート・ログに書き込まれます。データ・ディクショナリと制御ファイルは更新されます。

  • 表領域がデフォルト一時表領域の場合は、データベース・プロパティ表内の対応するエントリが更新され、DATABASE_PROPERTIESビューに新しい名前が表示されます。

  • 表領域がUNDO表領域で、次の条件が満たされると、サーバー・パラメータ・ファイル(SPFILE)の表領域名は新しい表領域名に変更されます。

    • サーバー・パラメータ・ファイルを使用して、インスタンスを起動した場合。

    • 表領域名がインスタンスに対してUNDO_TABLESPACEで指定されている場合。

    従来の初期化パラメータ・ファイル(PFILE)を使用している場合は、初期化パラメータ・ファイルを手動で変更する必要があることを示すメッセージがアラート・ログに書き込まれます。

表領域の削除

表領域とその内容が不要になった場合は、その表領域と内容(表領域に含まれるセグメント)をデータベースから削除できます。表領域を削除するには、DROP TABLESPACEシステム権限が必要です。


注意:

削除された表領域のデータはリカバリできません。そのため、削除しようとしている表領域に含まれているデータはすべて、将来的に必要のないことを確認してください。また、表領域をデータベースから削除する直前および直後に、データベースの完全バックアップを作成する必要があります。誤って表領域を削除した場合や、今後表領域を削除した後にデータベースに問題が発生した場合にデータベースをリカバリできるように、データベースをバックアップすることをお薦めします

表領域を削除すると、対応付けられたデータベースの制御ファイル中のファイル・ポインタのみが削除されます。必要に応じて、削除された表領域を構成していたオペレーティング・システム・ファイル(データファイル)を削除するようにOracle Databaseに指示することもできます。表領域の削除と同時にデータファイルを削除するようにデータベースに指示しない場合は、後でオペレーティング・システムの適切なコマンドを使用して削除する必要があります。

アクティブなセグメントを含む表領域は削除できません。たとえば、表領域内の表が現在使用されている場合、またはコミットされていないトランザクションをロールバックする必要があるUNDOデータが表領域に含まれている場合、その表領域は削除できません。表領域はオンラインでもオフラインでもかまいませんが、削除する前にオフラインにすることをお薦めします。

表領域を削除するには、DROP TABLESPACE文を使用します。、次の文はusers表領域を、その中のセグメントも含めて削除します。

DROP TABLESPACE users INCLUDING CONTENTS;

表領域が空の場合(表、ビューまたは他の構造が格納されていない場合)は、INCLUDING CONTENTS句を指定する必要はありません。CASCADE CONSTRAINTS句を使用すると、表領域内の表の主キーと一意キーを参照する別の表領域の表から、すべての参照整合性制約を削除できます。

表領域の削除と同時に表領域に対応付けられたデータファイルを削除するには、INCLUDING CONTENTS AND DATAFILES句を使用します。次の文は、users表領域とそれに対応付けられているデータファイルを削除します。

DROP TABLESPACE users INCLUDING CONTENTS AND DATAFILES;

アラート・ログには、削除された各データファイルのメッセージが書き込まれます。オペレーティング・システム・エラーによってファイルが削除されなかった場合でもDROP TABLESPACE文は正常終了しますが、エラーを示すメッセージがアラート・ログに書き込まれます。

SYSAUX表領域の管理

SYSAUX表領域は、データベースの作成時に、SYSTEM表領域の補助表領域としてインストールされます。これまで個別に表領域を作成して使用していた一部のデータベースのコンポーネントは、SYSAUX表領域に含まれるようになりました。

SYSAUX表領域が使用不可能になった場合でも、データベースのコア機能は実行可能です。SYSAUX表領域を使用しているデータベース機能はエラーとなるか、機能が制限される可能性があります。

SYSAUX表領域に含まれる占有データの監視

SYSAUX表領域の登録済占有データのリストは、「SYSAUX表領域の概要」を参照してください。これらのコンポーネントはSYSAUX表領域を使用し、SYSAUX表領域を占有する方法がインストール時に提供されます。

SYSAUX表領域の占有データは、V$SYSAUX_OCCUPANTSビューを使用して監視できます。このビューには、SYSAUX表領域の占有データに関する次の情報がリスト表示されます。

  • 占有データの名前

  • 占有データの説明

  • スキーマ名

  • 移動プロシージャ

  • 現行の領域使用

ビュー情報は、占有データ別にメンテナンスされます。


関連項目:

V$SYSAUX_OCCUPANTSビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

SYSAUX表領域内外への占有データの移動

コンポーネントのインストール時には、コンポーネントをSYSAUXに常駐させないように指定することもできます。また、後でコンポーネントを指定の表領域に再配置する必要が生じた場合、そのコンポーネントについては、V$SYSAUX_OCCUPANTSビューで指定した移動プロシージャを使用して移動を実行できます。

移動プロシージャを使用すると、コンポーネントを他の表領域からSYSAUX表領域に移動することもできます。

SYSAUX表領域のサイズの制御

SYSAUX表領域は、いくつかのデータベース・コンポーネントによって占有され、その合計サイズはそれらのコンポーネントが消費する領域によって決定します。同様に、コンポーネントが消費する領域は、使用される機能およびデータベース・ワークロードの性質によって決定します。

SYSAUX表領域を最も大きく占有するのは自動ワークロード・リポジトリ(AWR)です。AWRが消費する領域は、特定の時間におけるシステム内でのアクティブなセッションの数、スナップショット間隔、履歴データ保存期間など、いくつかの要因によって決定します。同時にアクティブなセッションが平均10ある標準的なシステムでは、AWRデータ用として約200から300MBの領域が必要になる場合があります。

次の表に、システム構成と予測される負荷に基づいてSYSAUX表領域のサイズを設定するためのガイドラインを示します。

パラメータ/推奨設定 小型 中型 大型
CPU数 2 8 32
同時実行セッションの数 10 20 100
ユーザー・オブジェクト数: 表および索引 500 5,000 50,000
デフォルト構成で安定した状態での予測SYSAUXのサイズ 500MB 2GB 5GB

AWRのサイズを制御するには、スナップショット間隔と履歴データ保存期間を変更します。AWRのスナップショット間隔と保存期間の管理の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

SYSAUX表領域のもう1つの主要な占有データは、埋込みのOracle Enterprise Managerリポジトリです。このリポジトリはOracle Enterprise Manager Database Controlで使用され、そのメタデータが格納されます。このリポジトリのサイズは、データベース・アクティビティ、およびリポジトリに格納された構成関連情報によって異なります。

他のデータベース・コンポーネントが消費するSYSAUX表領域の領域サイズは、関連する機能(Oracle TextやOracle Streamsなど)を使用中の場合のみ大きくなります。このような機能を使用していない場合、これらのコンポーネントはSYSAUX表領域のサイズに大きく影響しません。

ローカル管理表領域の問題の診断と修復

Oracle Databaseには、DBMS_SPACE_ADMINパッケージが組み込まれています。このパッケージは、ローカル管理表領域の問題の診断と修復に使用するサポートの集まりです。

DBMS_SPACE_ADMINパッケージのプロシージャ

次の表に、DBMS_SPACE_ADMINパッケージに含まれるプロシージャを示します。各プロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

プロシージャ 説明
ASSM_SEGMENT_VERIFY 自動セグメント領域管理が使用可能な表領域内に作成されたセグメントの整合性を検証します。sid_ora_process_id.trcという名前のダンプ・ファイルを、V$DIAG_INFOビューのDiag Traceエントリに対応する位置に出力します。

手動セグメント領域管理が指定されている表領域には、SEGMENT_VERIFYを使用します。

ASSM_TABLESPACE_VERIFY 自動セグメント領域管理が使用可能な表領域の整合性を検証します。sid_ora_process_id.trcという名前のダンプ・ファイルを、V$DIAG_INFOビューのDiag Traceエントリに対応する位置に出力します。

手動セグメント領域管理が指定されている表領域には、TABLESPACE_VERIFYを使用します。

DROP_EMPTY_SEGMENTS 空の表か、または表のパーティションと依存オブジェクトからセグメントを削除します。
MATERIALIZE_DEFERRED_SEGMENTS セグメント作成の遅延およびその依存オブジェクトがある表および表のパーティションのセグメントをマテリアライズします。
SEGMENT_CORRUPT セグメントを破損または有効としてマークし、適切なエラーのリカバリを可能にします。
SEGMENT_DROP_CORRUPT 現在破損としてマークされているセグメントを削除します(領域の再生なし)。
SEGMENT_DUMP 特定のセグメントのセグメント・ヘッダーおよびビットマップ・ブロックを、V$DIAG_INFOビューのDiag Traceエントリに対応する位置にあるsid_ora_process_id.trcという名前のダンプ・ファイルにダンプします。オプションで、セグメント・ヘッダーおよびビットマップ・ブロック・サマリーを含む簡略化したダンプ(各ブロックの空き領域率が含まれていない)を選択できます。
SEGMENT_VERIFY セグメントのエクステント・マップの一貫性を検証します。
TABLESPACE_FIX_BITMAPS 適切なDBA範囲(エクステント)にビットマップ内で使用可能マークまたは使用済マークを付けます。
TABLESPACE_FIX_SEGMENT_STATES 移行が停止した表領域内のセグメントの状態を修正します。
TABLESPACE_MIGRATE_FROM_LOCAL ローカル管理表領域を、ディクショナリ管理表領域に移行します。
TABLESPACE_MIGRATE_TO_LOCAL ディクショナリ管理表領域をローカル管理表領域に移行します。
TABLESPACE_REBUILD_BITMAPS 適切なビットマップを再作成します。
TABLESPACE_REBUILD_QUOTAS 特定の表領域の割当て制限を再作成します。
TABLESPACE_RELOCATE_BITMAPS ビットマップを指定の保存先に再配置します。
TABLESPACE_VERIFY 表領域内のセグメントについて、ビットマップとエクステント・マップが同期していることを検証します。

次の使用例では、DBMS_SPACE_ADMINパッケージを使用して問題を診断し、解決できる代表的な状況について説明します。


注意:

前述の一部のプロシージャは、正しく使用しないとデータが消失してリカバリ不能になる場合があります。これらのプロシージャに不明な点がある場合は、Oracleサポート・サービスと共同で作業を行ってください。


関連項目:


使用例1: 割当て済ブロックが空き(オーバーラップなし)とマークされているときのビットマップの修復

TABLESPACE_VERIFYプロシージャの使用時に、ビットマップ内で「空き」マークが付いているブロックがセグメントに割り当てられても、セグメント間のオーバーラップがレポートされていないことが検出された場合。

この使用例では、次のタスクを実行してください。

  1. SEGMENT_DUMPプロシージャをコールして、管理者がそのセグメントに割り当てた範囲をダンプします。

  2. 範囲ごとに、TABLESPACE_EXTENT_MAKE_USEDオプションを指定してTABLESPACE_FIX_BITMAPSプロシージャをコールし、領域に使用済のマークを付けます。

  3. TABLESPACE_REBUILD_QUOTASをコールして割当て制限を再作成します。

使用例2: 破損したセグメントの削除

ビットマップに「空き」マークが付いたセグメント・ブロックがあるため、セグメントを削除できない場合。このセグメントには、自動的に「破損」マークが付けられます。

この使用例では、次のタスクを実行してください。

  1. SEGMENT_VERIFY_EXTENTS_GLOBALオプションを指定してSEGMENT_VERIFYプロシージャをコールします。オーバーラップがレポートされない場合は、手順2から5までを実行します。

  2. SEGMENT_DUMPプロシージャをコールして、そのセグメントに割り当てられたデータ・ブロック・アドレス範囲をダンプします。

  3. 範囲ごとに、TABLESPACE_EXTENT_MAKE_FREEオプションを指定してTABLESPACE_FIX_BITMAPSプロシージャをコールし、領域に「空き」のマークを付けます。

  4. SEGMENT_DROP_CORRUPTをコールしてSEG$エントリを削除します。

  5. TABLESPACE_REBUILD_QUOTASをコールして割当て制限を再作成します。

使用例3: オーバーラップがレポートされたビットマップの修復

TABLESPACE_VERIFYプロシージャで、いくつかオーバーラップがレポートされる場合。前の内部エラーに基づいて、一部の実データを削除する必要があります。

この場合、表t1などの削除するオブジェクトを選択してから、次のタスクを実行します。

  1. t1がオーバーラップしているすべてのオブジェクトのリストを作成します。

  2. t1を削除します。必要に応じて、SEGMENT_DROP_CORRUPTプロシージャをコールしてフォローアップします。

  3. t1がオーバーラップしていたすべてのオブジェクトに対して、SEGMENT_VERIFYプロシージャをコールします。必要に応じて、TABLESPACE_FIX_BITMAPSプロシージャをコールして該当するビットマップに使用済を示すマークを付けます。

  4. TABLESPACE_VERIFYプロシージャを再度実行し、問題が解決したかどうかを検証します。

使用例4: ビットマップ・ブロックのメディア破損の訂正

ビットマップ・ブロックの集合にメディア破損がある場合。

この使用例では、次のタスクを実行してください。

  1. すべてのビットマップ・ブロック、または1つしか破損していない場合はそのブロックに対して、TABLESPACE_REBUILD_BITMAPSプロシージャをコールします。

  2. TABLESPACE_REBUILD_QUOTASをコールして割当て制限を再作成します。

  3. TABLESPACE_VERIFYプロシージャをコールして、ビットマップの整合性を検証します。

使用例5: ディクショナリ管理表領域からローカル管理表領域への移行

TABLESPACE_MIGRATE_TO_LOCALプロシージャを使用して、ディクショナリ管理表領域をローカル管理表領域に移行する場合。この操作はオンラインで実行されますが、領域管理操作は移行が完了するまでブロックされます。このため、移行処理中にデータの読取りや変更はできますが、大量のデータをロードする場合は追加のエクステントの割当てが必要になるため、操作がブロックされる場合があります。

データベースのブロック・サイズは2KB、表領域tbs_1の既存のエクステント・サイズは10、50および10,000ブロック(それぞれ使用済、使用済および使用可能)とします。MINIMUM EXTENT値は20KB(10ブロック)です。システムにビットマップの割当て単位を選択させることができます。MINIMUM EXTENTを超えない範囲の最大公分母であることから、10ブロックの値が選択されます。

tbs_1をローカル管理表領域に変換する文は、次のとおりです。

EXEC DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL ('tbs_1');

割当て単位のサイズを指定する場合は、必ずシステムによって計算される単位サイズの因数にします。

ローカル管理表領域へのSYSTEM表領域の移行

DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCALプロシージャを使用して、SYSTEM表領域をディクショナリ管理からローカル管理に移行します。

移行を実行する前に、次の条件を満たす必要があります。

  • データベースのデフォルト一時表領域がSYSTEMではないこと。

  • ディクショナリ管理表領域にロールバック・セグメントがないこと。

  • ローカル管理表領域に1つ以上のオンライン・ロールバック・セグメントがあるか、自動UNDO管理を使用している場合は、UNDO表領域がオンラインになっていること。

  • UNDO領域を含む表領域(つまり、ロールバック・セグメントを含む表領域またはUNDO表領域)を除き、すべての表領域が読取り専用モードになっていること。

  • SYSAUX表領域がオフラインであること。

  • システムが制限モードになっていること。

  • データベースのコールド・バックアップがあること。

コールド・バックアップを除き、前述のすべての条件はTABLESPACE_MIGRATE_TO_LOCALプロシージャにより施行されます。

次の文は、この移行を実行します。

SQL> EXECUTE DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL('SYSTEM');

注意:

SYSTEM表領域をローカル管理に移行すると、データベース内のディクショナリ管理表領域を読取り/書込み用にできなくなります。ディクショナリ管理表領域を読取り/書込みモードで使用する必要がある場合は、これらの表領域をローカル管理に移行してから、SYSTEM表領域を移行することをお薦めします。

データベース間での表領域のトランスポート

ここでは、データベース間で表領域をトランスポートする方法について説明します。この項の内容は、次のとおりです。


注意:

トランスポータブル表領域セットを生成するには、Oracle Databaseリリース8i以上のEnterprise Editionを使用する必要があります。ただし、Oracle Database 8i以上であれば、どのエディションでもトランスポータブル表領域セットを同じプラットフォーム上のOracle Databaseにインポートできます。トランスポータブル表領域セットを別のプラットフォーム上のOracle Databaseにインポートするには、両方のデータベースの互換性が10.0.0以上に設定されている必要があります。リリース・レベル全体にわたる表領域のトランスポートでのデータベース互換性の詳細は、「トランスポータブル表領域の互換性に関する注意事項」を参照してください。

トランスポータブル表領域の概要

トランスポータブル表領域機能を使用すると、表領域セットを別のOracle Databaseにコピーできます。


注意:

この方法で表領域をトランスポートする場合は、トランスポート処理が完了するまで、トランスポート対象の表領域を読取り専用モードにする必要があります。これが望ましくない場合は、トランスポータブル表領域をバックアップ機能から使用できます。詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

トランスポートする表領域は、ディクショナリ管理表領域またはローカル管理表領域のいずれかになります。Oracle9iから、トランスポートする表領域を移動先データベースの標準ブロック・サイズと同じブロック・サイズにする必要がなくなりました。

トランスポータブル表領域を使用したデータの移動は、同じデータのエクスポート/インポートまたはアンロード/ロードを使用するより高速で実行されます。これは、実際のすべてのデータを含むデータファイルが単に移動先にコピーされるためで、表領域オブジェクトのメタデータのみを新規データベースにトランスポートするには、データ・ポンプを使用します。


注意:

Oracle Database 11g リリース1からは、トランスポータブル表領域に対してデータ・ポンプを使用する必要があります。XMLTypeデータをデータベース・バージョン10g リリース2以前に下位移行できるのは、元のインポート・ユーティリティ(IMP)とエクスポート・ユーティリティ(EXP)を使用できる環境がある場合のみです。これらのユーティリティの詳細は『Oracle Databaseユーティリティ』を、XMLTypesの詳細は『Oracle XML DB開発者ガイド』を参照してください。

トランスポータブル表領域機能は、次のような場合に役立ちます。

  • データ・ウェアハウス表のパーティションをエクスポートおよびインポートする場合

  • 構造化データをCDで公開する場合

  • 読取り専用バージョンの複数の表領域を複数のデータベースにコピーする場合

  • 履歴データをアーカイブする場合

  • 表領域のPoint-in-Timeリカバリ(TSPITR)を実行する場合

これらの使用例の説明は、「トランスポータブル表領域の使用: 使用例」を参照してください。

表領域をトランスポートする方法は、次の2通りあります。

  • 手動で、この項で説明されている手順を実行します。これには、SQL*Plus、RMANおよびData Pumpへのコマンドの発行が含まれます。

  • Enterprise Managerの「表領域のトランスポート」ウィザードの使用。

    「表領域のトランスポート」ウィザードを実行する手順は、次のとおりです。

    1. EXP_FULL_DATABASEロールを持つユーザーでEnterprise Managerにログインします。

    2. データベース・ホームページで、「データ移動」をクリックして「データ移動」ページを表示します。

    3. 「データベース・ファイルの移動」で、「表領域のトランスポート」をクリックします。


関連項目:

データ・ウェアハウス環境でトランスポータブル表領域を使用する方法の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

プラットフォーム間での表領域のトランスポート

Oracle Databaseリリース10gから、プラットフォーム間で表領域のトランスポートが可能になりました。この機能を使用すると、次のことが可能になります。

  • データベースをプラットフォーム間で移行できます。

  • コンテンツ・プロバイダは、簡単にかつ効率的に構造化データを公開し、別のプラットフォームでOracle Databaseを実行している顧客に配布できます。

  • データ・ウェアハウス環境からデータ・マート(多くの場合、小規模プラットフォームで実行されている)へのデータの配布を簡素化できます。

  • 異なるオペレーティング・システムまたはプラットフォーム上のOracle Databaseインストール間で読取り専用表領域を共有できます。この場合、次の各項で説明するように、それらのプラットフォームおよびendiannessが同じプラットフォームからストレージ・システムにアクセスできることが前提となります。

多くのプラットフォーム(すべてではありません)では、クロス・プラットフォームでの表領域のトランスポートがサポートされます。V$TRANSPORTABLE_PLATFORMビューを問い合せると、サポートされているプラットフォームを参照して、各プラットフォームのendian形式(バイトの並び順)を確認できます。次の問合せを実行すると、プラットフォーム間での表領域のトランスポートがサポートされているプラットフォームが表示されます。

SQL> COLUMN PLATFORM_NAME FORMAT A36
SQL> SELECT * FROM V$TRANSPORTABLE_PLATFORM ORDER BY PLATFORM_NAME;

PLATFORM_ID PLATFORM_NAME                        ENDIAN_FORMAT
----------- ------------------------------------ --------------
          6 AIX-Based Systems (64-bit)           Big
         16 Apple Mac OS                         Big
         19 HP IA Open VMS                       Little
         15 HP Open VMS                          Little
          5 HP Tru64 UNIX                        Little
          3 HP-UX (64-bit)                       Big
          4 HP-UX IA (64-bit)                    Big
         18 IBM Power Based Linux                Big
          9 IBM zSeries Based Linux              Big
         10 Linux IA (32-bit)                    Little
         11 Linux IA (64-bit)                    Little
         13 Linux x86 64-bit                     Little
          7 Microsoft Windows IA (32-bit)        Little
          8 Microsoft Windows IA (64-bit)        Little
         12 Microsoft Windows x86 64-bit         Little
         17 Solaris Operating System (x86)       Little
         20 Solaris Operating System (x86-64)    Little
          1 Solaris[tm] OE (32-bit)              Big
          2 Solaris[tm] OE (64-bit)              Big
 
19 rows selected.

ソースおよび移動先のプラットフォームでendiannessが異なる場合は、ソースまたは移動先のプラットフォームで、トランスポートする表領域を移行先の形式に変換する手順を追加する必要があります。両方のプラットフォームでendiannessが同じ場合は変換する必要はなく、表領域は同じプラットフォーム上にある場合と同様にトランスポートできます。

表領域を別のプラットフォームにトランスポートする前に、その表領域が属するプラットフォームをデータファイル・ヘッダーで識別する必要があります。互換性が10.0.0以上に設定されているOracle Databaseでは、データファイルの読取りまたは書込みを1回以上実行することによってプラットフォームを識別できます。

トランスポータブル表領域の使用に関する制限事項

表領域をトランスポートする場合は、次の制限事項に注意してください。

  • トランスポート元とトランスポート先のデータベースで、互換性のあるデータベース・キャラクタ・セットを使用している必要があります。つまり、次のいずれかが当てはまる必要があります。

    • ソース・データベースとターゲット・データベースのデータベース・キャラクタ・セットが同じです。

    • ソース・データベース・キャラクタ・セットがターゲット・データベース・キャラクタ・セットの厳格な(バイナリ)サブセットであり、かつ、次の3つの条件が満たされています。

      • トランスポート元のデータベースが、バージョン10.1.0.3以降です。

      • トランスポート対象の表領域に、文字長セマンティクスが使用される表の列が含まれていないか、またはソースとターゲットの両方のデータベースにおいて、データベース・キャラクタ・セットの最大文字幅が同じです。

      • トランスポート対象の表領域にはCLOBデータ型の列が含まれていないか、またはトランスポート元とトランスポート先のデータベースにおいて、データベース・キャラクタ・セットが両方ともシングルバイトであるか、両方ともマルチバイトです。

    • ソース・データベース・キャラクタ・セットがターゲット・データベース・キャラクタ・セットの厳格な(バイナリ)サブセットであり、かつ、次の2つの条件が満たされています。

      • トランスポート元のデータベースが、バージョン10.1.0.3以前です。

      • ソース・データベースとターゲット・データベース・キャラクタ・セットにおいて、最大文字幅が同じです。

  • トランスポート元とトランスポート先のデータベースで、互換性のある各国語キャラクタ・セットを使用している必要があります。具体的には、次の内容のいずれかを満たしている必要があります。

    • ソースとターゲットのデータベースの各国語キャラクタ・セットが同じです。

    • トランスポート元のデータベースはバージョン10.1.0.3以降であり、トランスポート対象の表領域にはNCHARNVARCHAR2NCLOBのデータ型の列が含まれていません。


    注意:

    Oracle Databaseによって認識されるキャラクタ・セット間のサブセットとスーパーセットの関係は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

  • トランスポート先のデータベースに同じ名前の表領域が含まれている場合は、表領域をトランスポートできません。ただし、トランスポート操作を実行する前に、トランスポート対象の表領域またはトランスポート先の表領域のいずれかの名前を変更できます。

  • 基礎となるオブジェクトを持つオブジェクト(マテリアライズド・ビューなど)またはオブジェクトを含むオブジェクト(パーティション表など)は、それらのオブジェクトがすべて表領域セットに含まれている場合のみトランスポートできます。

  • 暗号化された表領域には、次の制限事項があります。

    • マスター暗号化キーがOracleウォレットではなく、ハードウェア・セキュリティ・モジュール(HSM)デバイスに格納されている場合を除き、暗号化された表領域をトランスポートする前に、Oracleウォレットを宛先データベースに手動でコピーする必要があります。ウォレットをコピーすると、ウォレットのパスワードは宛先データベースでも同じになります。ただし、宛先データベースでパスワードを変更して、各データベースに独自のウォレット・パスワードを設定することをお薦めします。HSMデバイス、Oracleウォレットの位置の決定、およびOracle Wallet Managerを使用したウォレット・パスワードの変更の詳細は、『Oracle Database Advanced Security管理者ガイド』を参照してください。

    • 透過的データ暗号化用のOracleウォレットがすでに存在するデータベースには、暗号化された表領域をトランスポートできません。この場合は、Oracle Data Pumpを使用して表領域のスキーマ・オブジェクトをエクスポートし、宛先データベースにインポートする必要があります。必要に応じて、Oracle Data Pump機能を利用してデータのエクスポートおよびインポート時にデータの暗号化を保持できます。詳細は、『Oracle Databaseユーティリティ』を参照してください。

    • 暗号化された表領域は、endiannessが異なるプラットフォームにはトランスポートできません。

  • ブロックの暗号化を使用していない表領域であっても、暗号化列のある表が含まれている場合はトランスポートできません。Oracle Data Pumpを使用して、表領域のスキーマ・オブジェクトをエクスポートおよびインポートする必要があります。Oracle Data Pump機能を利用すると、データのエクスポートおよびインポート時にデータの暗号化を保持できます。詳細は、『Oracle Databaseユーティリティ』を参照してください。

  • Oracle Database 10g リリース2からは、XMLTypeを含む表領域をトランスポートできます。Oracle Database 11g リリース1からは、XMLTypeを含む表領域の表領域メタデータをエクスポートおよびインポートする場合は、データ・ポンプを使用する必要があります。

    次の問合せでは、XMLTypeを含む表領域のリストが返されます。

    select distinct p.tablespace_name from dba_tablespaces p, 
      dba_xml_tables x, dba_users u, all_all_tables t where
      t.table_name=x.table_name and t.tablespace_name=p.tablespace_name
      and x.owner=u.username
    

    XMLTypeの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

    XMLTypeを含む表領域のトランスポートには、次の制限事項があります。

    • 移動先データベースにXML DBがインストールされている必要があります。

    • XMLType表が参照するスキーマをXML DB標準スキーマにすることはできません。

    • XMLType表が参照するスキーマには循環依存性を設定できません。

    • 行レベルでセキュリティが設定されたXMLType表は、エクスポートまたはインポートできないためサポートされていません。

    • トランスポートされたXMLType表のスキーマが移動先データベース内に存在しない場合は、スキーマがインポートおよび登録されます。移動先データベースにスキーマが存在する場合は、ignore=yオプションを設定しないと、エラーが返されます。

    • XMLType表が別のスキーマに依存するスキーマを使用している場合、依存しているスキーマはエクスポートされません。そのスキーマが移動先データベースにすでに存在する場合のみ、インポートが成功します。

他の制限事項は次のとおりです。

SYSTEM表領域オブジェクト: SYSTEM表領域またはユーザーSYSが所有するオブジェクトはトランスポートできません。これに該当するオブジェクトは、PL/SQL、Javaクラス、コールアウト、ビュー、シノニム、ユーザー、権限、ディメンション、ディレクトリ、順序などです。

OPAQUE型: 解釈がアプリケーション固有で、データベースに対して不透明なタイプ(RAWBFILEなど)は、トランスポートできますが、クロス・プラットフォームのトランスポート操作では変換されません。このタイプの実際の構造はアプリケーションのみが認識するため、このタイプが新規プラットフォームに移動した後、アプリケーションではendiannessの問題に対処する必要があります。OPAQUE型を使用するタイプとオブジェクトも、直接的または間接的にこの制限の影響を受けます。

浮動小数点数: BINARY_FLOAT型およびBINARY_DOUBLE型は、データ・ポンプを使用してトランスポートできます。

トランスポータブル表領域の互換性に関する注意事項

Oracle Databaseでは、トランスポータブル表領域セットを作成するときに、移動先データベースで実行する必要のある最も低い互換性レベルが計算されます。このレベルのことを、トランスポータブル・セットの互換性レベルと呼びます。Oracle Database 11gからは、移動先データベースが同じプラットフォーム上にあるか別のプラットフォーム上にあるかに関係なく、表領域は同等以上の互換性が設定されたデータベースに常にトランスポートできます。トランスポータブル・セットの互換性レベルが移動先データベースの互換性レベルよりも高い場合は、エラーが通知されます。

次の表に、様々な使用例でのソース表領域と移動先表領域の互換性の最低要件を示します。ソース・データベースと移動先データベースの互換性設定は同一である必要はありません。

表14-1 互換性の最低要件

トランスポートの使用例 互換性の最低設定
ソース・データベース 移動先データベース

同じプラットフォーム上のデータベース間

8.0

8.0

データベース・ブロック・サイズが移動先データベースと異なる表領域

9.0

9.0

異なるプラットフォーム上のデータベース間

10.0

10.0


データベース間で表領域をトランスポートする手順および例

次のタスクのリストでは、表領域のトランスポート処理の概要を示します。各タスクの詳細は、後続の例で示します。


注意:

この方法でトランスポータブル表領域を生成する場合は、表領域を一時的に読取り専用にする必要があります。この方法が望ましくない場合は、代替方法として、トランスポータブル表領域をバックアップ機能から使用できます。詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

  1. V$TRANSPORTABLE_PLATFORMビューを問い合せて両方のプラットフォームのendian形式をチェック(クロス・プラットフォームでのトランスポートの場合)

    同じプラットフォームに表領域セットをトランスポートしている場合は、このタスクを無視してください。

  2. 自己完結型の表領域セットを選択します。

  3. ソース・データベースで、表領域セットを読取り専用モードにしてから、トランスポータブル表領域セットを生成します。

    トランスポータブル表領域セット(トランスポータブル・セット)は、トランスポートされる表領域セットのデータファイルと、そのセットの構造情報(メタデータ)を含むエクスポート・ファイルから構成されます。データ・ポンプを使用してエクスポートを実行します。

    endiannessがソース・プラットフォームとは異なるプラットフォームに表領域セットをトランスポートする場合は、表領域セットを移動先プラットフォームのendiannessに変換する必要があります。ソース側での変換はこの手順にあるプロシージャで実行でき、移動先側での変換はタスク4の一部として実行できます。

  4. 表領域セットをトランスポートします。

    データファイルとエクスポート・ファイルを移動先データベースへアクセス可能な場所にコピーします。

    endiannessがソース・プラットフォームとは異なるプラットフォームに表領域セットをトランスポートし、ソース側で表領域セットを移動先プラットフォームのendiannessに変換していない場合は、ここで移動先側での変換を実行します。

  5. (オプション)表領域を読取り/書込みモードに戻します。

  6. 移動先データベースで、表領域セットをインポートします。

    データ・ポンプ・ユーティリティを起動して、表領域セットのメタデータをインポートします。

表領域をトランスポートするタスクについては、次のデータファイルと表領域を想定した例で詳細に説明します。

表領域 データファイル
sales_1 /u01/app/oracle/oradata/salesdb/sales_101.dbf
sales_2 /u01/app/oracle/oradata/salesdb/sales_201.dbf

タスク1: プラットフォームがサポートされているかどうかの確認とendiannessの判別

このタスクは、ソース・プラットフォームとは異なるプラットフォームに表領域セットをトランスポートする場合にのみ実行する必要があります。

ソース・プラットフォームとは異なるプラットフォームに表領域セットをトランスポートする場合は、ソースおよび移動先のプラットフォームの両方でプラットフォーム間の表領域トランスポートがサポートされているかどうかを確認し、ぞれぞれのプラットフォームのendiannessを判別します。両方のプラットフォームのendiannessが同じ場合、変換は必要ありません。同じでない場合は、ソース・データベースまたは移動先データベースのどちらかで表領域を変換する必要があります。

sales_1およびsales_2を異なるプラットフォームにトランスポートする場合は、各プラットフォームで次の問合せを実行できます。問合せで行が返される場合、そのプラットフォームではプラットフォーム間の表領域トランスポートがサポートされています。

SELECT d.PLATFORM_NAME, ENDIAN_FORMAT
     FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d
     WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;

ソース・プラットフォームでの問合せの結果は次のとおりです。

PLATFORM_NAME                      ENDIAN_FORMAT
---------------------------------- --------------
Solaris[tm] OE (32-bit)            Big

移動先プラットフォームからの結果は、次のとおりです。

PLATFORM_NAME                      ENDIAN_FORMAT
---------------------------------- --------------
Microsoft Windows IA (32-bit)      Little

この問合せ結果によって、endian形式が異なっているため、表領域セットをトランスポートする場合に変換が必要であることがわかります。

タスク2: 自己完結型の表領域セットの選択

トランスポータブル・セット内のオブジェクトとセット外のオブジェクトとの間に、論理的または物理的な依存関係が存在することがあります。 トランスポートできるのは、自己完結した表領域セットのみです。この場合、自己完結とは、表領域セット内から外部への参照がないことを意味します。次に、自己完結した表領域に違反する例を示します。

  • 表領域セット内に、そのセットに含まれない表に関する索引が含まれている場合。


    注意:

    表に対応する索引が表領域セットの外部にある場合は、違反になりません。

  • パーティション表の一部が表領域セットに含まれている場合。

    コピーする表領域セットは、パーティション化した表のすべてのパーティションが含まれている状態、またはまったく含まれていない状態にしてください。パーティション表のサブセットをトランスポートするには、パーティションを表に変換する必要があります。

    パーティションの変換の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

  • 参照整合性制約がセット境界を越えて別の表を指している場合。

    表領域セットをトランスポートするときには、参照整合性制約を含めるかどうかを選択できます。ただし、そうすることによって、表領域セットの自己完結性に影響を与える場合があります。制約をトランスポートしなければ、その制約はポインタとはみなされません。

  • 表領域セット内の表に、そのセットに含まれないLOBを指すLOB列が含まれている場合

  • ユーザーAが登録されたXML DBスキーマ(*.xsd)にユーザーBが登録されたグローバル・スキーマをインポートする際、ユーザーAのデフォルト表領域が表領域A、ユーザーBのデフォルト表領域が表領域Bで、表領域Aのみが表領域セットに含まれている場合。

表領域セットが自己完結型かどうかを判断するには、オラクル社が提供するパッケージDBMS_TTSTRANSPORT_SET_CHECKプロシージャをコールします。このプロシージャを実行するには、EXECUTE_CATALOG_ROLEロール(最初はSYSに付与されている)を付与されている必要があります。

DBMS_TTSパッケージをコールするときは、自己完結かどうかを調べるトランスポータブル・セットの表領域のリストを指定します。制約を含むかどうかを指定することもできます。厳密または完全な完結であるかを調べる場合は、TTS_FULL_CHECKパラメータをTRUEに設定する必要があります。

厳密または完全な完結のチェックは、トランスポータブル・セットから外部への参照のみではなく、外部からトランスポータブル・セットへの参照も捕捉する必要がある場合に実行します。依存オブジェクトがトランスポータブル・セットに完全に含まれているか、またはトランスポータブル・セットの外部にのみ存在することが必要な場合は、表領域のPoint-in-Timeリカバリ(TSPITR)を実行します。

たとえば、表tを含んでいるが、その索引iを含んでいない表領域に対してTSPITRを実行すると、トランスポート後に索引とデータの整合性がなくなるため、これは違反になります。完全完結チェックを実行することにより、トランスポータブル・セットからの依存関係またはトランスポータブル・セットへの依存関係がないことが保証されます。詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』のTSPITRの例を参照してください。


注意:

デフォルトでは、トランスポータブル表領域は、完全完結しているかどうかではなく自己完結しているかどうかがチェックされます。

次の文を使用して、表領域sales_1およびsales_2が自己完結しているかどうかを、参照整合性制約を考慮して(TRUEを指定して)調べます。

EXECUTE DBMS_TTS.TRANSPORT_SET_CHECK('sales_1,sales_2', TRUE);

このPL/SQLパッケージを起動した後に、TRANSPORT_SET_VIOLATIONSビューからすべての違反を選択して表示できます。表領域セットが自己完結している場合、このビューは空になります。次の例は、表領域セットの境界を超えている外部キー定数dept_fkと、表領域セットに部分的に含まれているパーティション表jim.salesという、2つの違反がある場合を示しています。

SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS;

VIOLATIONS
---------------------------------------------------------------------------
Constraint DEPT_FK between table JIM.EMP in tablespace SALES_1 and table
JIM.DEPT in tablespace OTHER
Partitioned table JIM.SALES is partially contained in the transportable set

これらの違反は、sales_1およびsales_2をトランスポータブルにする前に解決する必要があります。次のタスクで説明するように、整合性制約違反を回避するための選択肢の1つとして、整合性制約をエクスポートしない方法があります。


関連項目:

  • DBMS_TTSパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

  • TSPITRにおけるDBMS_TTSパッケージの使用の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。


タスク3: トランスポータブル表領域セットの生成

トランスポートする表領域セットが自己完結型であることを確認した後に、次の手順を実行してトランスポータブル表領域セットを生成します。

  1. SQL*Plusを起動し、管理者として、あるいはALTER TABLESPACEまたはMANAGE TABLESPACEシステム権限を持つユーザーとしてデータベースに接続します。

    手順は、「SQL*Plusを使用したデータベースへの接続」を参照してください。

  2. セット内のすべての表領域を読取り専用にします。

    SQL> ALTER TABLESPACE sales_1 READ ONLY;
    
    Tablespace altered.
    
    SQL> ALTER TABLESPACE sales_2 READ ONLY;
    
    Tablespace altered.
    
  3. ユーザーsystemとしてデータ・ポンプ・エクスポート・ユーティリティを起動し、トランスポータブル・セット内の表領域を指定します。

    SQL> HOST
    
    $ expdp system dumpfile=expdat.dmp directory=data_pump_dir 
            transport_tablespaces=sales_1,sales_2 logfile=tts_export.log
    
    Password: password
    

    エクスポート操作のモードを決定するTRANSPORT_TABLESPACESは、常に指定する必要があります。この例では、次のとおりです。

    • DUMPFILEパラメータでは、作成する構造情報エクスポート・ファイルの名前をexpdat.dmpと指定します。

    • DIRECTORYパラメータでは、オペレーティング・システムまたはOracle Automatic Storage Managementのダンプ・ファイルの場所を示すディレクトリ・オブジェクトを指定します。DIRECTORYオブジェクトはデータ・ポンプを起動する前に作成し、ディレクトリに対するREADおよびWRITEオブジェクト権限をPUBLICに付与する必要があります。CREATE DIRECTORYコマンドの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。


      注意:

      Oracle Databaseをインストールすると、ディレクトリ・オブジェクトDATA_PUMP_DIRが自動的に作成されます。このディレクトリへの読取りおよび書込みアクセス権がDBAロールに(したがって、ユーザーSYSおよびSYSTEMに)自動的に付与されます。DIRECTORYパラメータを省略した場合、DATA_PUMP_DIRがデフォルトのディレクトリとして使用されます。

    • LOGFILEパラメータでは、エクスポート・ユーティリティによって書き込まれるログ・ファイルのファイル名を指定します。ログ・ファイルの書込み先はダンプ・ファイルと同じディレクトリです。

    • コマンドラインでsystemアカウントのパスワードを指定しないと、EXPDPによってパスワードの入力を求めるプロンプトが表示されます。

    • トリガーと索引は、デフォルトでエクスポート操作に含まれています。

    表領域のトランスポート操作を厳密完結チェック付きで実行するには、次の例に示すように、TRANSPORT_FULL_CHECKパラメータを使用します。

    expdp system dumpfile=expdat.dmp directory=data_pump_dir
          transport_tablespaces=sales_1,sales_2 transport_full_check=y
          logfile=tts_export.log
    

    この場合は、データ・ポンプ・エクスポート・ユーティリティによって、トランスポータブル・セット内のオブジェクトとトランスポータブル・セット外のオブジェクトとの間に依存性がないことを検証します。トランスポートする表領域セットが自己完結していない場合、エクスポートは失敗し、トランスポータブル・セットが自己完結していないことがわかります。その後は、タスク2に戻ってすべての違反を解決する必要があります。


    注意:

    データ・ポンプ・ユーティリティを使用してエクスポートするのは、表領域のデータ・ディクショナリの構造情報(メタデータ)のみです。実際のデータはアンロードされないため、この操作は大規模な表領域セットの場合でも比較的早く完了します。

  4. ログ・ファイルでエラーを確認し、移動先データベースにトランスポートする必要があるダンプ・ファイルとデータファイルを書き留めます。EXPDPでは、次のようなメッセージに、これらのファイルの名前とパスが出力されます。

    ******************************************************************************
    Dump file set for SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 is:
      /u01/app/oracle/admin/salesdb/dpdump/expdat.dmp
    ******************************************************************************
    Datafiles required for transportable tablespace SALES_1:
      /u01/app/oracle/oradata/salesdb/sales_101.dbf
    Datafiles required for transportable tablespace SALES_2:
      /u01/app/oracle/oradata/salesdb/sales_201.dbf
    
  5. 完了した後、終了してSQL*Plusに戻ります。

    $ EXIT
    

    関連項目:

    データ・ポンプ・ユーティリティの使用方法は、『Oracle Databaseユーティリティ』を参照してください。

sales_1およびsales_2表領域を異なるプラットフォームにトランスポートする場合に、各プラットフォームのendiannessが異なるため、表領域セットをトランスポートする前に変換を行う場合は、sales_1およびsales_2を構成するデータファイルを変換します。

  1. SQL*Plusからホスト・システムに戻ります。

    SQL> HOST
    
  2. RMANを起動して、ソース・データベースに接続します。

    $ RMAN TARGET /
    
    Recovery Manager: Release 11.2.0.0.1 
    
    Copyright (c) 1982, 2007, Oracle.  All rights reserved.
    
    connected to target database: salesdb (DBID=3295731590)
    
  3. RMAN CONVERT TABLESPACEコマンドを使用してデータファイルを変換し、ソース・プラットフォーム上の一時的な場所に格納します。

    この例では、一時的な場所はディレクトリ/tmpと想定し、すでに作成されているとします。変換されたデータファイルの名前は、システムによって割り当てられます。

    RMAN> CONVERT TABLESPACE sales_1,sales_2 
    2> TO PLATFORM 'Microsoft Windows IA (32-bit)'
    3> FORMAT '/tmp/%U';
    
    Starting conversion at source at 30-SEP-08
    using channel ORA_DISK_1
    channel ORA_DISK_1: starting datafile conversion
    input datafile file number=00007 name=/u01/app/oracle/oradata/salesdb/sales_101.dbf
    converted datafile=/tmp/data_D-SALESDB_I-1192614013_TS-SALES_1_FNO-7_03jru08s
    channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:45
    channel ORA_DISK_1: starting datafile conversion
    input datafile file number=00008 name=/u01/app/oracle/oradata/salesdb/sales_201.dbf
    converted datafile=/tmp/data_D-SALESDB_I-1192614013_TS-SALES_2_FNO-8_04jru0aa
    channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:25
    Finished conversion at source at 30-SEP-08
    

    関連項目:

    RMANのCONVERTコマンドの詳細は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。

  4. Recovery Managerを終了します。

    RMAN> exit
    Recovery Manager complete.
    

タスク4: 表領域セットのトランスポート

次の手順を実行します。

  1. 表領域のデータファイルとエクスポート(ダンプ)ファイルの両方を、移動先データベースからアクセスできる場所にトランスポートします。このためには、次のいずれかを実行します。

    • 表領域セットのendianness変換が必要ない場合、または表領域セットをすでに変換済の場合は、次のようにします。

      1. ダンプ・ファイルを、DATA_PUMP_DIRディレクトリ・オブジェクトで指し示されているディレクトリ、または他の任意のディレクトリにトランスポートします。

        DATA_PUMP_DIRの場所を判別するには、次の問合せを実行します。

        SELECT * FROM DBA_DIRECTORIES WHERE DIRECTORY_NAME = 'DATA_PUMP_DIR';
        
        OWNER      DIRECTORY_NAME   DIRECTORY_PATH
        ---------- ---------------- -----------------------------------
        SYS        DATA_PUMP_DIR    C:\app\orauser\admin\orawin\dpdump\
        
      2. データファイルを、移動先データベースの既存データファイルの場所にトランスポートします。

        UNIXおよびLinuxプラットフォームでは、この場所は通常、/u01/app/oracle/oradata/SID/または+DISKGROUP/SID/datafile/です。


        注意:

        データファイルを変換した場合は、タスク3: トランスポータブル表領域セットの生成の手順3に示すとおり、そのデータファイルの新しい名前と場所をCONVERT TABLESPACEコマンドの出力で調べます。

    • 移動先ホストへのトランスポート後にendianness変換を実行する場合は、次のようにします。

      1. ダンプ・ファイルを、DATA_PUMP_DIRディレクトリ・オブジェクトで指し示されているディレクトリ、または他の任意のディレクトリにトランスポートします。

      2. 移動先ホスト上の一時的な場所(/tmpやC:\TEMPなど)にデータファイルをトランスポートします。変換時に、変換されたデータファイルを、移動先データベースの既存データファイルの場所に移動できます。


    ヒント:

    ソースと移動先の両方がファイル・システムの場合は、次の機能を使用してトランスポートできます。
    • フラット・ファイルをコピーする機能(オペレーティング・システムのコピー・ユーティリティやFTPなど)

    • DBMS_FILE_TRANSFERパッケージ

    • RMAN

    • CDで配布する機能

    ソースとターゲットのいずれかがOracle Automatic Storage Management (Oracle ASM)ディスク・グループの場合は、次の機能を使用できます。

    • XML DBリポジトリの/sys/asm仮想フォルダ間でのFTP

      詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

    • DBMS_FILE_TRANSFERパッケージ

    • RMAN



    注意:

    UNIX ddユーティリティを使用してデータベース間でRAWデバイス・ファイルをコピーする場合は、注意が必要です。ddユーティリティは、ソースRAWデバイス・ファイル全体をコピーするために使用するか、またはソースRAWデバイス・ファイルの特定の範囲のみをコピーするようにオプションを指定して起動できます。

    データファイルには非表示の制御情報も格納されているため、RAWデバイス・ファイルの実際のデータファイル・サイズを確認するのは困難です。したがって、ddユーティリティを使用する場合は、ソースRAWデバイス・ファイルの内容全体をコピーすることをお薦めします。


  2. endiannessがソース・プラットフォームとは異なるプラットフォームに表領域セットをトランスポートし、表領域セットをまだ変換していない場合は、RMANで変換します。

    次の例では、変換されたデータファイルがC:\app\orauser\oradata\orawin\(移動先データベースの既存データファイルの場所)に格納されます。

    C:\>RMAN TARGET /
     
    Recovery Manager: Release 11.2.0.0.1 
     
    Copyright (c) 1982, 2007, Oracle.  All rights reserved.
    
    connected to target database: ORAWIN (DBID=3462152886)
    
    RMAN> CONVERT DATAFILE 
    2>'C:\Temp\sales_101.dbf',
    3>'C:\Temp\sales_201.dbf'
    4>TO PLATFORM="Microsoft Windows IA (32-bit)"
    5>FROM PLATFORM="Solaris[tm] OE (32-bit)"
    6>DB_FILE_NAME_CONVERT=
    7>'C:\Temp\', 'C:\app\orauser\oradata\orawin\'
    8> PARALLELISM=4;
    

    データファイルは、表領域名ではなく、ファイル名で指定します。表領域のメタデータがインポートされるまで、移動先インスタンスでは対象の表領域名を認識できません。

    ソースの場所、ターゲットの場所、あるいはその両方でOracle Automatic Storage Management(Oracle ASM)を使用しない場合、ソース・プラットフォームとターゲット・プラットフォームはオプションです。RMANでは、データファイルを調べてソース・プラットフォームを判別し、デフォルトのターゲット・プラットフォームは、変換を実行するホストのプラットフォームになります。

    ソースおよびターゲットの場所の両方でOracle ASMを使用する場合は、DB_FILE_NAME_CONVERT句でソース・プラットフォームとターゲット・プラットフォームを指定する必要があります。


関連項目:

DBMS_FILE_TRANSFERパッケージを使用して、トランスポートされるファイルとそのメタデータをコピーする方法は、「データベース・サーバーを使用したファイルのコピー」を参照してください。

タスク5: (オプション)表領域を読取り/書込みモードに戻す

次のように、トランスポートした表領域をソース・データベースで再び読取り/書込みモードにします。

ALTER TABLESPACE sales_1 READ WRITE;
ALTER TABLESPACE sales_2 READ WRITE;

インポート・プロセスが成功したことを先に確認するために、このタスクを延期することができます。

タスク6: 表領域セットのインポート


注意:

表領域セットを受け取るデータベースの標準ブロック・サイズと異なるブロック・サイズの表領域をトランスポートする場合は、最初にDB_nK_CACHE_SIZE初期化パラメータ・エントリを受取り側データベースのパラメータ・ファイル内に設定する必要があります。

たとえば、ブロック・サイズが8KBの表領域を標準ブロック・サイズが4KBのデータベースにトランスポートする場合は、DB_8K_CACHE_SIZE初期化パラメータ・エントリをパラメータ・ファイルに含める必要があります。このエントリがすでにパラメータ・ファイルに含まれている場合は、ALTER SYSTEM SET文を使用してこのパラメータを設定できます。

DB_nK_CACHE_SIZE初期化パラメータの値の指定方法は、『Oracle Databaseリファレンス』を参照してください。


このタスクは、権限を持つ任意のユーザーが実行できます。表領域セットをインポートするには、次の手順を実行します。

  1. データ・ポンプ・インポート・ユーティリティのimpdpを使用して、次のように表領域のメタデータをインポートします。

    impdp system dumpfile=expdat.dmp directory=data_pump_dir
       TRANSPORT_DATAFILES=
       c:\app\orauser\oradata\orawin\sales_101.dbf,
       c:\app\orauser\oradata\orawin\sales_201.dbf
       remap_schema=sales1:crm1  remap_schema=sales2:crm2
       logfile=tts_import.log
    
    Password: password
    

    この例では、次の指定を行います。

    • DUMPFILEパラメータでは、インポートされる表領域のメタデータが含まれるエクスポート・ファイルを指定します。

    • DIRECTORYパラメータでは、ダンプ・ファイルの場所を識別するディレクトリ・オブジェクトを指定します。

    • TRANSPORT_DATAFILESパラメータによって、インポートする表領域が含まれるすべてのデータファイルを識別します。

    • REMAP_SCHEMAパラメータによって、データベース・オブジェクトの所有権を変更します。REMAP_SCHEMAを指定しない場合、すべてのデータベース・オブジェクト(表や索引など)はソース・データベースと同じユーザー・スキーマ内で作成され、そのユーザーは移動先データベース内にすでに存在している必要があります。ユーザーが存在しない場合は、インポート・ユーティリティによってエラーが返されます。この例では、ソース・データベース内でsales1が所有している表領域セット内のオブジェクトは、表領域セットをインポートした後の移動先データベース内ではcrm1の所有となります。同様に、ソース・データベース内でsales2が所有しているオブジェクトは、移動先データベース内ではcrm2の所有となります。この場合、移動先データベースにユーザーsales1およびsales2が存在する必要はありませんが、ユーザーcrm1crm2が存在している必要があります。

    • LOGFILEパラメータでは、インポート・ユーティリティによって書き込まれるログ・ファイルのファイル名を指定します。ログ・ファイルの書込み先はダンプ・ファイルの読取り元と同じディレクトリです。

    この文が正常に実行されると、コピーするセット内のすべての表領域は読取り専用モードのままになります。インポート・ログ・ファイルを確認して、エラーが発生しなかったことを確認します。

    多数のデータファイルを扱う場合、データファイル名のリストを文の行で指定することは煩雑です。また、文の行制限を超える場合もあります。このような場合には、インポート・パラメータ・ファイルを使用できます。たとえば、次のようにしてデータ・ポンプ・インポート・ユーティリティを起動できます。

    impdp system parfile='par.f'
    

    パラメータ・ファイルpar.fの内容は、次のとおりです。

    DUMPFILE=expdat.dmp 
    DIRECTORY=data_pump_dir
    TRANSPORT_DATAFILES=
    C:\app\orauser\oradata\orawin\sales_101.dbf,
    C:\app\orauser\oradata\orawin\sales_201.dbf
    REMAP_SCHEMA=sales1:crm1  REMAP_SCHEMA=sales2:crm2
    LOGFILE=tts_import.log
    

    関連項目:

    インポート・ユーティリティの使用方法は、『Oracle Databaseユーティリティ』を参照してください。

  2. 必要に応じて、移動先データベースで表領域を読取り/書込みモードにします。

トランスポータブル表領域の使用: 使用例

次の各項では、トランスポータブル表領域の用途について説明します。

データ・ウェアハウスのためのパーティションのトランスポートと連結

標準的な企業のデータ・ウェアハウスには、1つ以上の大きいファクト表が含まれています。これらのファクト表は、企業データ・ウェアハウスを履歴データベースにするために、日付別にパーティション化されていることがあります。この場合、索引を作成すると、スター・クエリーを高速化できます。履歴データベースから最も古いパーティションを削除するたびにグローバル索引を再作成しなくても済むように、この種の履歴パーティション表についてローカル索引を作成することをお薦めします。

たとえば、1か月分のデータをデータ・ウェアハウスに毎月ロードする場合を考えます。データ・ウェアハウスには、salesという大型のファクト表があり、次の列が含まれています。

CREATE TABLE sales (invoice_no NUMBER,
   sale_year  INT NOT NULL,
   sale_month INT NOT NULL,
   sale_day   INT NOT NULL)
   PARTITION BY RANGE (sale_year, sale_month, sale_day)
     (partition jan98 VALUES LESS THAN (1998, 2, 1),
      partition feb98 VALUES LESS THAN (1998, 3, 1),
      partition mar98 VALUES LESS THAN (1998, 4, 1),
      partition apr98 VALUES LESS THAN (1998, 5, 1),
      partition may98 VALUES LESS THAN (1998, 6, 1),
      partition jun98 VALUES LESS THAN (1998, 7, 1));

次のようにして、ローカルの非同一キー索引を作成します。

CREATE INDEX sales_index ON sales(invoice_no) LOCAL;

最初は、すべてのパーティションは空で、同じデフォルト表領域にあります。パーティションを毎月1つ作成し、パーティション表salesに連結する必要があります。

現在が1998年7月で、7月分の売上データをパーティション表にロードするとします。ステージング・データベース内で、新しい表領域ts_julを作成します。また、その表領域内で、sales表と同じ列タイプを持つ表jul_salesも作成します。表jul_salesは、CREATE TABLE ... AS SELECT文を使用して作成できます。jul_salesを作成して移入した後に、sales表内のローカル索引と同じ列に索引を付けて、この表の索引jul_sale_indexを作成することもできます。索引の作成後に、表領域ts_julをデータ・ウェアハウスにトランスポートします。

データ・ウェアハウスでは、7月分の売上データ用のsales表にパーティションを追加します。これにより、ローカルの非同一キー索引用にも1つのパーティションが作成されます。

ALTER TABLE sales ADD PARTITION jul98 VALUES LESS THAN (1998, 8, 1);

トランスポートされた表jul_salesを新しいパーティションに変換して、表salesに連結します。

ALTER TABLE sales EXCHANGE PARTITION jul98 WITH TABLE jul_sales 
   INCLUDING INDEXES
   WITHOUT VALIDATION;

この文により、新しいデータがパーティション表に連結され、7月分の売上データが新しいパーティションjul98に格納されます。また、索引jul_sale_indexsales表のローカル索引のパーティションに変換されます。この文では、構造情報を操作するだけであり、データベースのポインタを切り替えれば済むので、結果は即時に返されます。新しいパーティション内のデータが旧パーティション内のデータとオーバーラップしないことがわかっている場合は、WITHOUT VALIDATION句を指定してください。この句を指定しないと、新しいパーティションの範囲を検証するために、そこに含まれる新しいデータがすべて検査されます。

sales表のすべてのパーティションが同じステージング・データベースから取り込まれる場合(ステージング・データベースが破壊されることはありません)、変換文は常に成功します。ただし、一般に、パーティション表のデータが異なるデータベースから取り込まれる場合は、変換操作が失敗する可能性があります。たとえば、salesjan98パーティションが同じステージング・データベースから取り込まれていない場合は、前述の変換操作が失敗して次のエラーが返されることがあります。

ORA-19728: data object number conflict between table JUL_SALES and partition JAN98 in table SALES

この競合を解決するには、次の文を発行して、競合しているパーティションを移動します。

ALTER TABLE sales MOVE PARTITION jan98;

次に、変換操作を再試行してください。

交換が成功した後は、jul_salesjul_sale_indexを削除しても安全です(どちらも空になっています)。これで、7月分の売上データはデータ・ウェアハウスに正常にロードされたことになります。

構造化データのCDでの公開

トランスポータブル表領域を使用すると、構造化データをCDで公開できます。データ・プロバイダは、公開するデータを含む表領域をロードし、トランスポータブル・セットを生成し、トランスポータブル・セットをCDにコピーできます。これにより、このCDを配布できます。

顧客は、このCDを受け取ったら、CDからディスク記憶域にデータファイルをコピーすることなく、既存のデータベースにCDの内容を追加できます。たとえば、Windows NTシステムでD:ドライブがCDドライブであるとします。次のようにして、データファイルcatalog.fおよびエクスポート・ファイルexpdat.dmpを含むトランスポータブル・セットをインポートできます。

IMPDP system/password DUMPFILE=expdat.dmp DIRECTORY=dpump_dir
   TRANSPORT_DATAFILES='D:\catalog.f'  

CDは、データベースの稼働中に取り出すことができます。この場合、その表領域への後続の問合せでは、CD上のデータファイルをオープンできないことを示すエラーが返されます。ただし、このデータベースの他の部分への操作は影響を受けません。CDをドライブに戻すと、表領域は再び読込み可能になります。

CDを取り出すのは、読取り専用表領域のデータファイルを削除するのと同じことです。データベースを停止して再起動すると、削除されたデータファイルが見つからず、データベースをオープンできないことを示すメッセージが表示されます(初期化パラメータREAD_ONLY_OPEN_DELAYEDTRUEに設定していない場合)。READ_ONLY_OPEN_DELAYEDTRUEに設定されている場合は、トランスポートされた表領域を問い合せるときにのみ、このファイルが読み込まれます。したがって、CDから表領域をトランスポートする場合は、そのCDがデータベースに永続的に連結されないかぎり、常にREAD_ONLY_OPEN_DELAYED初期化パラメータをTRUEに設定しておく必要があります。

複数データベースで同じ表領域を読取り専用でマウントする方法

トランスポータブル表領域を使用すると、複数のデータベースで1つの表領域を読取り専用でマウントできます。これにより、データを別々のディスクに複製しなくても、異なるデータベースで同じデータを共有できます。表領域のデータファイルは、どのデータベースからもアクセス可能にする必要があります。データベースの破損を回避するために、表領域はマウント先のすべてのデータベース内で読取り専用のままにしてください。

次に、複数のデータベースで同じ表領域を読取り専用でマウントする方法を2つ示します。

  • 表領域の元のデータベースが表領域を共有するデータベースと異なる場合。

    ソース・データベースでトランスポータブル・セットを生成し、すべてのデータベースからアクセス可能なディスクにそのトランスポータブル・セットを格納し、その後、表領域をマウントする各データベースにメタデータをインポートします。

  • 表領域が、その表領域を共有するデータベースの1つに属する場合。

    データファイルがすでに共有ディスクに格納されているとします。表領域がすでに格納されているデータベース上で、この表領域を読取り専用にしてトランスポータブル・セットを生成し、データファイルは共有ディスク上の同じ位置に残したまま、表領域を他のデータベースにインポートします。

ディスクを複数のコンピュータからアクセス可能にするには、いくつかの方法があります。クラスタ・ファイル・システムまたはRAWディスクのいずれかを使用できます。ネットワーク・ファイル・システム(NFS)を使用することも可能ですが、NFSの停止中にユーザーが共有表領域を問い合せると、NFS操作がタイムアウトになるまでデータベースが停止することがあります。

後で、一部のデータベースから読取り専用表領域を削除できます。読取り専用表領域を削除しても、表領域のデータファイルは変更されません。したがって、削除操作によって表領域が破損することはありません。表領域をマウントしているデータベースが1つしかない場合を除き、表領域は読取り/書込み可能にしないでください。

トランスポータブル表領域を使用した履歴データのアーカイブ

トランスポータブル表領域セットは、任意のOracle Databaseにインポートできる自己完結したファイル・セットであるため、この章で説明するトランスポータブル表領域の手順を使用して、企業データ・ウェアハウスに旧データまたは履歴データをアーカイブできます。


関連項目:

詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

トランスポータブル表領域を使用したTSPITRの実行

トランスポータブル表領域を使用して、表領域のpoint-in-timeリカバリ(TSPITR)を実行できます。


関連項目:

トランスポータブル表領域を使用してTSPITRを実行する方法は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

データベースのトランスポータブル表領域を使用したプラットフォーム間の移動

トランスポータブル表領域機能を使用して異なるプラットフォーム間でデータベースを移動するには、移動先プラットフォームに新規データベースを作成して、すべてのユーザー表領域をトランスポートします。詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

SYSTEM表領域はトランスポートできません。したがって、SYSTEM表領域に依存する順序、PL/SQLパッケージなどのオブジェクトはトランスポートできません。このため、移動先のデータベースにこれらのオブジェクトを手動で作成するか、またはデータ・ポンプを使用して、トランスポータブル表領域で移動できないオブジェクトをトランスポートする必要があります。

表領域のデータ・ディクショナリ・ビュー

次のデータ・ディクショナリ・ビューおよび動的パフォーマンス・ビューは、データベースの表領域に関して役立つ情報を提供します。

ビュー 説明
V$TABLESPACE 制御ファイルに記述されているすべての表領域の名前と番号。
V$ENCRYPTED_TABLESPACES 暗号化されたすべての表領域の名前と暗号化アルゴリズム。
DBA_TABLESPACESUSER_TABLESPACES すべての(またはユーザーがアクセス可能な)表領域の説明。
DBA_TABLESPACE_GROUPS 表領域グループとそのグループに属する表領域。
DBA_SEGMENTSUSER_SEGMENTS すべての(またはユーザーがアクセス可能な)表領域内のセグメントに関する情報。
DBA_EXTENTSUSER_EXTENTS すべての(またはユーザーがアクセス可能な)表領域内のデータ・エクステントに関する情報。
DBA_FREE_SPACEUSER_FREE_SPACE すべての(またはユーザーがアクセス可能な)表領域内の使用可能エクステントに関する情報。
DBA_TEMP_FREE_SPACE 各一時表領域の割当て済領域の合計と空き領域。
V$DATAFILE 所有する表領域の表領域番号など、すべてのデータファイルに関する情報。
V$TEMPFILE 所有する表領域の表領域番号など、すべての一時ファイルに関する情報。
DBA_DATA_FILES 表領域に属するファイル(データファイル)。
DBA_TEMP_FILES 一時表領域に属するファイル(一時ファイル)。
V$TEMP_EXTENT_MAP ローカル管理の一時表領域すべての全エクステントに関する情報。
V$TEMP_EXTENT_POOL ローカル管理の一時表領域の場合、キャッシュされ、各インスタンスで使用されている一時領域の状態。
V$TEMP_SPACE_HEADER 各一時ファイルの使用済領域/空き領域。
DBA_USERS すべてのユーザーのデフォルト表領域と一時表領域。
DBA_TS_QUOTAS すべてのユーザーの表領域割当て制限。
V$SORT_SEGMENT 特定インスタンス内のすべてのソート・セグメントに関する情報。このビューは、表領域がTEMPORARYタイプの場合にかぎり更新されます。
V$TEMPSEG_USAGE 一時または永続表領域のユーザーに使用される一時(ソート)セグメントの説明。

次に示すのは、これらのビューのごく一部の使用例です。


関連項目:

これらのビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

例1: 表領域とデフォルト記憶域パラメータの表示

データベースに含まれるすべての表領域の名前とデフォルト記憶域パラメータをすべて表示するには、DBA_TABLESPACESビューに対して次の問合せを使用します。

SELECT TABLESPACE_NAME "TABLESPACE",
   INITIAL_EXTENT "INITIAL_EXT",
   NEXT_EXTENT "NEXT_EXT",
   MIN_EXTENTS "MIN_EXT",
   MAX_EXTENTS "MAX_EXT",
   PCT_INCREASE
   FROM DBA_TABLESPACES;

TABLESPACE  INITIAL_EXT  NEXT_EXT  MIN_EXT   MAX_EXT    PCT_INCREASE  
----------  -----------  --------  -------   -------    ------------ 
RBS             1048576   1048576        2        40               0
SYSTEM           106496    106496        1        99               1
TEMP             106496    106496        1        99               0
TESTTBS           57344     16384        2        10               1
USERS             57344     57344        1        99               1

例2: データファイルとデータベースの対応する表領域の表示

データファイルの名前、サイズおよびデータベースの対応する表領域を表示するには、DBA_DATA_FILESビューに対して次の問合せを入力します。

SELECT  FILE_NAME, BLOCKS, TABLESPACE_NAME
   FROM DBA_DATA_FILES;

FILE_NAME                                      BLOCKS  TABLESPACE_NAME
------------                               ----------  -------------------
/U02/ORACLE/IDDB3/DBF/RBS01.DBF                  1536  RBS
/U02/ORACLE/IDDB3/DBF/SYSTEM01.DBF               6586  SYSTEM
/U02/ORACLE/IDDB3/DBF/TEMP01.DBF                 6400  TEMP
/U02/ORACLE/IDDB3/DBF/TESTTBS01.DBF              6400  TESTTBS
/U02/ORACLE/IDDB3/DBF/USERS01.DBF                 384  USERS

例3: 各表領域の空き領域(エクステント)の統計の表示

データベース内の各表領域について、使用可能エクステントと結合アクティビティの統計を生成するには、次の問合せを入力します。

SELECT TABLESPACE_NAME "TABLESPACE", FILE_ID,
   COUNT(*)    "PIECES",
   MAX(blocks) "MAXIMUM",
   MIN(blocks) "MINIMUM",
   AVG(blocks) "AVERAGE",
   SUM(blocks) "TOTAL"
   FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME, FILE_ID;

TABLESPACE    FILE_ID  PIECES   MAXIMUM    MINIMUM  AVERAGE    TOTAL
----------    -------  ------   -------    -------  -------   ------
RBS                 2       1       955        955      955      955
SYSTEM              1       1       119        119      119      119
TEMP                4       1      6399       6399     6399     6399
TESTTBS             5       5      6364          3     1278     6390
USERS               3       1       363        363      363      363

PIECESは表領域ファイル内の空き領域エクステント数、MAXIMUMおよびMINIMUMはデータベース・ブロック内の領域で連続する最大領域と最小領域、AVERAGEは空き領域があるエクステントの平均ブロック・サイズ、そしてTOTALは各表領域ファイル内の空き領域のブロック数を示します。新しいオブジェクトを作成しようとしているとき、またはセグメントを拡張予定であり、表領域に十分な領域があることを確かめるときに、この問合せを使用します。