日本語PDF

8.9 storage_clause

目的

storage_clauseを使用すると、Oracle Databaseによる永続的なデータベース・オブジェクトの格納方法を指定できます。一時セグメントの記憶域パラメータでは、常に、関連付けられた表領域のデフォルトの記憶域パラメータが使用されます。記憶域パラメータは、データベースのデータへのアクセス時間およびデータベース内での領域の効率的な利用に影響します。

関連項目:

記憶域パラメータの影響の詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

クラスタ、索引、マテリアライズド・ビュー、マテリアライズド・ビュー・ログ、ロールバック・セグメント、表、LOB、VARRAY、ネストした表またはパーティションを作成する場合、これらのオブジェクトに割り当てられるセグメントに、記憶域パラメータの値を指定できます。記憶域パラメータを指定しない場合、オブジェクトが存在する表領域に指定されている記憶域パラメータの値が使用されます。表領域に対して値を指定しなかった場合、データベースによってデフォルト値が使用されます。

注意:

ローカル管理表領域内のオブジェクトへの記憶域パラメータの指定は、下位互換性のためにサポートされています。ローカル管理表領域を使用している場合、ローカル管理表領域にオブジェクトを作成する際にこれらの記憶域パラメータを省略できます。

クラスタ、索引、マテリアライズド・ビュー、マテリアライズド・ビュー・ログ、ロールバック・セグメント、表、VARRAY、ネストした表またはパーティションを変更する場合、記憶域パラメータの値を変更できます。この値の変更は、それ以降のエクステントの割当てにのみ影響します。

storage_clausephysical_attributes_clauseの一部であるため、この句は、物理属性句を指定できる任意の文に指定できます(physical_attributes_clause」を参照)。storage_clauseは次の文にも指定できます。

  • CREATE CLUSTERおよびALTER CLUSTER: クラスタおよびクラスタ内のすべての表の記憶特性を設定または変更する場合(「CREATE CLUSTER」および「ALTER CLUSTER」を参照)。

  • CREATE INDEXおよびALTER INDEX: 表索引または索引パーティションに対して作成された索引セグメントまたは主キー制約または一意制約を適用するために使用される索引に対して作成された索引セグメントの記憶特性を設定または変更する場合(「CREATE INDEX」および「ALTER INDEX」を参照)。

  • CREATE TABLEまたはALTER TABLEENABLE ... USING INDEX句: 主キー制約または一意制約を適用するためにシステムによって作成された索引の記憶特性を設定または変更する場合

  • CREATE MATERIALIZED VIEWおよびALTER MATERIALIZED VIEW: マテリアライズド・ビュー、そのパーティションの1つ、またはマテリアライズド・ビューを保持するために生成される索引の記憶特性を設定または変更する場合(「CREATE MATERIALIZED VIEW」および「ALTER MATERIALIZED VIEW」を参照)。

  • CREATE MATERIALIZED VIEW LOGおよびALTER MATERIALIZED VIEW LOG: マテリアライズド・ビュー・ログの記憶特性を設定または変更する場合(「CREATE MATERIALIZED VIEW LOG」および「ALTER MATERIALIZED VIEW LOG」を参照)。

  • CREATE ROLLBACK SEGMENTおよびALTER ROLLBACK SEGMENT: ロールバック・セグメントの記憶特性を設定または変更する場合(「CREATE ROLLBACK SEGMENT」および「ALTER ROLLBACK SEGMENT」を参照)。

  • CREATE TABLEおよびALTER TABLE: クラスタ化されていない表またはそのパーティションまたはサブパーティションの1つのLOBまたはVARRAYデータ・セグメント、またはネストした表の記憶表の記憶特性を設定する場合(「CREATE TABLE」および「ALTER TABLE」を参照)。

  • CREATE TABLESPACEおよびALTER TABLESPACE: 表領域に作成されたすべてのオブジェクトに対するデフォルトの記憶特性を設定または変更する場合(「CREATE TABLESPACE」および「ALTER TABLESPACE」を参照)。表領域の記憶域パラメータに対する変更は、表領域に作成される新しいオブジェクトまたはセグメントに割り当てられる新しいエクステントにのみ影響します。

  • constraint: 制約の適用に使用される索引(パーティション索引の場合は索引のパーティション)の記憶域を指定する場合(constraint」を参照)。

前提条件

STORAGEパラメータの値を変更する場合は、適切なCREATE文またはALTER文を使用するための権限が必要です。

構文

セマンティクス

