ヘッダーをスキップ
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 STORAGE MAP文は次の環境で使用できます。


形式









引数

AREAS

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

COMMENT IS 'string'

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

COMPILE

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

注意

記憶域マップと同じ名前でルーチンがすでに存在する場合は、マッピング・ルーチンは作成されません。

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

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

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を使用すると、表の行の格納に使用される記憶域ファイルを指定できます。ただし次の点に注意が必要です。

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文」を参照してください。


使用方法


例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;