ヘッダーをスキップ

Oracle Rdb SQLリファレンス・マニュアル リリース7.2 E06178-01 |
| 目次 | 索引

戻る | 次へ |

    SQL> -- Show current sequence definition:
    SQL> --
    SQL> SHOW SEQUENCE EMPIDS
         EMPIDS
     Sequence Id: 1
     Initial Value: 1
     Minimum Value: 1
     Maximum Value: 9223372036854775787
     Next Sequence Value: 1
     Increment by: 1
     Cache Size: 20
     No Order
     No Cycle
     No Randomize
    SQL> --
    SQL> -- Alter the sequence.
    SQL> --
    SQL> ALTER SEQUENCE EMPIDS
    cont> MINVALUE 0
    cont> MAXVALUE 2000
    cont> CACHE 30
    cont> ORDER
    cont> CYCLE;
    SQL> --
    SQL> -- Show new definition.
    SQL> --
    SQL> SHOW SEQUENCE EMPIDS
         EMPIDS
     Sequence Id: 1
     Initial Value: 1
     Minimum Value: (none)
     Maximum Value: 2000
     Next Sequence Value: 1
     Increment by: 1
     Cache Size: 30
     Order
     Cycle
     No Randomize

例2: 指定値の順序のリセット

    SQL> show sequence NEW_EMPLOYEE_ID
         NEW_EMPLOYEE_ID
     Sequence Id: 1
     Initial Value: 472
       .
       .
       .
    SQL>
    SQL> alter sequence NEW_EMPLOYEE_ID
    cont> restart with 500;
    SQL>
    SQL> show sequence NEW_EMPLOYEE_ID
         NEW_EMPLOYEE_ID
     Sequence Id: 1
     Initial Value: 500
       .
       .
       .
    SQL>

# ALTER STORAGE MAP文

> 既存の記憶域マップを変更します。記憶域マップは、複数ファイルのデータベースにおいて表のどの行をどの記憶域に格納するかを制御します。

> ALTER STORAGE MAP文は記憶域マップを変更する他に、次を変更するオプションがあります。

> - 表に行を挿入する場合に、データベース・システムでどの索引が使用されるか。

> - 表の行が圧縮形式で格納されるかどうか。

> - データを再構成するかどうか。

> - パーティション化キーが変更可能かどうか。

> - ALTER文を含むトランザクションのロギングをRUJファイルおよびAIJファイルにジャーナリングするかどうか。

## 環境

> ALTER STORAGE MAP文は次の環境で使用できます。

> - 対話型SQL内

> - プリコンパイル対象のホスト言語プログラムに埋め込まれる場合

> - SQLモジュールのプロシージャの一部として

> - 動的SQLで動的に実行される文として

## 形式

## 引数

> ### AREAS

> 記憶域がデータ再構成のターゲットとなるよう指定します。すべての行について、それぞれが適切な記憶域に格納されているかどうかのチェックが行われ、適切な記憶域に格納されていない行は移動します。これはデフォルトです。

> ### COMMENT IS 'string'

> 記憶域マップに関するコメントを追加または変更します。SQLでは、SHOW STORAGE MAPS文の実行時にコメントのテキストが表示されます。コメントは一重引用符（'）で囲み、コメント内の複数の行はスラッシュ（/）で区切ります。

> ### COMPILE

> 記憶域マップのWITH LIMIT OF句に一致するSQLマッピング・ルーチンを作成します。このルーチンはシステム・モジュールRDB$STORAGE_MAPS（表示にはSHOW SYSTEM MODULESを使用）に自動的に作成されます。記憶域マップ名を使用して、マッピング・ルーチン（表示にはSHOW SYSTEM FUNCTIONSを使用）に名前を付けます。

> 注意 記憶域マップと同じ名前でルーチンがすでに存在する場合は、マッピング・ルーチンは作成されません。 記憶域マップがSTORE COLUMNS句を含む、つまり、垂直にパーティション化されたマップの場合は、いくつかルーチンが作成され、接尾辞として垂直パーティション化番号を追加して一意の名前を作成します。

> マッピング・ルーチンは次の値を返します。

> - ゼロ（0）: 記憶域マップはRANDOMLY ACROSSとして定義されます。このルーチンは単なる記述プレースホルダです。

