データ・ウェアハウスに対してパラレルの挿入、更新または削除操作を使用して、データ・ウェアハウス・データベースをリフレッシュする予定があるときは、物理データベースを設計する際にさらに考慮すべき項目があります。これらの考慮事項はパラレル実行操作には影響しません。次に示す項目です。
パラレル制限に違反すると、操作はシリアルで実行されるだけです。ダイレクト・パスINSERT
制限に違反すると、APPEND
ヒントが無視され、従来の挿入操作が実行されます。エラー・メッセージは返されません。
パラレルDML itl
不変プロパティのない表(Oracle9iリリース2 (9.2)よりも前に作成された表、またはCOMPATIBLE
初期化パラメータを9.2
より小さい値に設定して作成された表)については、並列度(DOP)はパーティションまたはサブパーティションの数と等しくなります。つまり、表がパーティション化されていない場合、問合せはシリアルで実行されます。このプロパティのない表を確認するには、次の文を発行します。
SELECT u.name, o.name FROM obj$ o, tab$ t, user$ u WHERE o.obj# = t.obj# AND o.owner# = u.user# AND bitand(t.property,536870912) != 536870912;
トランザクション表とも呼ばれるInterested Transaction List(ITL)の詳細は、『Oracle Database概要』を参照してください。
グローバル索引がある場合、グローバル索引セグメントとグローバル索引ブロックは同じパラレルDML文のサーバー・プロセスによって共有されます。操作が同じ行に対して実行されなくても、サーバー・プロセスは同じ索引ブロックを共有できます。各サーバー・トランザクションは、索引ブロックに変更を行う前に、索引ブロック・ヘッダーの1つのトランザクション・エントリを必要とします。このため、CREATE
INDEX
文またはALTER
INDEX
文では、INITRANS
(各データ・ブロックに割り当てられるトランザクションの初期値)を、その索引に対する最大DOPなどの大きな値に設定する必要があります。
ディクショナリ管理表領域のセグメントで使用可能なトランザクション空きリスト数には制限があります。セグメントが作成されると、プロセス空きリストとトランザクション空きリストの数は固定され、変更できません。セグメント・ヘッダーでプロセス空きリストの数として大きな値を指定すると、それによって使用可能なトランザクション空きリストの数が制限されることがあります。この制限を避けるには、次にセグメント・ヘッダーを再作成するときに、プロセス空きリストの数を減らします。こうすると、セグメント・ヘッダーでトランザクション空きリストのための余裕ができます。
UPDATE
およびDELETE
操作では、各サーバー・プロセスが独自のトランザクション空きリストを必要とする場合があります。このため、パラレルDMLのDOPは、表とDML文でメンテナンスする必要があるすべてのグローバル索引に対して使用可能な、トランザクション空きリストの最小数によって事実上制限されます。たとえば、表に25のトランザクション空きリストがあるとき、その表に2つのグローバル索引があり、1つの索引に50のトランザクション空きリスト、もう1つの索引に30のトランザクション空きリストがあるとすると、DOPの制限は25になります。この表のトランザクション空きリストが40であれば、DOPの制限は30になります。
STORAGE
句のFREELISTS
パラメータは、プロセス空きリストの数を設定するために使用されます。デフォルトではプロセス空きリストは作成されません。
トランザクション空きリストのデフォルト数はブロック・サイズによって異なります。たとえば、プロセス空きリストの数が明示的に設定されない場合、デフォルトでは4KBのブロックに対して約80のトランザクション空きリストになります。トランザクション空きリストの最小数は25です。
[NO]LOGGING
句は、表、パーティション、表領域および索引に適用されます。NOLOGGING
句を使用すると、事実上、特定の操作(ダイレクト・パスINSERT
など)に対してログが生成されません。NOLOGGING
属性はINSERT
文のレベルでは指定されませんが、表、パーティション、索引または表領域に対してALTER
文またはCREATE
文を使用して指定されます。
表または索引にNOLOGGING
が設定されると、パラレルまたはシリアルのダイレクト・パスINSERT
操作ではREDOログが生成されません。NOLOGGING
オプションが設定されて実行しているプロセスは、REDOが生成されないため、処理が速くなります。ただし、表、パーティションまたは索引に対するNOLOGGING
操作の後、バックアップを実行する前にメディア障害が発生すると、変更されたすべての表、パーティションおよび索引が破損することがあります。
NOLOGGING
句が使用されている場合、ダイレクト・パスINSERT
操作(ディクショナリ更新以外)では、REDOログは常に生成されません。NOLOGGING
属性はUNDOには影響せず、REDOのみに影響します。正確には、NOLOGGING
を使用すると、ダイレクト・パスINSERT
操作ではごくわずかのREDO(フル・イメージREDOとは逆のレンジ無効REDO)が生成されます。
下位互換性のため、CREATE
TABLE
文での代替キーワードとして[UN]RECOVERABLE
も引き続きサポートされています。ただし、この代替キーワードは今後のリリースでサポートが終了する可能性があります。
表領域レベルでは、LOGGING句によって、その表領域に作成されるすべての表、索引およびパーティションのデフォルト・ロギング属性が指定されます。既存の表領域のロギング属性がALTER
TABLESPACE
文によって変更されると、ALTER
文の後で作成されたすべての表、索引およびパーティションには新しいロギング属性が適用されます。既存の表、索引、パーティションのロギング属性は変化しません。表領域レベルのロギング属性は、表、索引またはパーティション・レベルの指定で上書きできます。
デフォルトのロギング属性はLOGGING
です。ただし、ALTER
DATABASE
NOARCHIVELOG
を発行してデータベースをNOARCHIVELOG
モードにした場合、ロギング属性の指定にかかわらず、ロギングなしで実行できるすべての操作ではログが生成されなくなります。