この項では、storage_clauseのパラメータについて説明します。詳細は、特定のデータベース・オブジェクトに対してこれらの記憶域パラメータを設定または再設定するSQL文の説明を参照してください。

注意:

ローカル管理表領域の場合、storage_clauseの解析方法は異なります。ローカル管理表領域の場合、Oracle Databaseでは、オブジェクトの最初の作成時に割り当てられるエクステント数を計算するために、INITIALNEXTPCTINCREASEおよびMINEXTENTSが使用されます。オブジェクトの作成後、これらのパラメータは無視されます。詳細は、「CREATE TABLESPACE」を参照してください。

INITIAL

オブジェクトの第1エクステントのサイズを指定します。スキーマ・オブジェクトの作成時に、このエクステントに領域が割り当てられます。この句の詳細は、size_clause」を参照してください。

ローカル管理表領域では、初期セグメント・サイズを決定するために、INITIALの値が、ローカル管理の種類(AUTOALLOCATEまたはUNIFORM)と、MINEXTENTSNEXTおよびPCTINCREASEの値とともに使用されます。

  • AUTOALLOCATEエクステント管理の場合、INITIAL設定を使用して、割り当てられるエクステント数を最適化します。エクステントには、64K、1M、8Mおよび64Mのサイズを割り当てることができます。セグメントの作成時に、これらの4つのサイズのうちINITIAL以下で最大のものがシステムによって選択され、そのサイズのエクステントがINITIAL設定に達するのに必要な数だけ割り当てられます。たとえば、INITIALを4Mに設定すると、1Mのエクステントが4つ作成されます。

  • UNIFORMエクステント管理の場合、エクステント数は、初期セグメント・サイズと表領域作成時に指定した均一エクステント・サイズで決定されます。たとえば、エクステントが1Mの均一なローカル管理表領域の場合、INITIALの値を5Mに指定すると、1Mのエクステントが5つ作成されます。

    次の例を比較してみます。AUTOALLOCATEの場合、INITALを72Kに設定すると、初期セグメント・サイズは128K(INITIALを超えるサイズ)になります。64Kより小さいエクステントを割り当てることはできないため、必然的に64Kのエクステントが2つ割り当てられます。INITIALを72Kに設定し、24KのUNIFORMエクステント・サイズを使用する場合は、24Kのエクステント3つが割り当てられるため、72Kに等しくなります。

ディクショナリ管理表領域では、デフォルトの初期エクステント・サイズは5ブロックであり、後続のすべてのエクステントは5ブロックに丸められます。表領域作成時にMINIMUM EXTENTが指定された場合、エクステント・サイズはMINIMUM EXTENTの値に丸められます。

INITIALの制限事項

INITIALALTER文で指定することはできません。

NEXT

オブジェクトに割り当てる次のエクステント・サイズをバイト単位で指定します。この句の詳細は、size_clause」を参照してください。

ローカル管理表領域では、ユーザー指定のNEXTの値はすべて無視され、表領域が自動割当てエクステント管理用に設定されている場合、NEXTのサイズはOracleによって決定されます。UNIFORM表領域では、NEXTのサイズは表領域作成時に指定された均一エクステント・サイズです。

ディクショナリ管理表領域では、デフォルトのサイズは5データ・ブロックです。最小のサイズは1データ・ブロックです。最大値は、ご使用のオペレーティング・システムによって異なります。5データ・ブロックより小さい値が指定された場合、データ・ブロック・サイズの一番近い倍数に丸められます。5データ・ブロックを超える値の場合は、断片化を最小限に抑える値に切り上げられます。

関連項目:

断片化の最小化の詳細は、『Oracle Database概要』を参照してください。

PCTINCREASE

ローカル管理表領域では、初期セグメント・サイズを決定するためにセグメント作成時にPCTINCREASEの値が使用され、その後の領域割当て時にはこのパラメータは無視されます。

ディクショナリ管理表領域では、3番目以降の各エクステントが直前のエクステントに対して増加する割合(パーセント)を指定します。デフォルト値は50です。この場合、3番目以降のエクステントは、それぞれその直前のエクステントより50%ずつ大きくなります。最小値は0で、この場合、第2エクステント以降のエクステントのサイズはすべて同じになります。最大値は、ご使用のオペレーティング・システムによって異なります。計算された各新規エクステントのサイズは、データ・ブロック・サイズの一番近い倍数に丸められます。ALTER文にPCTINCREASEパラメータの値を指定してこの値を変更すると、この変更した値と直前に割り当てられたエクステントのサイズを使用して、次に割り当てるエクステントのサイズが計算されます。