> - 記憶域マップ番号を表す正の値（RDB$STORAGE_MAP_AREAS表のRDB$ORDINAL_POSITION列に格納されているものと同じ値）: これらの値をSET TRANSACTION...RESERVING句のPARTITION句とともに使用して、行の挿入の前に特定のパーティションを予約します。

> - -1: 記憶域マップにOTHERWISE句がない場合。これは、WITH LIMIT OF句のいずれとも一致しないため、行が挿入できないことを示します。

> ### ENABLE COMPRESSION

> ### DISABLE COMPRESSION

> 表内の行を格納する際、圧縮するかどうかを変更します。圧縮を有効にすると、ディスク領域は節約できますが、圧縮行の挿入と検索にはさらにCPUオーバーヘッドが発生します。

> COMPRESSION句を変更すると、データベース・システムでは、表内のすべての行が読み取られた後、変更した形式で再び表に書き込まれます。有効にした圧縮を後で無効にすると、レコードが断片化されることがあります。これは、そのレコードに使用できる領域が十分に確保されないためです。

> ### FILL RANDOMLY

> ### FILL SEQUENTIALLY

> 領域セットをランダムに使用するか、または順に使用するかを指定します。FILL RANDOMLYまたはFILL SEQUENTIALLYを指定する場合はFOR句が必要です。記憶域を使用すると、その記憶域は空き領域のリストから削除されます。Oracle Rdbでは、現在のデータベースのアタッチ中は、この領域にリストは格納されません。かわりに、次に指定した領域が使用されます。

> 領域セットが順に使用される場合は、最初に指定した領域が使用されるまで、その領域にリストが格納されます。

> 領域セットがランダムに使用される場合は、リストは複数の領域に格納されます。これはデフォルトです。ランダム使用は、記憶域全体へのI/O分散による利点があります。

> キーワードFILL RANDOMLYおよびFILL SEQUENTIALLYは、領域リスト内に含まれる領域にのみ適用されます。

> ### FOR (table-name)

> この記憶域マップが適用される1つ以上の表を指定します。指定した表は定義されている必要があります。複数の表のリストを記憶域に格納する場合は、表名をカンマで区切ります。それぞれの領域に1つのFOR句を指定できますが、すべての領域で表名のリストが指定されていないかぎり、この文は使用しないでください。

> ### FOR (table-name.col-name)

> この記憶域マップが適用されるリストを含む表と列の名前を指定します。表名と列名はピリオド（.）で区切ります。指定した表と列は定義されている必要があります。複数のリストを記憶域に格納する場合は、表名と列名の組合せをカンマで区切ります。それぞれの領域には、1つのFOR句と列名のリストを指定できます。

> ### LOGGING

> LOGGING句は、ALTER STORAGE MAP文がリカバリ・ユニット・ジャーナル・ファイル（.ruj）とアフター・イメージ・ジャーナル・ファイル（.aij）に記録されることを指定します。デフォルトはLOGGING句です。

> ### NOLOGGING

> NOLOGGING句は、ALTER STORAGE MAP文がリカバリ・ユニット・ジャーナル・ファイル（.ruj）とアフター・イメージ・ジャーナル・ファイル（.aij）に記録されないことを指定します。

> ### NO PLACEMENT VIA INDEX

> PLACEMENT VIA INDEX句の否定に相当します。この句を指定すると、格納された後続のレコードは、PLACEMENT VIA INDEX句に指定された索引を使用して格納されません。ALTER STORAGE MAP文にPLACEMENT VIA INDEXとNO PLACEMENT VIA INDEXのどちらの引数も指定しない場合、この文は、CREATE STORAGE MAP文または最後のALTER STORAGE MAP文に指定された句が使用された場合と同様に実行されます。

> ### NO REORGANIZE

> PARTITIONING IS NOT UPDATABLEの再構成が無効になります。

> ### PAGES

> データベース・ページがデータ再構成のターゲットとなるよう指定します。すべての行について、それぞれが適切な記憶域に格納されているかどうかのチェックが行われ、適切な記憶域に格納されていない行は移動します。その後、すべての行に対して、各記憶域内部で移動が必要な行があるかどうかチェックされ、新規のターゲット・ページまたはその付近に空き領域があれば、対象となる行を移動します。

