日本語PDF

13 表領域の管理

表領域は、関連する論理構造をグループ化するデータベース記憶域です。データベースのデータファイルは表領域に格納されます。

関連項目:

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

ガイドラインに従って表領域に対して作業できます。

13.1.1 複数の表領域の使用

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

データベースに複数の表領域があるときには、次のことが可能です。

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

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

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

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

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

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

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

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

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

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

ノート:

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

関連項目:

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

13.2 表領域の作成

表領域を作成して、表と索引などの関連する論理構造をグループ化します。データベースのデータファイルは表領域に格納されます。

13.2.1 表領域の作成について

新しい表領域を作成するには、SQL文CREATE TABLESPACEまたはCREATE TEMPORARY TABLESPACEを使用します。表領域を作成するには、CREATE TABLESPACEシステム権限が必要です。

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

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

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

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

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

関連項目:

13.2.2 ローカル管理表領域

ローカル管理表領域では、各データファイルに格納されるビットマップを使用してエクステントを管理します。

13.2.2.1 ローカル管理表領域の使用について

ローカル管理表領域では、その表領域内のすべてのエクステント情報がビットマップを使用して追跡されます。

ローカル管理表領域には、次の利点があります。

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

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

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

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

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

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

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

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

関連項目:

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

ローカル管理表領域を作成するには、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ブロックとビットマップの領域を足したもの)必要があります。

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

ローカル管理表領域では、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表領域」を参照)としても作成できます。

13.2.3 bigfile表領域

bigfile表領域を使用してデータベースの記憶域容量を増やし、多数のデータファイルと一時ファイルを管理する負荷を減らすことができます。

13.2.3.1 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表領域を使用することはお薦めしません。サポートされているファイルの最大サイズの詳細は、ご使用のオペレーティング・システム固有のドキュメントを参照してください。

13.2.3.2 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文を指定すると、デフォルトの表領域タイプよりも作成する表領域が優先されます。

13.2.3.3 bigfile表領域の識別

データ・ディクショナリ・ビューのセットを問い合せて、bigfile表領域についてのデータを取得できます。

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

  • DBA_TABLESPACES

  • USER_TABLESPACES

  • V$TABLESPACE

これらのビューを問い合せて、bigfile表領域についてのデータを取得します。

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

13.2.4 デフォルト圧縮属性を持つ表領域

表領域の作成時に、表領域に作成されるすべての表と索引またはそれらのパーティションをデフォルトで圧縮するように指定できます。

13.2.4.1 デフォルト圧縮属性を持つ表領域について

表領域を作成する際に、表領域に作成されるすべての表および索引のデータのデフォルト圧縮を指定できます。デフォルト圧縮レベルは、表領域を構成するパーティションにも適用されます。このデータを圧縮するとディスク使用量を削減できます。

13.2.4.2 デフォルト圧縮属性を持つ表領域の作成

表領域を作成するときに、DEFAULTキーワードを使用し、その後に圧縮タイプを含む表圧縮句を指定すると、表圧縮のタイプを指定できます。DEFAULTキーワードを使用して、その後に索引圧縮句と索引圧縮タイプを指定すると、索引圧縮のタイプを指定することもできます。

次の文は、表領域内に作成されるすべての表およびパーティションで、特に指定がないかぎり高度な行圧縮が使用されることを示しています。

CREATE TABLESPACE ... DEFAULT ROW STORE COMPRESS ADVANCED ... ;

デフォルトの表領域圧縮指定は、その表領域に表またはパーティションを作成するときに上書きできます。

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

CREATE TABLESPACE ... DEFAULT INDEX COMPRESS ADVANCED HIGH ... ;

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

13.2.5 暗号化された表領域

永続表領域を暗号化して機密データを保護できます。

13.2.5.1 暗号化された表領域について

暗号化表領域では、主にデータベース以外の手段による未承認のアクセスからデータを保護します。たとえば、あるOracle Databaseから別のOracle Databaseに移動するため、または格納用のオフサイト施設に移動するために暗号化された表領域をバックアップ・メディアに書き込むと、表領域は暗号化されたままになります。

また、暗号化表領域では、データベースのセキュリティ機能を回避して、オペレーティング・システムのファイル・システムから直接データベース・ファイルにアクセスしようとするユーザーからデータを保護します。表領域の暗号化はアプリケーションに対して完全に透過的であるため、アプリケーションの変更は不要です。

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

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

ノート:

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

最大限のセキュリティを確保するために、暗号化された表領域のデータは、UNDO表領域、REDOログおよび一時表領域に書き込まれる場合は自動的に暗号化されます。ただし、Oracle Database 12cリリース2 (12.2)以降では、UNDO表領域および一時表領域をオプションで暗号化できます。

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

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

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

  • Advanced Encryption Standard(AES)

  • ARIA

  • GHOST

  • SEED

  • Triple Data Encryption Standard