PCTINCREASEの制限事項

PCTINCREASEをロールバック・セグメントに指定することはできません。ロールバック・セグメントでは、PCTINCREASEの値は常に0(ゼロ)です。

MINEXTENTS

ローカル管理表領域では、初期セグメント・サイズを決定するために、MINEXTENTSの値がPCTINCREASEINITIALおよびNEXTの値とともに使用されます。

ディクショナリ管理表領域では、オブジェクトの作成時に割り当てられる合計エクステント数を指定します。最小値(デフォルト)は1です。この場合、第1エクステントのみが割り当てられます。ただし、ロールバック・セグメントの場合、最小値(デフォルト)は2です。最大値は、ご使用のオペレーティング・システムによって異なります。

  • ローカル管理表領域では、領域の初期割当て量を計算するためにMINEXTENTSが使用されます。INITIAL * MINEXTENTSで算出されます。その後、この値は1に設定され、DBA_SEGMENTSビューに反映されます。

  • ディクショナリ管理表領域では、MINEXTENTSは単純に、セグメントに割り当てる必要があるエクステントの最小数です。

MINEXTENTSの値が1より大きい場合、INITIALNEXTおよびPCTINCREASE記憶域パラメータの値に基づいて、次のエクステントのサイズが計算されます。

ALTER文にMINEXTENTSの値を指定して変更する際は、現行の値より小さくすることはできますが、大きくすることはできません。MINEXTENTSをより小さい値に再設定すると便利な場合があります。たとえば、TRUNCATE ... DROP STORAGE文の前で、TRUNCATE操作の後もセグメントがエクステントの最小数を変更しない場合です。

MINEXTENTSの制限事項

MINEXTENTS記憶域パラメータには、次の制限事項があります。

  • MINEXTENTSは、表領域レベルでは適用できません。

  • ALTER文のMINEXTENTSの値、またはローカル管理表領域に存在するオブジェクトに対するMINEXTENTSの値は変更できません。

MAXEXTENTS

この記憶域パラメータは、ディクショナリ管理表領域のオブジェクトに対してのみ有効です。第1エクステントを含めて、Oracleがオブジェクトに割り当てることができるエクステントの総数を指定します。最小値は1です(最小値が常に2のロールバック・セグメントは除きます)。デフォルト値は、データ・ブロックのサイズによって異なります。

MAXEXTENTSの制限事項

MAXEXTENTSは、ローカル管理表領域に存在するオブジェクトに対しては無視されます。ただし、DBA_TABLESPACESデータ・ディクショナリ・ビューの表領域に対し、ALLOCATION_TYPEの値がUSERである場合を除きます。

関連項目:

DBA_TABLESPACESデータ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

UNLIMITED

必要に応じてエクステントが自動的に割り当てられるようにする場合に、UNLIMITEDを指定します。断片化を最小限に抑えるため、この設定をお薦めします。

ロールバック・セグメントにこの句は使用しないでください。この句をロールバック・セグメントに使用すると、長時間実行される特殊なDMLトランザクションによって、ディスクが一杯になるまで新しいエクステントが作成され続ける可能性があります。

注意:

storage_clauseを指定せずに作成したロールバック・セグメントは、ロールバック・セグメントを作成した表領域の記憶域パラメータと同じ設定になります。MAXEXTENTS UNLIMITEDを指定して表領域を作成する場合、ロールバック・セグメントのデフォルトは同じ設定になります。

MAXSIZE

MAXSIZE句を使用すると、記憶域要素の最大サイズを指定できます。LOB記憶域では、MAXSIZEを使用すると、次のようになります。

  • LOB_parametersRETENTION MAXを指定すると、指定されたサイズにLOBセグメントが拡張され、その後、UNDO領域から任意の領域を再利用できます。

  • LOB_parametersRETENTION AUTOMINまたはNONEを指定すると、指定されたサイズはLOBセグメントのサイズの上限値となり、UNDOの保持においてその指定の影響はありません。

UNLIMITED

記憶域要素のディスク領域を制限しない場合は、UNLIMITED句を使用します。この句は、LOB_parametersでのRETENTION MAXの指定と同時には指定できません。両方を指定すると、RETENTION AUTOおよびMAXSIZE UNLIMITEDが使用されます。

FREELISTS

セグメントを手動で領域管理する表領域の場合、セグメント内の挿入ポイント数を増やしてOLTPシステムの領域管理のパフォーマンスを向上させるために、FREELISTS記憶域パラメータが使用されます。セグメントを自動的に領域管理する表領域の場合、変化するワークロードにデータベースが適応するため、このパラメータは無視されます。