> ### PARTITION name

> パーティションに名前を付けます。言語がSQL99に設定されている場合、この名前にデリミタ付き識別子を指定できます。パーティション名は記憶域マップで一意である必要があります。この句を指定しない場合は、Oracle Rdbでパーティションのデフォルト名が生成されます。

> ### PARTITIONING IS UPDATABLE

> パーティション化キーが変更可能であることを指定します。パーティション化キーはSTORE USING句で指定した列または列のリストです。

> パーティション化の詳細は、『Oracle Rdb7 Guide to Database Design and Definition』を参照してください。

> ### PLACEMENT VIA INDEX index-name

> PLACEMENT VIA INDEX引数の詳細は、「CREATE STORAGE MAP文」を参照してください。

> ### RENAME PARTITION partition-name TO new-partition-name

> 既存の記憶域マップのパーティションに新規名を指定します。

> ### REORGANIZE

> 新規行および指定した表に格納されている行が、ALTER STORAGE MAP文のSTORE句に指定されたパーティションに従って移動します。REORGANIZE句は、記憶域マップの1つ以上の領域に対して適用されます。

> REORGANIZE引数が指定されているかどうかに応じて行が記憶域間をどのように移動するかまたは移動しないかの詳細は、『Oracle Rdb7 Guide to Database Design and Definition』を参照してください。

> ### STORAGE MAP map-name

> 変更する記憶域マップの名前を指定します。

> ### store-clause

> 既存の記憶域マップを置き換える新規の記憶域マップ定義です。store-clauseを使用すると、表の行の格納に使用される記憶域ファイルを指定できます。ただし次の点に注意が必要です。

> - 1つの表のすべての行は単一の記憶域に関連付けられます。

> - 1つの表の行は複数の記憶域に分散できます。

> - 1つの表の行は、特定の記憶域の列の値に上限を設定することによって、複数の記憶域に体系的に分散（水平にパーティション化）できます。

> store-clauseでは、行を領域に関連付ける方法のみを指定し、行を領域内のページに割り当てる方法は指定しません。

> store-clauseの構文の詳細は、「CREATE STORAGE MAP文」を参照してください。ただし、ALTER STORAGE MAP文におけるこの句の影響は、既存の記憶域マップの変更方法によって異なります。

> ### STORE LISTS IN area-name

> 指定した記憶域の表から、リストを格納するようデータベース・システムに指示します。同一領域に複数の表のリストを格納できます。各データベースに作成できるリストの記憶域マップは1つのみです。

> リストのデフォルト記憶域を指定する必要があります。デフォルトの記憶域には、CREATE DATABASEで指定したLIST STORAGE AREAを使用します。それが存在しない場合は、DEFAULT STORAGE AREAを使用します。それも存在しない場合は、RDB$SYSTEMが使用されます。

> 詳細は、「CREATE STORAGE MAP文」を参照してください。

> ### threshold-clause

> 各ページの形式が均一の論理領域にSPAMしきい値を指定します。

> THRESHOLD句を丸カッコで囲まないで指定すると、ALTER STORAGE MAP文で指定したすべての記憶域に対して、デフォルトのしきい値を指定します。記憶域マップの一部である記憶域のしきい値は変更できません。この句は、ALTER STORAGE MAP文により記憶域マップに追加される記憶域に対してのみ指定します。

> 特定の記憶域にしきい値を指定する場合は、STORE句の中にこの句を指定し、THRESHOLD句を丸カッコで囲みます。新規の領域にのみしきい値を指定でき、既存の領域には指定できません。

> THRESHOLD句の指定の例は、『Oracle Rdb7 Guide to Database Design and Definition』を参照してください。THRESHOLD句の詳細は、「CREATE STORAGE MAP文」を参照してください。

## 使用方法