サポートされる暗号化アルゴリズムの詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

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

暗号化された表領域を作成した後で、ALTER TABLESPACE文を使用して複合化したり、キーを変更できます。また、ALTER TABLESPACE文を使用して、暗号化されていない表を暗号化することもできます。

制限事項

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

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

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

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

関連項目:

13.2.5.2 暗号化された表領域の作成

暗号化された表領域を作成して、未承認のアクセスに対してデータを保護できます。

表領域を暗号化するには、COMPATIBLE初期化パラメータを11.2.0以上に設定した状態でデータベースをオープンする必要があります。表領域を作成できるユーザーは、暗号化された表領域も作成できます。

暗号化された表領域を作成するには:

  • ENCRYPTION句を指定してCREATE TABLESPACE文を実行します。

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

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

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

CREATE TABLESPACE securespace
DATAFILE '/u01/app/oracle/oradata/orcl/secure01.dbf' SIZE 100M
ENCRYPTION USING 'AES256' ENCRYPT;
13.2.5.3 暗号化された表領域に関する情報の表示

DBA_TABLESPACESおよびUSER_TABLESPACESデータ・ディクショナリ・ビューを問い合せて、暗号化された表領域に関する情報を取得できます。

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 Advanced Securityガイド』を参照してください

13.2.6 一時表領域

一時表領域によって、メモリー内に収まらない複数のソート操作の同時実行性が向上します。また、一時表領域によって、ソート中の領域管理操作の効率も向上します。

13.2.6.1 一時表領域について

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

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

  • 中間ソート結果

  • 一時表と一時索引

  • 一時LOB

  • 一時Bツリー

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

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

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

ノート:

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

Oracle Database 12cリリース2 (12.2)以降では、ローカル一時表領域を使用できます。ローカル一時表領域には、すべてのデータベース・インスタンスの共有されない個別の一時ファイルが格納されます。ローカル一時表領域は、ソート、ハッシュ集約および結合に関連する問合せなど、SQL文の一時的な結果を自動書出しするためのみに使用されます。これらの結果にはインスタンス内でのみアクセスできます。これに対して、共有一時表領域は共有ディスクに存在し、すべてのインスタンスで使用可能です。ローカル一時表領域を作成するには、CREATE LOCAL TEMPORARY TABLESPACE文を使用します。共有一時表領域はOracle Databaseの以前のリリースでも使用可能で、「一時表領域」と呼ばれていました。この『Oracle Database管理者ガイド』では、特に記載がないかぎり、「一時表領域」という用語は共有一時表領域を意味します。

デフォルト一時表領域