セグメントを手動で領域管理する表領域の場合、表領域およびロールバック・セグメント以外のオブジェクトに対して、表、パーティション、クラスタまたは索引の各空きリスト・グループの空きリスト数を指定します。このパラメータの最小値(デフォルト)は1です。この場合、空きリスト・グループごとに1つの空きリストが含まれます。最大値は、データ・ブロックのサイズによって異なります。FREELISTSに指定した値が大きすぎた場合、最大値を示すエラーが戻ります。

LOB_parameters」のSECUREFILEパラメータを指定している場合、この句は無効です。SECUREFILEパラメータおよびFREELISTSの両方を指定した場合、FREELISTSの指定は無視されます。

FREELISTSの制限事項

表領域またはロールバック・セグメントを作成または変更するとき以外は、すべての文のstorage_clauseFREELISTSを指定できます。

FREELIST GROUPS

セグメントを手動で領域管理する表領域の場合、Oracle Real Application Clusters環境でセグメント空き領域を静的にパーティション化するために、この記憶域パラメータの値が使用されます。このパーティション化によって、セグメント・メタデータがインスタンス間で転送されなくなり、領域の割当ておよび割当て解除のパフォーマンスが向上します。セグメントを自動的に領域管理する表領域の場合、インスタンス間ワークロードにOracleが動的に適応するため、このパラメータは無視されます。

セグメントを手動で領域管理する表領域の場合、作成するデータベース・オブジェクトに対する空きリスト・グループ数を指定します。このパラメータの最小値(デフォルト)は1です。Oracleは、Oracle Real Application Clusters(Oracle RAC)インスタンスのインスタンス番号を使用して、各インスタンスを空きリスト・グループにマップします。

1つの空きリスト・グループに、それぞれデータベース・ブロックを1つずつ使用します。そのため、次のようになります。

  • 各空きリスト・グループの最小値に、1データ・ブロックを加えた値を格納できるだけの十分な大きさの値をINITIALの値に指定していない場合、INITIALの値は必要な分だけ引き上げられます。

  • 均一なローカル管理表領域にオブジェクトを作成する場合、空きリスト・グループ数に適応するだけの十分なエクステント・サイズがないと、作成操作は正常に実行されません。

LOB_parameters」のSECUREFILEパラメータを指定している場合、この句は無効です。SECUREFILEパラメータおよびFREELIST GROUPSの両方を指定した場合、FREELIST GROUPSの指定は無視されます。

FREELIST GROUPSの制限事項

FREELIST GROUPSパラメータは、CREATE TABLECREATE CLUSTERCREATE MATERIALIZED VIEWCREATE MATERIALIZED VIEW LOGおよびCREATE INDEX文でのみ指定できます。

OPTIMAL

OPTIMALキーワードは、ロールバック・セグメントのみに指定します。ロールバック・セグメントの最適なサイズをバイト単位で指定します。この句の詳細は、size_clause」を参照してください。

エクステントのデータがアクティブ・トランザクションで不要になった場合、Oracleは、そのエクステントの割当てを動的に解除することによって、指定されたロールバック・セグメントのサイズを維持します。ロールバック・セグメントのサイズの合計をOPTIMAL値より小さくせずに、できるだけ多くのエクステントの割当てを解除します。

OPTIMALには、MINEXTENTSINITIALNEXTおよびPCTINCREASEパラメータで最初に割り当てた領域より小さい値を指定できません。最大値は、ご使用のオペレーティング・システムによって異なります。値は、データ・ブロック・サイズの一番近い倍数に丸められます。

NULL

ロールバック・セグメントに対する最適なサイズがないことを示す場合にNULLを指定します。これは、ロールバック・セグメントのエクステントの割当てが解除されないことを示します。これはデフォルトの動作です。

BUFFER_POOL

BUFFER_POOL句では、スキーマ・オブジェクト用のデフォルトのバッファ・プール(キャッシュ)を定義します。オブジェクトのすべてのブロックは、指定されたキャッシュに格納されます。

  • バッファ・プールがパーティション表またはパーティション索引用に定義されている場合は、パーティションは、パーティション・レベル定義で変更されないかぎり、表定義または索引定義のバッファ・プールを継承します。

  • 索引構成表の場合、索引セグメントおよびオーバーフロー・セグメントに対して個々にバッファ・プールを指定できます。

BUFFER_POOLパラメータの制限事項