> - その記憶域マップが参照している表が同時に問合せに含まれている場合に、記憶域マップを変更しようとすると失敗します。記憶域マップを変更する前に、ユーザーはDISCONNECT文でデータベースからデタッチする必要があります。Oracle Rdbが最初に記憶域マップなどのオブジェクトにアクセスすると、そのオブジェクトにロックがかけられ、ユーザーがそのデータベースを終了するまで解除されません。このオブジェクトを更新しようとすると、もう1人のユーザーがこのオブジェクトにアクセスしているため、「lock conflict on client」のメッセージが表示されます。
>   同様に、記憶域マップの変更中、ALTER文に対してCOMMIT文またはROLLBACK文を使用してトランザクションを完了するまで、ユーザーは記憶域マップが参照する表に関連する問合せを実行できません。実行しようとすると、「lock conflict on client」のエラー・メッセージが表示されます。DDL操作の実行中は、システム表に対して通常のデータ・ロック・メカニズムが使用されます。したがって、オブジェクトの更新中は、そのオブジェクトへの問合せがロックされます。これらのロックは、DDL操作がコミットまたはロールバックされるまで解除されません。

> - 次に、REORGANIZE句の動作に関する注意点を説明します。

>   - 元の記憶域マップでは指定されていた記憶域が、現在ALTER STORAGE MAP STORE句で指定されていない場合、それらの行はその記憶域から別の記憶域へ移動し、新規のマップ定義に従って格納されます。この表から移動した行は、参照されていない記憶域から削除されます。

>   - 新規の記憶域マップ定義でREORGANIZE AREAS句が指定されている場合、Oracle Rdbでは、その他すべての行について、それらが適切な記憶域内にあるかどうかチェックされます。適切な記憶域内にない場合は、現在の記憶域から削除され、適切な記憶域に格納されます。

>   - ALTER STORAGE MAP文でREORGANIZE PAGES句が指定されている場合、Oracle Rdbでは、新規行として格納される場合、格納先のページに移動可能な行についてチェックされます。優先ページに適した行、または現在のページよりも優先ページの近くにあるページに適した行は、それぞれのページに移動します。

>   - REORGANIZE句を指定する際に、新規の記憶域マップ定義にWITH LIMIT OF句が含まれる場合、新規の制限値を指定するかどうかにかかわらず、すべての行が読み取られ再度格納されます。

>   - 新規の記憶域マップ定義にCOMPRESSION句のみが含まれる場合、REORGANIZE句を指定するかどうかにかかわらず、すべての行が読み取られ、圧縮特性が変更され、すべての行が再度格納されます。

> - ALTER STORAGE MAP文の中にREORGANIZE句を指定せず、元の記憶域マップ定義に含まれていた記憶域の名前が新規の記憶域マップ定義から除外されている場合、Oracle Rdbではデータベース行が次のように処理されます。

>   - 新規の記憶域マップに従って、除外された記憶域から指定した記憶域に行がアンロードされます。

>   - 指定したWITH LIMIT OF句に従って、指定した記憶域に行が格納されます。

>   - COMPRESSION句に指定された特性に従って、行が圧縮されます。

> - 読取り専用の記憶域の再構成またはそれ以外の変更を行う場合は、ALTER STORAGE MAP文を使用しないでください。読取り専用として指定された記憶域は、ALTER STORAGE MAP文を使用して変更する前に、読取り/書込み記憶域に変更する必要があります。

> - リストおよび表は別個の記憶域に格納できます。

> - リストの記憶域マップが参照する記憶域は削除できません。ただし、別の記憶域を追加できます。

> - 1つの列または表を領域の異なる記憶域マップに繰り返し指定すると、データ型LIST OF BYTE VARYINGのすべての列は、指定した領域全体でランダムに格納されます。

> - 記憶域マップにオーバーフロー・パーティション（OTHERWISE句によって定義）が含まれない場合は、記憶域マップを変更し、記憶域を再構成せずに新規の追跡パーティションを追加できます。詳細は、「CREATE STORAGE MAP文」の「使用方法」を参照してください。

> - 記憶域マップにオーバーフロー・パーティションが含まれ、そのオーバーフロー・パーティションを記憶域マップから削除する場合は、REORGANIZE句を使用する必要はありません。可能な場合、Oracle Rdbでは、既存のデータが適切な記憶域に移動されます。ただし、パーティション化キーの値が新しい最後尾のパーティションに対するWITH LIMIT OF句に違反しているため、一部の行が移動できない場合もあります。