一時表領域が明示的に割り当てられていないユーザーは、データベースのデフォルト一時表領域(新規インストールでは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ビューには、各一時表領域の割当済領域の合計と空き領域が表示されます。詳細は、「一時表領域の領域使用情報の表示」を参照してください。大量の未使用領域があるローカル管理の一時表領域は手動で縮小できます。詳細は、「ローカル管理の一時表領域の縮小」を参照してください。

関連項目:

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

ローカル管理表領域では、領域の管理がより簡単で効率的であるため、一時表領域には理想的です。

ローカル管理の一時表領域では、一時表領域外のデータを変更せず、一時表領域データの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;

すべての一時表領域は均一サイズのローカル管理エクステントを使用して作成されるため、一時表領域の場合、エクステント管理句はオプションです。EXTENT SIZE句でエクステント・サイズを指定した場合は、それが使用されます。指定しない場合は、Oracle Databaseで表領域サイズおよびファイル・サイズを使用してデフォルトのエクステント・サイズを決定します。

ノート:

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

13.2.6.3 bigfile一時表領域の作成

通常の表領域と同様に、単一ファイル(大型ファイル)の一時表領域を作成できます。

bigfile一時表領域を作成するには、次のようにします。

  • CREATE BIGFILE TEMPORARY TABLESPACE文を実行して、単一の一時ファイル表領域を作成します。

bigfile表領域の詳細は、「bigfile表領域の作成」および「bigfile表領域の変更」の項を参照してください。ただし、データファイルのかわりに一時ファイルを使用する一時表領域を作成する点を考慮に入れてください。

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

DBA_TEMP_FREE_SPACEディクショナリ・ビューには、各一時表領域の領域使用に関する情報が表示されます。

この情報には、割当て済領域と空き領域が含まれます。これらの統計を表示するには、次の文を使用してこのビューを問い合せます。

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

13.2.7 一時表領域グループ

一時表領域グループは、データベースに対してデフォルトの一時表領域として割り当てられる表領域グループです。

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

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

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

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

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

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

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

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

関連項目:

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

13.2.7.2 表領域グループの作成

表領域グループは、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;
13.2.7.3 表領域グループのメンバーの変更

表領域を既存の表領域グループに追加するには、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は暗黙的に削除されます。

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

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

たとえば:

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE group2;

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

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

13.3 インメモリー列ストアへの表領域の格納の検討

表領域の作成または変更時に、インメモリー列ストアに対して表領域を有効にできます。インメモリー列ストアに対して表領域が有効になると、表領域内のすべての表はデフォルトでインメモリー列ストアに対して有効になります。

ノート:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

インメモリー列ストアは、システム・グローバル領域(SGA)のオプション部分で、高速スキャン用に最適化された表、表パーティション、その他のデータベース・オブジェクトのコピーが格納されます。インメモリー列ストアでは、表データがSGAに行ではなく列ごとに格納されます。

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

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; 

13.5 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モードは維持されません。

関連項目:

13.6 表領域の可用性の変更

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

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

関連項目:

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

13.6.1 表領域のオフライン化

表領域をオフラインにすると、通常アクセスができなくなります。

次のような場合、表領域をオフライン化する場合があります。

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

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

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

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

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

表領域をオフライン化するには、次のようにします。

  • OFFLINE句を指定してALTER 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;

13.6.2 表領域のオンライン化

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

表領域をオンライン化するには、次のようにします。

  • ONLINE句を指定してALTER TABLESPACE文を実行します。

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

たとえば、次の文はusers表領域をオンラインにします。

ALTER TABLESPACE users ONLINE;

関連項目:

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

13.7 読取り専用表領域の使用

表領域は読取り専用モードに設定できます。これにより、それに格納されているデータの更新が禁止されます。

13.7.1 読取り専用表領域について

表領域を読取り専用にすると、表領域のデータファイルに対して書込み操作ができなくなります。

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

ノート:

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

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

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

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

表領域を読取り専用にするには、READ ONLY句を指定してALTER TABLESPACE文を使用します。

すべての表領域は、最初は読取り/書込み用として作成されます。そのためには、ALTER TABLESPACEまたはMANAGE TABLESPACEシステム権限が必要です。

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

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

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

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

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

表領域を読取り専用に変更するには、次のようにします。

  • ALTER TABLESPACE文でREAD ONLY句を使用します。

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

ALTER TABLESPACE flights READ ONLY;

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

データベースのトランザクション処理中に、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

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

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

読取り専用表領域を書込み可能にすると、表領域のデータファイルに対して書込み操作が可能になります。

そのためには、ALTER TABLESPACEまたはMANAGE TABLESPACEシステム権限が必要です。

表領域を書込み操作可能に変更するには、次のようにします。

  • ALTER TABLESPACE文でREAD WRITEキーワードを使用します。

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

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

ALTER TABLESPACE flights READ WRITE;

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

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

読取り専用表領域は、CD-ROMまたはWORM (ライト・ワンス・リード・メニー)デバイスに作成できます。

CD-ROMまたはWORMデバイスに読取り専用表領域を作成するには、これらのステップに従います。

  1. 別のデバイスに書込み可能表領域を作成します。その表領域に属するオブジェクトを作成して、データを挿入します。
  2. 表領域を読取り専用に変更します。
  3. 表領域のデータファイルをWORMデバイスにコピーします。ファイルをコピーするには、オペレーティング・システムのコマンドを使用します。
  4. 表領域をオフライン化します。
  5. データファイルの名前を、WORMデバイスにコピーしたファイルと一致するように変更します。これには、RENAME DATAFILE句を指定したALTER TABLESPACE文を使用します。データファイルの名前を変更すると、制御ファイルに記述されているこれらのファイルの名前も変更されます。
  6. 表領域をオンライン化します。

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

読取り専用表領域のデータファイルのオープンを、アクセスが試行されるまで遅延できます。

大規模データベースのほとんどが、アクセス速度の遅いデバイスや階層形式の記憶デバイス上にある読取り専用表領域に格納されている場合は、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は、パラメータ値に関係なく、すべての読取り専用データファイルに引き続きアクセスします。これらの操作で読取り専用ファイルへのアクセスを回避する場合は、該当ファイルをオフライン化します。

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

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

データファイルと一時ファイルの追加などの作業を行って、表領域を変更およびメンテナンスできます。

13.8.1 表領域のサイズの拡大

表領域のサイズを増やすには、表領域のデータファイルのサイズを増やすか、またはデータファイルを追加します。

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

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

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

ローカル管理表領域に対して、データファイルの追加、可用性の変更、読取り専用または読取り/書込みへの変更、名前の変更、または自動拡張の有効化/無効化を行うことができます。

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

  • データファイルを追加する場合。たとえば:

    ALTER TABLESPACE lmtbsb
       ADD DATAFILE '/u02/oracle/data/lmtbsb02.dbf' SIZE 1M;
    
  • 表領域の可用性(ONLINE/OFFLINE)を変更する場合。

  • 表領域を読取り専用または読取り/書込み用にする場合。

  • データファイルの名前を変更したり、表領域内のデータファイルのサイズの自動拡張を使用可能または使用禁止にする場合。

13.8.3 bigfile表領域の変更

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句を指定すると、エラーが発生します。

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

ローカル管理の一時表領域を変更して、一時ファイルの追加、一時ファイルのオフライン化または一時ファイルのオンライン化を行うことができます。

ノート:

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コマンドを使用してデータベースの制御ファイルを更新します。

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

ローカル管理の一時表領域を縮小して、未使用領域を解放できます。

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

一時表領域を縮小するには、次にようにします。

  • 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';

13.9 表領域の名前変更

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

たとえば、次の文はusers表領域の名前を変更します。

ALTER TABLESPACE users RENAME TO usersts;

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

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

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

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

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

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

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

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

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

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

13.10 表領域の削除

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

表領域を削除するには、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文は正常終了しますが、エラーを示すメッセージがアラート・ログに書き込まれます。

13.11 シャドウ表領域を使用した消失書込み保護の管理

データ・ブロックの消失書込みは、永続ストレージで書込みが行われなかったにもかかわらず、I/Oサブシステムでブロック書込みの完了が確認された場合に発生します。消失書込みに対する保護として、シャドウ消失書込み保護を使用できます。

13.11.1 シャドウ消失書込み保護について

データ・ブロックの書込み欠落は、書込みが実際には行われていないのにブロック書込みの完了がI/Oサブシステムで認識される場合や、ブロックの前回イメージが現在のイメージを上書きする場合に発生します。シャドウ消失書込み保護により、表領域または個々のデータファイルの消失書込みに対して保護できます。

シャドウ消失書込み保護は、消失書込みを高速に検出して即座に応答します。シャドウ消失書込み保護を使用すれば、データ消失を最小限に抑え、データベース修復に必要な時間を短縮できます。

シャドウ消失書込み保護を使用するには、データベースに対してこの保護を有効にし、1つ以上のシャドウ表領域を作成する必要があります。シャドウ表領域は特別な目的のためのbigfile表領域で、追跡されるデータファイルのシステム変更番号(SCN)のみが格納されます。シャドウ表領域を作成するには、CREATE TABLESPACE文でLOST WRITE PROTECTION句を指定します。

追跡されるデータ・ブロックをディスクから読み取るときに、シャドウ消失書込み保護は、シャドウ表領域のブロックのSCNを、読取り中のブロックの最新の書込みのSCNと比較して、消失書込みを検出します。シャドウ・エントリのSCNが読取り中のデータ・ブロックのSCNより大きい場合は、消失書込みが発生しました。消失書込みが検出されると、エラーが返されます。

書込み欠落を検知しないと、不適切なデータが他のDMLトランザクションに使用されるためにデータ破損が生じる可能性があります。シャドウ消失書込み保護は、消費される前に消失書込みを検出してデータ破損を回避します。特定の表領域およびデータ・ファイルについてシャドウ書込み欠落保護を有効化できます。このため、最も重要なデータに対してのみ有効にできます。すべてのデータを追跡するために使用する必要はありません。さらに、シャドウ表領域は柔軟性があります。あるシャドウ表領域を別のシャドウ表領域に置き換えて、その構成や場所を変更できます。

図13-1 シャドウ消失書込み保護

図13-1の説明が続きます
「図13-1 シャドウ消失書込み保護」の説明

シャドウ消失書込み保護が有効な場合、通常のDML操作、およびSQL*Loaderの従来型パス・ロードおよびダイレクト・パス・ロード操作に対して有効です。さらに、Recovery Manager (RMAN)バックアップに対しても有効です。RMANバックアップは、読取り中のブロックの消失書込みをチェックし、そのようなブロックが見つかった場合にエラーを発行します。

表領域またはデータファイルに対してシャドウ消失書込み保護を有効にした後で、新しい消失書込み情報の収集および新しい消失書込みのチェックを停止する必要がある場合は、保護を一時停止できます。シャドウ消失書込み保護を一時停止すると、トラッキング・データがシャドウ表領域に保持され、シャドウ消失書込み保護を再度有効化できます。データ・ファイルまたは表領域のシャドウ消失書込み保護を削除すると、そのトラッキング・データが削除されて再使用できなくなります。

表領域のシャドウ消失書込み保護を有効にする場合は、ALTER TABLESPACE文でLOST WRITE PROTECTION句を指定します。また、データ・ファイルのシャドウ消失書込み保護を有効にする場合は、ALTER DATABASE data_file_name文でLOST WRITE PROTECTION句を指定します。表領域のシャドウ消失書込み保護が有効な場合、表領域の現在および将来のすべてのデータファイルに対してシャドウ消失書込み保護が有効になります。

Oracle Databaseでは、追跡されたデータ・ファイルが特定のシャドウ表領域に自動的に割り当てられます。特定のデータ・ファイルに使用されるシャドウ表領域を指定することはできません。シャドウ表領域の量は、シャドウ消失書込み保護が有効なデータファイルが使用する領域の2%以上の必要があります。

ノート:

  • 追跡されるデータファイルのサイズを大きくすると、シャドウ消失書込み保護は、対応するシャドウ表領域のトラッキング・データのサイズ変更を試みます。すべてのデータを追跡するための領域が不十分な場合、シャドウ消失書込み保護はログに警告メッセージを挿入し、使用可能なシャドウ領域を使用して、可能なかぎりデータの追跡を続行します。

  • データベースのフラッシュバックを実行すると、シャドウ消失書込み保護のデータが削除されます。フラッシュバック後、シャドウ消失書込み保護は再移入されたデータを追跡し、ブロックが更新されるとシャドウ・トラッキング・データも更新されます。

  • シャドウ消失書込み保護は、DB_LOST_WRITE_PROTECT初期化パラメータで構成された消失書込み保護およびスタンバイ・データベースとは関連しません。

13.11.2 シャドウ消失書込み保護のためのシャドウ表領域の作成

シャドウ消失書込み保護のためのシャドウ表領域を作成するには、LOST WRITE PROTECTION句を指定してCREATE BIGFILE TABLESPACE文を発行します。

シャドウ消失書込み保護が有効な任意の表領域またはデータファイルは、シャドウ表領域を使用できます。シャドウ表領域の量は、シャドウ消失書込み保護が有効なデータファイルが使用する領域の2%以上の必要があります。シャドウ表領域はbigfile表領域の必要があります。

ノート:

シャドウ表領域を作成するには、18.0.0以上のデータベース互換性レベルが必要になります。

データベースでシャドウ表領域を作成するには:

  1. SQL*Plusで、CREATE TABLESPACEシステム権限を持つユーザーとしてデータベースに接続します。
  2. LOST WRITE PROTECTION句を指定してCREATE BIGFILE TABLESPACE文を発行します。

例13-1 シャドウ消失書込み保護のためのシャドウ表領域の作成

この例では、シャドウ消失書込み保護のための表領域として、shadow_lwp1表領域を作成します。

CREATE BIGFILE TABLESPACE shadow_lwp1 DATAFILE 'shadow_lwp1.df' 
   SIZE 10M LOST WRITE PROTECTION;

13.11.3 データベースのシャドウ消失書込み保護の有効化

マルチテナント・コンテナ・データベース(CDB)または非CDBのシャドウ消失書込み保護を有効にするには、ENABLE LOST WRITE PROTECTION句を指定したALTER DATABASE文を使用します。プラガブル・データベース(PDB)のシャドウ消失書込み保護を有効にするには、ENABLE LOST WRITE PROTECTION句を指定したALTER PLUGGABLE DATABASE文を使用します。

個々の表領域およびデータ・ファイルのシャドウ消失書込み保護を有効化する前に、少なくとも1つのシャドウ表領域を作成し、そのシャドウ表領域を格納しているデータベースのシャドウ消失書込み保護を有効化する必要があります。その後で、ALTER TABLESPACE文を使用して表領域のシャドウ消失書込み保護を有効にすることと、ALTER DATABASE文を使用してデータ・ファイルのシャドウ消失書込み保護を有効にすることが可能になります。

ノート:

  • データベースのシャドウ消失書込み保護を有効化する場合は、データベースの互換性レベルが18.0.0以上で、少なくとも1つのシャドウ表領域が存在している必要があります。

  • CDBルートのシャドウ消失書込み保護を有効化または無効化しても、PDBのシャドウ消失書込み保護には影響しません。そのため、シャドウ消失書込み保護は、CDBルートで無効化されていてもPDBで有効化できます。

  • データベースのシャドウ消失書込み保護を有効にすると、シャドウ表領域が自動的に割り当てられます。

データベースのシャドウ消失書込み保護を有効にするには:

  1. SQL*Plusで、必要な権限を持つユーザーに接続します。
    • 非CDBまたはCDBルートで、ALTER DATABASEシステム権限を持つユーザーとして接続します。
    • アプリケーション・ルート、PDBまたはアプリケーションPDBで、ALTER PLUGGABLE DATABASEシステム権限を持つユーザーとして接続します。
  2. 次のいずれかを行います:
    • 非CDBまたはCDBルートの場合は、ENABLE LOST WRITE PROTECTION句を指定して、ALTER DATABASE文を発行します。
    • アプリケーション・ルート、PDBまたはアプリケーションPDBの場合は、ENABLE LOST WRITE PROTECTION句を指定して、ALTER PLUGGABLE DATABASE文を発行します。

例13-2 非CDBまたはCDBルートのシャドウ消失書込み保護の有効化

ALTER DATABASE ENABLE LOST WRITE PROTECTION;

例13-3 PDBのシャドウ消失書込み保護の有効化

ALTER PLUGGABLE DATABASE ENABLE LOST WRITE PROTECTION;

13.11.4 表領域とデータファイルに対するシャドウ消失書込み保護の有効化

表領域およびデータファイルに対してシャドウ消失書込み保護を有効にできます。

表領域に対してシャドウ消失書込み保護を有効化するには、ENABLE LOST WRITE PROTECTION句を指定してALTER TABLESPACE文を発行します。データファイルに対してシャドウ消失書込み保護を有効化するには、ENABLE LOST WRITE PROTECTION句を指定してALTER DATABASE data_file_name文を発行します。表領域に対してシャドウ消失書込み保護を有効にすると、その表領域のすべてのデータファイル、およびその表領域に追加されるデータファイルに対してシャドウ消失書込み保護が有効になります。

ノート:

  • 表領域またはデータファイルのシャドウ消失書込み保護を有効化するには、データベースに対するシャドウ消失書込み保護が有効で、少なくとも1つのシャドウ表領域が存在する必要があります。

  • 表領域またはデータ・ファイルのシャドウ消失書込み保護を有効にすると、シャドウ表領域が自動的に割り当てられます。

表領域またはデータ・ファイルのシャドウ消失書込み保護を有効にするには:

  1. SQL*Plusで、必要な権限を持つユーザーとしてデータベースに接続します。
    • 表領域のシャドウ消失書込み保護を有効にする場合は、ALTER TABLESPACE権限を持つユーザーとして接続します。
    • 非CDBまたはCDBルートで使用されるデータ・ファイルのシャドウ消失書込み保護を有効化する場合は、ALTER DATABASE権限を持つユーザーとして接続します。
    • アプリケーション・ルート、PDBまたはアプリケーションPDBで使用されるデータ・ファイルのシャドウ消失書込み保護を有効化する場合は、ALTER PLUGGABLE DATABASE権限を持つユーザーとして接続します。
  2. 次のアクションのいずれかを実行します。
    • 表領域に対してシャドウ消失書込み保護を有効化するには、ENABLE LOST WRITE PROTECTION句を指定してALTER TABLESPACE文を発行します。
    • 非CDBまたはCDBルートで使用されているデータ・ファイルのシャドウ消失書込み保護を有効化するには、ENABLE LOST WRITE PROTECTION句を指定して、ALTER DATABASE DATAFILE data_file_name文を発行します(data_file_nameはデータ・ファイルの名前に置き換えます)。
    • アプリケーション・ルート、PDBまたはアプリケーションPDBで使用されているデータ・ファイルのシャドウ消失書込み保護を有効化するには、ENABLE LOST WRITE PROTECTION句を指定して、ALTER PLUGGABLE DATABASE DATAFILE data_file_name文を発行します(data_file_nameはデータ・ファイルの名前に置き換えます)。

例13-4 表領域のシャドウ消失書込み保護の有効化

この例では、tbsu1表領域のシャドウ消失書込み保護を有効にしています。

ALTER TABLESPACE tbsu1 ENABLE LOST WRITE PROTECTION;

例13-5 非CDBまたはCDBルートで使用されるデータ・ファイルのシャドウ消失書込み保護の有効化

この例では、dfile1.dfデータ・ファイルのシャドウ消失書込み保護を有効にしています。

ALTER DATABASE DATAFILE 'dfile1.df' ENABLE LOST WRITE PROTECTION;

例13-6 アプリケーション・ルート、PDBまたはアプリケーションPDBで使用されるデータ・ファイルのシャドウ消失書込み保護の有効化

この例では、dfile2.dfデータ・ファイルのシャドウ消失書込み保護を有効にしています。

ALTER PLUGGABLE DATABASE DATAFILE 'dfile2.df' ENABLE LOST WRITE PROTECTION;

13.11.5 データベースのシャドウ消失書込み保護の無効化

マルチテナント・コンテナ・データベース(CDB)または非CDBのシャドウ消失書込み保護を無効化するには、DISABLE LOST WRITE PROTECTION句を指定してALTER DATABASE文を発行します。プラガブル・データベース(PDB)のシャドウ消失書込み保護を無効化するには、DISABLE LOST WRITE PROTECTION句を指定してALTER PLUGGABLE DATABASE文を発行します。

データベースのシャドウ消失書込み保護を無効にすると、そのデータベース内の表領域またはデータ・ファイルは、シャドウ消失書込み保護で保護できなくなります。

ノート:

  • シャドウ消失書込み保護を無効化しても、既存のシャドウ表領域のデータは削除されませんが、このデータは更新されることもチェックされることもなくなります。シャドウ表領域内のデータの削除が必要になった場合は、INCLUDING CONTENTS句を指定したDROP TABLESPACE文を使用すると、シャドウ表領域を削除できます。

  • CDBルートのシャドウ消失書込み保護を有効化または無効化しても、PDBのシャドウ消失書込み保護には影響しません。

データベースのシャドウ消失書込み保護を無効にするには:

  1. SQL*Plusで、必要な権限を持つユーザーに接続します。
    • 非CDBまたはCDBルートで、ALTER DATABASEシステム権限を持つユーザーとして接続します。
    • アプリケーション・ルート、PDBまたはアプリケーションPDBで、ALTER PLUGGABLE DATABASEシステム権限を持つユーザーとして接続します。
  2. 次のいずれかを行います:
    • 非CDBまたはCDBルートの場合は、DISABLE LOST WRITE PROTECTION句を指定して、ALTER DATABASE文を発行します。
    • アプリケーション・ルート、PDBまたはアプリケーションPDBの場合は、DISABLE LOST WRITE PROTECTION句を指定して、ALTER PLUGGABLE DATABASE文を発行します。

例13-7 非CDBまたはCDBルートのシャドウ消失書込み保護の無効化

ALTER DATABASE DISABLE LOST WRITE PROTECTION;

例13-8 PDBのシャドウ消失書込み保護の無効化

ALTER PLUGGABLE DATABASE DISABLE LOST WRITE PROTECTION;

13.11.6 シャドウ消失書込み保護の削除または一時停止

表領域またはデータファイルに対するシャドウ消失書込み保護を削除または一時停止できます。

表領域またはデータファイルのシャドウ消失書込み保護が不要になった場合は、次のいずれかのオプションを選択できます。

  • シャドウ消失書込み保護を削除できます。このオプションでは、表領域またはデータファイルのトラッキング情報がシャドウ表領域から削除されます。さらに、表領域またはデータ・ファイルの新しい消失書込み情報の収集も停止され、新しい消失書込みのチェックも停止されます。

  • シャドウ消失書込み保護を一時停止できます。このオプションでは、表領域またはデータ・ファイルの新しい消失書込み情報の収集と、新しい消失書込みのチェックが停止されます。ただし、古い消失書込み情報はシャドウ表領域に保持されます。表領域またはデータファイルに対してシャドウ消失書込み保護を再度有効にすると、古い消失書込み情報を使用できます。

表領域に対するシャドウ消失書込み保護を削除または一時停止すると、その表領域のすべてのデータファイルに対するシャドウ消失書込み保護が削除または一時停止されます。

表領域またはデータ・ファイルのシャドウ消失書込み保護を削除または一時停止するには:

  1. SQL*Plusで、必要な権限を持つユーザーとしてデータベースに接続します。
    • 表領域のシャドウ消失書込み保護を削除または一時停止する場合は、ALTER TABLESPACE権限を持つユーザーとして接続します。
    • 非CDBまたはCDBルートで使用されるデータ・ファイルのシャドウ消失書込み保護を削除または一時停止する場合は、ALTER DATABASE権限を持つユーザーとして接続します。
    • アプリケーション・ルート、PDBまたはアプリケーションPDBで使用されるデータ・ファイルのシャドウ消失書込み保護を削除または一時停止する場合は、ALTER PLUGGABLE DATABASE権限を持つユーザーとして接続します。
  2. 次のアクションのいずれかを実行します。
    • 表領域のシャドウ消失書込み保護を削除または一時停止するには、REMOVE LOST WRITE PROTECTION句(削除の場合)またはSUSPEND LOST WRITE PROTECTION句(一時停止の場合)を指定して、ALTER TABLESPACE文を発行します。
    • 非CDBまたはCDBルートで使用されているデータ・ファイルのシャドウ消失書込み保護を削除または一時停止するには、REMOVE LOST WRITE PROTECTION句(削除の場合)またはSUSPEND LOST WRITE PROTECTION句(一時停止の場合)を指定して、ALTER DATABASE DATAFILE data_file_name文を発行します(data_file_nameはデータ・ファイルの名前に置き換えます)。
    • アプリケーション・ルート、PDBまたはアプリケーションPDBで使用されているデータ・ファイルのシャドウ消失書込み保護を削除または一時停止するには、REMOVE LOST WRITE PROTECTION句(削除の場合)またはSUSPEND LOST WRITE PROTECTION句(一時停止の場合)を指定して、ALTER PLUGGABLE DATABASE DATAFILE data_file_name文を発行します(data_file_nameはデータ・ファイルの名前に置き換えます)。

例13-9 表領域のシャドウ消失書込み保護の削除

この例では、tbsu1表領域のシャドウ消失書込み保護を削除しています。

ALTER TABLESPACE tbsu1 REMOVE LOST WRITE PROTECTION;

例13-10 非CDBで使用されるデータ・ファイルのシャドウ消失書込み保護の一時停止

この例では、非CDBで使用されているdfile1.dfデータ・ファイルのシャドウ消失書込み保護を一時停止しています。

ALTER DATABASE DATAFILE 'dfile1.df' SUSPEND LOST WRITE PROTECTION;

例13-11 PDBで使用されるデータ・ファイルのシャドウ消失書込み保護の削除

この例では、PDBで使用されているdfile2.dfデータ・ファイルのシャドウ消失書込み保護を削除しています。

ALTER PLUGGABLE DATABASE DATAFILE 'dfile2.df' SUSPEND LOST WRITE PROTECTION;

13.11.7 シャドウ表領域の削除

シャドウ表領域は、DROP TABLESPACE文を使用して削除できます。INCLUDING CONTENTS句を指定したDROP TABLESPACE文を使用すると、シャドウ表領域は内容とともに削除されます。INCLUDING CONTENTS句の指定なしでDROP TABLESPACE文を使用すると、シャドウ表領域の削除前に、その内容が別のシャドウ表領域に移動されます(この表領域が存在していて、十分な空き領域がある場合)。

13.12 SYSAUX表領域の管理

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

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

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

SYSAUX表領域の占有データを監視できます。

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

SYSAUX表領域の占有データを監視するには、次のようにします。

  • V$SYSAUX_OCCUPANTSビューを問い合せます。

このビューには、SYSAUX表領域の占有データに関する次の情報がリスト表示されます。

  • 占有データの名前

  • 占有データの説明

  • スキーマ名

  • 移動プロシージャ

  • 現行の領域使用

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

関連項目:

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

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

V$SYSAUX_OCCUPANTSビューで、SYSAUX表領域の各占有データの移動プロシージャを使用できます。

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

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

13.12.3 SYSAUX表領域のサイズの制御

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

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

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

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

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

パラメータ/推奨設定

CPU数

2

8

32

同時実行セッションの数

10

20

100

ユーザー・オブジェクト数: 表および索引

500

5,000

50,000

デフォルト構成で安定した状態での予測SYSAUXのサイズ

500MB

2GB

5GB

13.13 ローカル管理表領域の問題の修正

Oracle Databaseにはローカル管理表領域の問題を修正する手段が用意されています。

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

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サポート・サービスと共同で作業を行ってください。

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

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

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

  1. SEGMENT_DUMPプロシージャをコールして、管理者がそのセグメントに割り当てた範囲をダンプします。
  2. 範囲ごとに、TABLESPACE_EXTENT_MAKE_USEDオプションを指定してTABLESPACE_FIX_BITMAPSプロシージャをコールし、領域に使用済のマークを付けます。
  3. TABLESPACE_REBUILD_QUOTASをコールして割当て制限を再作成します。

13.13.3 使用例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をコールして割当て制限を再作成します。

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

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

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

  1. t1がオーバーラップしているすべてのオブジェクトのリストを作成します。
  2. t1を削除します。必要に応じて、SEGMENT_DROP_CORRUPTプロシージャをコールしてフォローアップします。
  3. t1がオーバーラップしていたすべてのオブジェクトに対して、SEGMENT_VERIFYプロシージャをコールします。必要に応じて、TABLESPACE_FIX_BITMAPSプロシージャをコールして該当するビットマップに使用済を示すマークを付けます。
  4. TABLESPACE_VERIFYプロシージャを再度実行し、問題が解決したかどうかを検証します。

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

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

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

  1. すべてのビットマップ・ブロック、または1つしか破損していない場合はそのブロックに対して、TABLESPACE_REBUILD_BITMAPSプロシージャをコールします。
  2. TABLESPACE_REBUILD_QUOTASをコールして割当て制限を再作成します。
  3. TABLESPACE_VERIFYプロシージャをコールして、ビットマップの整合性を検証します。

13.13.6 使用例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');

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

13.14 ローカル管理表領域への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表領域を移行することをお薦めします。

13.15 表領域の情報の表示

Oracle Databaseのデータ・ディクショナリ・ビューを使用して、表領域に関する情報を問い合せることができます。

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

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

ビュー 説明

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

一時または永続表領域のユーザーに使用される一時(ソート)セグメントの説明。

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

DBA_TABLESPACESビューを問い合せて、名前およびデフォルト記憶域パラメータをリスト表示できます。

データベースに含まれるすべての表領域の名前とデフォルト記憶域パラメータをすべて表示するには、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

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

DBA_DATA_FILESビューを問い合せて、名前、サイズおよびデータベースの対応する表領域をリスト表示できます。

データファイルの名前、サイズおよびデータベースの対応する表領域を表示するには、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

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

DBA_FREE_SPACEビューを問い合せて、データベースの各表領域の空きエクステントおよび結合アクティビティに関する統計を表示できます。

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

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は各表領域ファイル内の空き領域のブロック数を示します。新しいオブジェクトを作成しようとしているとき、またはセグメントを拡張予定であり、表領域に十分な領域があることを確かめるときに、この問合せを使用します。