BUFFER_POOLには、次の制限事項があります。

  • この句は、クラスタ化表には指定できません。ただし、クラスタには指定できます。

  • この句は、表領域またはロールバック・セグメントには指定できません。

KEEP

KEEPを指定すると、ブロックがセグメントからKEEPバッファ・プールへ移されます。KEEPバッファ・プールに適切なサイズを維持すると、メモリーのスキーマ・オブジェクトが保持され、I/O操作を避けることができます。KEEPは、表、クラスタ、マテリアライズド・ビューまたはマテリアライズド・ビュー・ログに指定するNOCACHE句より優先されます。

RECYCLE

RECYCLEを指定すると、ブロックがセグメントからRECYCLEプールへ移されます。RECYCLEプールに適切なサイズを指定すると、不要なキャッシュ領域が利用されず、デフォルト・プールがRECYCLEプールであるオブジェクト数が削減されます。

DEFAULT

デフォルトのバッファ・プールを識別する場合に、DEFAULTを指定します。これは、KEEPRECYCLEも指定しないオブジェクトのデフォルトです。

関連項目:

複数のバッファ・プールの使用方法については、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

FLASH_CACHE

FLASH_CACHE句を使用すると、自動バッファ・キャッシュ・ポリシーを上書きし、特定のスキーマ・オブジェクトをフラッシュ・メモリーにキャッシュする方法を指定できます。この句を使用するには、システムでデータベース・スマート・フラッシュ・キャッシュ(フラッシュ・キャッシュ)が構成されている必要があります。フラッシュ・キャッシュは、フラッシュ・ディスク(フラッシュ・メモリーを使用するストレージ・デバイス)に格納されるデータベース・バッファ・キャッシュの拡張機能です。フラッシュ・メモリーは磁気ディスクよりも高速であるため、データベースは、磁気ディスクから読み込むかわりに、フラッシュ・キャッシュにバッファをキャッシュすることによってパフォーマンスを向上させることができます。

KEEP

フラッシュ・キャッシュの大きさが十分にあり、スキーマ・オブジェクト・バッファを引き続きフラッシュ・キャッシュにキャッシュする場合は、KEEPを指定します。

NONE

スキーマ・オブジェクト・バッファをフラッシュ・キャッシュにキャッシュしないようにする場合は、NONEを指定します。これにより、より頻繁にアクセスするオブジェクト用にフラッシュ・キャッシュ領域を確保できます。

DEFAULT

メイン・メモリーからエージ・アウトされるときにスキーマ・オブジェクト・バッファをフラッシュ・キャッシュに書き込み、その後、標準のバッファ・キャッシュ置換アルゴリズムによりフラッシュ・キャッシュからエージ・アウトする場合は、DEFAULTを指定します。フラッシュ・キャッシュが構成されている場合に、KEEPまたはNONEを指定しないと、これがデフォルトになります。

注意:

データベース・スマート・フラッシュ・キャッシュは、SolarisおよびOracle Linux環境でのみ使用できます。

関連項目:

ENCRYPT

この句は、表領域を作成する場合にのみ有効です。表領域全体を暗号化するには、ENCRYPTを指定します。CREATE TABLESPACE文にENCRYPTION句を指定する必要もあります。

注意:

ENCRYPT句は、下位互換性を保つためにサポートされています。ただし、Oracle Database 12cリリース2 (12.2)以降は、かわりにtablespace_encryption_clauseENCRYPTを指定できます。詳細は、「CREATE TABLESPACE」の「tablespace_encryption_clause」を参照してください。

Live SQL:

「表記憶域属性の指定」で、Oracle Live SQLに関連する例を参照および実行します。

表の記憶域属性の指定: 例

次の文は、表を作成し、記憶域パラメータ値を指定します。

CREATE TABLE divisions 
    (div_no     NUMBER(2), 
     div_name   VARCHAR2(14), 
     location   VARCHAR2(13) ) 
     STORAGE  ( INITIAL 8M MAXSIZE 1G );

次の文は、表に対して第1エクステントのサイズを問い合せます。

SELECT INITIAL_EXTENT FROM USER_TABLES WHERE TABLE_NAME='DIVISIONS';

INITIAL_EXTENT
--------------
       8388608

STORAGEパラメータに指定した値に基づいて、次に示すとおり表に領域が割り当てられます。

  • INITIALの値は8Mのため、第1エクステントのサイズは8MBになります。

  • MAXSIZEの値は1Gのため、記憶域要素の最大サイズは1GBになります。