> - 記憶域マップに含まれているオーバーフロー・パーティションをWITH LIMIT OF句で定義したパーティションに変更する場合、そのオーバーフロー・パーティションに格納されている既存のデータを適切な記憶域に移動するには、REORGANIZE句を使用する必要があります。
>   オーバーフロー・パーティションの省略方法（および一般的な記憶域マップの変更方法）の詳細は、『Oracle Rdb7 Guide to Database Design and Definition』を参照してください。

> - ALTER STORAGE MAP...PARTITIONING IS NOT UPDATABLE句を使用すると、既存の記憶域マップを、厳密にパーティション化された記憶域マップに変換できます。
>   この文を使用すると、実表に対する再構成操作が暗黙的に実行されます。その際、必要に応じてマップ内で行が移動されますが、格納されたすべてのデータが記憶域マップ定義に準拠していることを確認するため、記憶域のスキャンが必ず実行されます。これにより、Oracle Rdbのオプティマイザでは、順次スキャンで記憶域のサブセットを使用する場合、このタイプの表を効果的に使用できます。
>   多くの場合、データベース管理者は、サイズの大きな表が厳密にパーティション化されていても、表の再構成は非常に困難なことを認識しています。I/Oのみでも数時間かかる場合があります。このため、データベース管理者は、NO REORGANIZE句を使用して、ALTER STORAGE MAP...PARTITIONING IS NOT UPDATABLE句によって実行される自動再構成操作を回避できます。
>   Oracle Rdbでは表のパーティション化の検証が実行されていないため、順次スキャンによって行が失われるリスクがあります。データベース管理者は、この句を使用する場合はこのリスクを考慮する必要があります。ALTER STORAGE MAP...REORGANIZE操作はできるかぎり早く実行することをお薦めします。
>   NO REORGANIZE句が使用されている場合、Oracle Rdbでは、Oracle Rdbシステム・リレーションにこの情報が記録されます。SHOW STORAGE MAP文を使用すると、情報テキストが表示されます。再構成アクションのトレースを表示する場合はSET FLAGS STOMAP_STATSを使用します。

> - NO REORGANIZE句は、PARTITIONING IS NOT UPDATABLEとともに使用しないかぎり無視されます。これは、自動再構成が必須ではないこと、あるいは新規のマップ構造を実装するには表の完全な再構成が必要であることによるものです。

> - 次の例に示すように、同一のALTER STORAGE MAPコマンド内では、REORGANIZE句とNO REORGANIZE句は同時に使用できません。

>       SQL> ALTER STORAGE MAP EMPLOYEES_MAP
>       cont>     PARTITIONING IS NOT UPDATABLE
>       cont>     NO REORGANIZE
>       cont>     REORGANIZE AREAS
>       cont>     STORE
>       cont>         USING (EMPLOYEE_ID)
>       cont>             IN EMPIDS_LOW
>       cont>                 WITH LIMIT OF ('00200')
>       cont>             IN EMPIDS_MID
>       cont>                 WITH LIMIT OF ('00400')
>       cont>             OTHERWISE IN EMPIDS_OVER;
>       %SQL-F-MULTSPECATR, Multiple specified attribute. "REORGANIZE" was specified
>       more than once

> - SET FLAGSオプションのSTOMAP_STATSを指定すると、NO REORGANIZEが使用されたことを示すメッセージが出力されます。

> - SHOW STORAGE MAPS文を実行すると、次の例のように、NO REORGANIZEが使用されたことを示すメッセージが出力されます。

>       SQL> SHOW STORAGE MAPS EMPLOYEES_MAP
>            EMPLOYEES_MAP
>        For Table:             EMPLOYEES
>        Placement Via Index:   EMPLOYEES_HASH
>        Partitioning is:       NOT UPDATABLE
>        Strict partitioning was not validated for this table
>        ...

## 例

> 例1: ALTER STORAGE MAP文を使用した記憶域データの再構成

> 次の例では、601から900までの従業員ID番号を処理し、既存の記憶域EMPIDS_OVERのデータを再構成するための記憶域EMPIDS_MID2を新規に定義します。601から900までの従業員ID番号の従業員について格納された現在のデータは、新規の制限値に従って移動します。AREAオプションやPAGEオプションは指定されていないため、記憶域での再構成はデフォルトの方法で実行されます。

>     SQL> ALTER DATABASE FILENAME mf_personnel ADD STORAGE AREA
>     cont> EMPIDS_MID2 PAGE FORMAT IS MIXED;
>     SQL> ATTACH 'FILENAME mf_personneL';
>     SQL> ALTER STORAGE MAP EMPLOYEES_MAP
>     cont>  STORE USING (EMPLOYEE_ID)
>     cont>        IN EMPIDS_LOW WITH LIMIT OF ('00300')
>     cont>        IN EMPIDS_MID WITH LIMIT OF  ('00600')
>     cont>        IN EMPIDS_MID2 WITH LIMIT OF ('00900')
>     cont>           OTHERWISE IN EMPIDS_OVER
>     cont>           REORGANIZE;

> 例2: ALTER STORAGE MAP文による圧縮の有効化

> 次の例では、記憶域マップUNIFORM1_MAPを新規に定義し、記憶域UNIFORM1の論理領域にしきい値を指定します。行の圧縮の有効化にはALTER STORAGE MAP文が使用されます。

>     SQL> ALTER DATABASE FILENAME mf_personnel
>     cont>  ADD STORAGE AREA UNIFORM1;
>     SQL> ATTACH 'FILENAME mf_personnel';
>     SQL> CREATE TABLE TEST (COL1 REAL);
>     SQL> CREATE STORAGE MAP UNIFORM1_MAP FOR TEST
>     cont>  STORE IN UNIFORM1
>     cont>    (THRESHOLDS ARE (80,90,95));
>     SQL> ALTER STORAGE MAP UNIFORM1_MAP
>     cont>  STORE IN UNIFORM1
>     cont>  ENABLE COMPRESSION;

> 例3: オーバーフロー・パーティションのWITH LIMIT OFパーティションへの変更

> オーバーフロー・パーティションをWITH LIMIT OF句で定義したパーティションに変更する場合、そのオーバーフロー・パーティションに格納されている既存のデータを適切な記憶域に移動するには、REORGANIZE句を使用する必要があります。たとえば、次の例では、EMPLOYEE_IDが10001である行がJOB_HISTORY表に含まれ、記憶域マップJH_MAPが定義されていると仮定します。

>     SQL> SHOW STORAGE MAP JH_MAP
>          JH_MAP
>      For Table:             JOB_HISTORY
>      Compression is:        ENABLED
>      Store clause:          STORE USING (EMPLOYEE_ID)
>                                   IN PERSONNEL_1 WITH LIMIT OF ('00399')
>                                   IN PERSONNEL_2 WITH LIMIT OF ('00699')
>                             OTHERWISE IN PERSONNEL_3
>     SQL>

> 記憶域PERSONNEL_3を、オーバーフロー・パーティションから10,000を制限値とするパーティションに変更し、PERSONNEL_4を追加する場合は、Oracle Rdbにより既存の行が新規の記憶域に移動されるようにREORGANIZE句を使用する必要があります。次の例では、この変更を実行するためのALTER STORAGE MAP文を示します。

>     SQL> ALTER STORAGE MAP JH_MAP
>     cont>      STORE USING (EMPLOYEE_ID)
>     cont>            IN PERSONNEL_1 WITH LIMIT OF ('00399')
>     cont>            IN PERSONNEL_2 WITH LIMIT OF ('00699')
>     cont>            IN PERSONNEL_3 WITH LIMIT OF ('10000')
>     cont>            IN PERSONNEL_4 WITH LIMIT OF ('10399')
>     cont>      REORGANIZE;
>     SQL>

> 例4: RUJファイルおよびAIJファイルへのロギングの無効化

>     SQL> ATTACH'FILENAME MF_PERSONNEL.RDB';
>     SQL> ALTER STORAGE MAP EMPLOYEES_MAP
>     cont>   STORE
>     cont>       USING (EMPLOYEE_ID)
>     cont>           IN EMPIDS_LOW
>     cont>               WITH LIMIT OF ('00200')
>     cont>           IN JOBS
>     cont>               (NOLOGGING)
>     cont>               WITH LIMIT OF ('00400')
>     cont>           OTHERWISE IN EMPIDS_OVER;
>     %RDB-W-META_WARN, metadata successfully updated with the reported warning
>     -RDMS-W-DATACMIT, unjournaled changes made; database may not be recoverable

> 例5: PARTITIONING IS NOT UPDATABLEに対する記憶域スキャンの無効化

> 記憶域マップがNOT UPDATABLEに変更されると、REORGANIZEスキャンが暗黙的に実行され、すべての行がその記憶域マップ内のWITH LIMIT OF句に準拠した適切な記憶域に含まれているかどうかのチェックが実行されます。このスキャンには時間がかかる場合があり、状況を把握しているデータベース管理者は、データがすでに記憶域マップに完全に準拠していることがわかっている場合があります。次の例では、NO REORGANIZE句を使用して追加I/Oを回避します。データベース管理者は、記憶域マップに適切な行マッピングが反映されていない場合にこの句を使用すると、（順次スキャンに対して）問合せ結果が不正確になる可能性があることを認識する必要があります。

>     SQL> SET FLAGS 'stomap_stats';
>     SQL> ALTER STORAGE MAP EMPLOYEES_MAP
>     cont>     PARTITIONING IS NOT UPDATABLE
>     cont>     NO REORGANIZE
>     cont>     STORE
>     cont>         USING (EMPLOYEE_ID)
>     cont>             IN EMPIDS_LOW
>     cont>                 WITH LIMIT OF ('00200')
>     cont>             IN EMPIDS_MID
>     cont>                 WITH LIMIT OF ('00400')
>     cont>             OTHERWISE IN EMPIDS_OVER;
>     ~As: starting map restructure...
>     ~As: REORGANIZE needed to preserve strict partitioning
>     ~As: NO REORGANIZE was used to override scan
>     ~As: reads: async 0 synch 21, writes: async 7 synch 3
>     SQL>
>     SQL> SHOW STORAGE MAPS EMPLOYEES_MAP
>          EMPLOYEES_MAP
>      For Table:             EMPLOYEES
>      Placement Via Index:   EMPLOYEES_HASH
>      Partitioning is:       NOT UPDATABLE
>      Strict partitioning was not validated for this table
>      Comment:        employees partitioned by "00200" "00400"
>      Store clause:          STORE
>                  using (EMPLOYEE_ID)
>                      in EMPIDS_LOW
>                          with limit of ('00200')
>                      in EMPIDS_MID
>                          with limit of ('00400')
>                      otherwise in EMPIDS_OVER
>      Compression is:        ENABLED
>     SQL>

> 次の例に示すように、後続のALTER STORAGE MAP...REORGANIZE文は、パーティション化を検証します。

>     SQL> ALTER STORAGE MAP EMPLOYEES_MAP
>     cont>     PARTITIONING IS NOT UPDATABLE
>     cont>     REORGANIZE;
>     ~As: starting map restructure...
>     ~As: starting REORGANIZE...
>     ~As: reorganize AREAS...
>     ~As: processing rows from area 69
>     ~As: processing rows from area 70
>     ~As: processing rows from area 71
>     ~As: reads: async 408 synch 22, writes: async 3 synch 0
>     SQL>

> 例6: 記憶域マップのWITH LIMIT OF句に一致するSQLルーチンの再定義

> ALTER STORAGE MAPコマンドを実行すると、既存のマッピング・ルーチンが削除され、STORE句またはCOMPILEオプションが使用されている場合は、マッピング・ルーチンが再定義されます。

>     SQL> alter storage map EMPLOYEES_MAP
>     cont>     store
>     cont>         using (EMPLOYEE_ID)
>     cont>             in EMPIDS_LOW
>     cont>                 with limit of ('00200')
>     cont>             in EMPIDS_MID
>     cont>                 with limit of ('00400')
>     cont>             in EMPIDS_OVER
>     cont>                 with limit of ('00800');
>     SQL>
>     SQL> show system function (source) EMPLOYEES_MAP;
>     Information for function EMPLOYEES_MAP

>      Source:
>     return
>         case
>             when (:EMPLOYEE_ID <= '00200') then 1
>             when (:EMPLOYEE_ID <= '00400') then 2
>             when (:EMPLOYEE_ID <= '00800') then 3
>             else -1
>         end case;