REORG INDEXES/TABLE コマンド (ADMIN_CMD プロシージャーを使用)
REORG INDEXES/TABLE コマンドは、索引または表を再編成します。
フラグメント化されていない物理的に連続したページに索引データを再構築することによって、表に定義されたすべての索引を再編成することができます。データ・パーティション表では、パーティション表で特定の非パーティション索引を再編成すること、もしくは特定のデータ・パーティションですべてのパーティション索引を再編成することができます。
索引節の CLEANUP オプションを指定すると、索引を再作成しないでクリーンアップが実行されます。 表の特定の索引をクリーンアップすることも、表のすべての索引をクリーンアップすることもできます。
このコマンドを宣言済み一時表または作成済み一時表の索引に対して使用することはできません (SQLSTATE 42995)。
SQL1419N のエラーを出して失敗します。有効範囲
このコマンドは、データベース・パーティション・グループ内のすべてのデータベース・パーティションに影響を与えます。
許可
- SYSADM
- SYSCTRL
- SYSMAINT
- DBADM
- SQLADM
- 表に対する CONTROL 特権
必要な接続
データベース
コマンド構文
コマンド・パラメーター
- INDEXES ALL FOR TABLE table-name
- 索引を再編成する表を指定します。 表は、ローカルまたはリモート・データベースにあるものです。
- INDEX index-name
- データ・パーティション表上の再編成する特定の索引を指定します。
個別索引の再編成は、パーティション表上の非パーティション索引についてのみ サポートされています。このパラメーターは、ブロック索引に関してはサポートされていません。
- FOR TABLE table-name
- 非パーティション索引 index-name が作成される表の名前を指定します。 索引名がデータベースを通じて固有であるなら、このパラメーターはオプションです。
- TABLE table-name
- 再編成する表を指定します。
表は、ローカルまたはリモート・データベースにあるものです。
schema.table-name 形式の名前あるいは別名を使用することができます。
schema には、表作成時のユーザー名が入ります。
スキーマ名を省略した場合、
デフォルトのスキーマが想定されます。
RECLAIM EXTENTS パラメーターは、カラム・オーガナイズ表でサポートされる唯一のパラメーターです。
型付き表の場合、指定する表名は階層のルート表の名前でなければなりません。
マルチディメンション・クラスタリング (MDC) 表または挿入時クラスタリング (ITC) 表の再編成に対して索引を指定することはできません。 表の再編成を MDC 表または ITC 表に対してインプレースで使用することはできません。
データ・パーティション表における表の再編成に対して ON DATA PARTITION 節が指定されている場合、指定されたデータ・パーティションのみが再編成されます。- 表に対して非パーティション索引 (システム生成の XML パス索引を除く) が定義されていない場合は、アクセス・モードは、指定したパーティションにのみ適用されます。 ユーザーは表の他のパーティションから読み取ったりそこに書き込んだりできます。
- 表に非パーティション索引が定義されている場合 (システム生成された XML パス索引を除く)、ALLOW NO ACCESS モードがデフォルトとなり、サポートされる唯一のアクセス・モードになります。この場合、その表は ALLOW NO ACCESS モードになります。ALLOW READ ACCESS が指定されている場合、SQL1548N が戻されます (SQLSTATE 5U047)。
表 1. 非パーティションおよびパーティション表における CLASSIC 表の再編成に対してサポートされるアクセス・モード コマンド 表タイプ Table partitioning clause サポートされるアクセス・モード REORG TABLE 非パーティション表 該当なし ALLOW NO ACCESS,
ALLOW READ ACCESS1REORG TABLE パーティション表 指定なし ALLOW NO ACCESS1REORG TABLE (索引がない、または表にパーティション索引のみが定義されている) パーティション表 ON DATA PARTITION ALLOW NO ACCESS,
ALLOW READ ACCESS1REORG TABLE (システム生成された XML パス索引を除き、表に非パーティション索引が定義されていない) パーティション表 ON DATA PARTITION ALLOW NO ACCESS1
注:- アクセス節が指定されていない場合のデフォルト・モード。
データ・パーティション表の場合、 表を再編成すると、表が再編成された後にその表の非パーティション索引およびパーティション索引が再作成されます。 ON DATA PARTITION 節を使用して、データ・パーティション表の特定のデータ・パーティションを再編成する場合、表の再編成によって、指定したパーティションのみで非パーティション索引およびパーティション索引が再作成されます。
Index clause
- ALLOW NO ACCESS
- REORG INDEXES の場合、索引が再編成される間に、他のユーザーがその表にアクセスできないことを指定します。
パーティション表に対して ON DATA PARTITION 節が指定されている場合、その指定されたパーティションのみがこのアクセス・モード・レベルに制限されます。
REORG INDEX の場合、非パーティション索引の再編成中に、他のユーザーがその表にアクセスできないことを指定します。
- ALLOW READ ACCESS
- REORG INDEXES の場合、索引が再編成される間に、他のユーザーがその表に対して、読み取り専用でアクセスできることを指定します。
CLEANUP オプションまたは RECLAIM EXTENTS オプション、あるいは ON DATA PARTITION 節が指定されていない限り、パーティション表の REORG INDEXES に対して ALLOW READ ACCESS モードはサポートされません。パーティション表に対して ON DATA PARTITION 節が指定されている場合、その指定されたパーティションのみがこのアクセス・モード・レベルに制限されます。
REORG INDEX の場合、非パーティション索引の再編成中に、その表に読み取り専用でアクセスできることを指定します。
- ALLOW WRITE ACCESS
- REORG INDEXES の場合、索引が再編成される間に、他のユーザーがその表から読み取ったりそこに書き込んだりできることを指定します。
CLEANUP オプションまたは RECLAIM EXTENTS オプション、あるいは ON DATA PARTITION 節が指定されていない限り、パーティション表に対して ALLOW
WRITE ACCESS モードはサポートされません。パーティション表に対して ON DATA PARTITION 節が指定されている場合、その指定されたパーティションのみがこのアクセス・モード・レベルに制限されます。
REORG INDEX の場合、非パーティション索引の再編成中に、その表から読み取ったりその表に書き込んだりできることを指定します。
CLEANUP オプションまたは RECLAIM EXTENTS オプションが指定されている場合を除き、ALLOW WRITE ACCESS モードは、マルチディメンション・クラスタリング (MDC) 表、挿入時クラスタリング (ITC) 表、および拡張索引ではサポートされません。
REBUILD パラメーターを指定した場合、カラム・オーガナイズ表では ALLOW WRITE ACCESS パラメーターはサポートされません。
- 指定されたデータ・パーティションのみがこのアクセス・モード・レベルに制限されます。
指定されたパーティションのパーティション索引が再編成される間に、ユーザーは表の他のパーティションから読み取ったりそこに書き込んだりできます。以下の表に、ON DATA PARTITION 節が指定された時にサポートされるアクセス・モードおよび表の他のパーティションで許可される並行アクセスを示します。
表 2. REORG INDEXES ALL と共に ON DATA PARTITION 節が指定された時にサポートされるアクセス・モードおよび許可される並行アクセス アクセス・モード 指定されたパーティションで許可される並行アクセス 他のパーティションで許可される並行アクセス ALLOW NO ACCESS アクセスできません 読み取りおよび書き込みアクセス ALLOW READ ACCESS 索引が更新されるまでのパーティションにおける読み取り 読み取りおよび書き込みアクセス ALLOW WRITE ACCESS 索引が更新されるまでのパーティションにおける読み取りおよび書き込みアクセス 読み取りおよび書き込みアクセス - 指定されたパーティションのパーティション索引のみが再編成されます。
非パーティション索引は再編成されません。
「無効」または「再作成」とマークされた表に非パーティション索引がある場合、これらの索引は再編成前に再作成されます。 それ以外の場合、索引オブジェクトが「無効」または「再作成」とマークされているなら、指定されたパーティションのパーティション索引のみが再編成されるか、または再作成されます。
- CLEANUP オプションまたは RECLAIM EXTENTS オプションも指定されている場合、指定されたパーティションのパーティション索引のみがクリーンにされます。
| コマンド | 表タイプ | Table partitioning clause | index (索引) 節に指定された その他の パラメーター |
サポートされるアクセス・モード |
|---|---|---|---|---|
| REORG INDEXES | 非パーティション表 | 該当なし | 任意 |
ALLOW NO ACCESS,
ALLOW READ ACCESS1, ALLOW WRITE ACCESS |
| REORG INDEX | パーティション表 | 該当なし | 任意 |
ALLOW NO ACCESS,
ALLOW READ ACCESS1, ALLOW WRITE ACCESS |
| REORG INDEXES | パーティション表 | なし | REBUILD (何も指定されていない場合のデフォルト) |
ALLOW NO ACCESS 1
|
| REORG INDEXES | パーティション表 | ON DATA PARTITION | REBUILD (何も指定されていない場合のデフォルト) |
ALLOW NO ACCESS,
ALLOW READ ACCESS1, ALLOW WRITE ACCESS |
| REORG INDEXES | パーティション表 | ON DATA PARTITION 節ありまたはなし | CLEANUP または RECLAIM EXTENTS を指定 |
ALLOW NO ACCESS,
ALLOW READ ACCESS1, ALLOW WRITE ACCESS |
- アクセス節が指定されていない場合のデフォルト・モード。
ALLOW READ ACCESS または ALLOW WRITE ACCESS オプションを使用して、 索引が再編成されている間に、他のトランザクションに表に対する読み取り専用または読み取り/書き込みのいずれかのアクセス権限を許可することができます。 索引の再編成されたコピーを使用できる期間中に索引を再作成する場合、表へのアクセスは許可されません。
- REBUILD
- REBUILD オプションがデフォルトです。このオプションは、CLEANUP 節および CONVERT 節が指定されていない場合の以前のリリースにおける索引再編成で提供されるのと同じ機能を表します。索引再編成の REBUILD オプションにより、物理的に連続したページに索引データが再作成されます。 デフォルトのアクセス・モードは表タイプによって異なります。
Space-reclaim-options
- CLEANUP
- CLEANUP が要求されると、REBUILD ではなくクリーンアップが実行されます。索引は再作成されません。解放されたページはこの表に定義された索引だけが再使用できます。
- ALL
- コミット済みの疑似削除済みキーおよび疑似空白ページを除去して、
索引をクリーンアップすることを指定します。
CLEANUP ALL オプションはコミット済み疑似空白ページを解放して、コミット済み疑似削除済みキーを疑似空白ではないページから除去します。また、このオプションは、マージ後のリーフ・ページのフリー・スペースが PCTFREE 以上になる場合に、隣接する複数のリーフ・ページをマージしようとします。 PCTFREE は、索引作成時に索引に対して定義するフリー・スペースのパーセントです。 デフォルトの PCTFREE は 10% です。2 つのページがマージ可能な場合、そのうちの 1 つのページが解放されます。疑似空白ページにあるキーを除く、 索引内の疑似削除済みキーの数を調べるには、RUNSTATS を実行してから SYSCAT.INDEXES の NUMRIDS DELETED を SELECT します。 ALL オプションは、コミット済みと判別された場合に NUMRIDS DELETED および NUM EMPTY LEAFS を消去します。
- PAGES
- コミット済みの疑似空白ページを索引ツリーから除去することを指定します。
このステップは、疑似空白ではないページ上の疑似削除済みキーをクリーンアップしません。
これは疑似空白リーフ・ページだけをチェックするので、
ほとんどの場合に ALL オプションを使用するよりも相当速くなります。
CLEANUP PAGES オプションは、コミット済み疑似空白ページを検索して解放します。コミット済み疑似空白ページとは、ページ上のすべてのキーに削除済みのマークが付いていて、 それらすべての削除がコミット済みとして知られているページのことです。 索引内の疑似空白ページの数は、RUNSTATS を実行して SYSCAT.INDEXES の NUM EMPTY LEAFS 列を調べることにより判別できます。PAGES オプションは、 コミット済みと判別された場合に NUM EMPTY LEAFS をクリーンアップします。
- RECLAIM EXTENTS
- 再編成する索引を指定し、使用されていないエクステントを再利用します。 このアクションによって、索引オブジェクト内の索引ページを移動して空エクステントが作成されます。 その後、このステップは、それらの空エクステントを索引オブジェクトによる排他使用から解放し、表スペース内の他のデータベース・オブジェクトがそのスペースを使用できるようにします。 エクステントは、索引オブジェクトから表スペースに戻されて再利用されます。 ALLOW READ ACCESS はデフォルトですが、すべてのアクセス・モードがサポートされています。
Table clause
- CLASSIC
- 表をその表の新しいコピーを作成することによって再編成してから、元の表を再編成されたコピーで置換します。 表のすべての索引は、この置換後に再作成されます。元の表は、次で説明するアクセス節によって置換操作が開始するまで、 照会で使用できる場合があります。
- INPLACE
- ユーザー・アクセスを許可しながら、表を再編成します。
INPLACE 表再編成が可能なのは、拡張索引を持たず、表内の XML 列に対して索引が定義されていない非パーティション表、非 MDC 表、および非 ITC 表のみです。さらにパーティション表の場合、INPLACE 表の再編成は、表に非パーティション索引が定義されておらず (システム生成された XML パス索引を除く)、かつ、ON DATA PARTITION が指定されている場合にのみ許可されます。 一度に再編成できるデータ・パーティションは 1 つだけです。 INPLACE 表再編成は、サイズが少なくとも 3 ページである表に対してのみ実行できます。
表に対する INPLACE 再編成に START を発行できるようにするには、その前にその表に対して一時停止されているか、または実行中のインプレース再編成を完了または停止する必要があります。 パーティション表の場合、特定のパーティションでインプレース再編成が一時停止または実行中になっている場合、別のパーティションの INPLACE 再編成に対して START を発行するには、その前にその表における一時停止中の再編成を完了するか停止する必要があります。
表のインプレース再編成は非同期に発生するので、即時に有効にならないことがあります。
- STOP
- インプレース REORG 処理を現時点で停止します。
- PAUSE
- インプレース REORG を現時点で中断または一時停止します。
- RECLAIM EXTENTS
- 再編成する表を指定し、使用されていないエクステントを再利用します。 table-name 変数では、マルチディメンション・クラスタリング (MDC) 表、挿入時クラスタリング (ITC) 表、またはカラム・オーガナイズ表を指定する必要があります。schema.table-name 形式の名前あるいは別名を使用することができます。 schema には、表作成時のユーザー名が入ります。 スキーマ名を省略した場合、 デフォルトのスキーマが想定されます。
classic-options
- ALLOW NO ACCESS
- 表が再編成される間に、他のユーザーがその表にアクセスできないことを指定します。
ON DATA PARTITION 節を使用せずにパーティション表を再編成する場合、ALLOW NO ACCESS モードがデフォルトになり、唯一のサポートされるアクセス・モードになります。
データ・パーティション表に対して ON DATA PARTITION 節が指定されている場合、指定されたデータ・パーティションのみが再編成されます。- 表に非パーティション索引が定義されていない場合 (システム生成された XML パス索引を除く)、指定されたパーティションのみが ALLOW NO ACCESS モードに制限されます。ユーザーは表の他のパーティションから読み取ったりそこに書き込んだりできます。
- 表に非パーティション索引が定義されている場合 (システム生成された XML パス索引を除く)、ALLOW NO ACCESS モードがデフォルトとなり、サポートされる唯一のアクセス・モードになります。この場合、その表は ALLOW NO ACCESS モードになります。
- ALLOW READ ACCESS
- 再編成の際に表に対する読み取りアクセスだけを許可します。
ALLOW READ ACCESS モードが、非パーティション表のデフォルト・モードになります。
データ・パーティション表に対して ON DATA PARTITION 節が指定されている場合、指定されたデータ・パーティションのみが再編成されます。- 表に非パーティション索引が定義されていない場合 (システム生成された XML パス索引を除く)、ALLOW READ ACCESS モードがデフォルト・モードです。 指定されたパーティションのみがこのアクセス・モード・レベルに制限されます。ユーザーは表の他のパーティションから読み取ったりそこに書き込んだりできます。
- 表に非パーティション索引が定義されている場合 (システム生成された XML パス索引を除く)、ALLOW READ ACCESS モードはサポートされません。この場合に ALLOW READ ACCESS が指定されると、SQL1548N が戻されます (SQLSTATE 5U047)。
- USE tbspace-name
- 再編成される表の一時コピーを保管する SYSTEM TEMPORARY 表スペースの名前を指定します。
表スペースの名前を指定しない場合、データベース・マネージャーは、
再編成される表を含む表スペースにその表の作業用コピーを保管します。
8 KB、16 KB、または 32 KB の表オブジェクトの場合、指定した SYSTEM TEMPORARY 表スペースのページ・サイズが、表データの存在する表スペースのページ・サイズと一致していなければ、Db2 データベース製品は、LONG/LOB オブジェクトのサイズが正しい TEMPORARY 表スペースを検出しようとします。 再編成が正常に実行されるためには、そのような表スペースが存在していなければなりません。
パーティション表の場合、表に含まれるデータ・パーティションの再編成において、TEMPORARY 表スペースが一時ストレージとして使用されます。パーティション表全体の再編成では、一度に 1 つのデータ・パーティションが再編成されます。 TEMPORARY 表スペースは、表全体ではなく、表に含まれる最大のデータ・パーティションを保持できる必要があります。 ON DATA PARTITION 節が指定される場合、TEMPORARY 表スペースは指定されたパーティションを保持できる必要があります。
パーティション表の表スペース名を指定しない場合、各データ・パーティションの存在する表スペースが、そのデータ・パーティションの一時ストレージとして使用されます。 各データ・パーティションの表スペースには、そのデータ・パーティションのコピーが入るだけの十分なフリー・スペースがなければなりません。
- INDEX index-name
- 表を再編成する際に使用する索引を指定します。schema.index-name 形式の完全修飾名を指定しない場合、
デフォルトのスキーマが想定されます。
schema は、その索引が作成された時のユーザー名です。
データベース・マネージャーは、再編成している表のレコードを物理的に再配列する索引を使用します。
表のインプレース再編成では、クラスタリング索引が表に定義されて、索引が指定されている場合、それはクラスタリング索引でなければなりません。 インプレース・オプションが指定されない場合、指定された任意の索引が使用されます。索引名を指定しない場合には、そのレコードは順番に関係なく再編成されます。 しかし、表にクラスタリング索引が定義されている場合、索引が指定されていなければ、クラスタリング索引が使用されて表がクラスタリングされます。MDC 表または ITC 表を再編成しているときには、索引を指定できません。
INDEX および ON DATA PARTITION 節の両方を使用して表が再編成される場合、指定したパーティションのみが、索引 index-name を使用して再編成されます。
- INDEXSCAN
- クラスタリング REORG では、索引スキャンが使用されて表レコードが再配列されます。
索引を介して表にアクセスすることにより、表の行を再編成します。
デフォルトの方法は、必要に応じて TEMPORARY 表スペースを使用しながら、表をスキャンして結果をソートし表を再編成することです。索引キーはソートの順序に配列していますが、
スキャンおよびソートはまず索引から行 ID を読み取って行をフェッチするよりも通常は高速です。
拡張行サイズを使用する表の場合、表をスキャンして結果をソートし、表を再編成するデフォルトの方法はサポートされません。
式ベースの索引の場合、表をスキャンして結果をソートし、表を再編成するデフォルトの方法はサポートされません。
- LONGLOBDATA
- 長いフィールドおよび LOB データが再編成されます。
表に長い列または LOB 列が含まれている場合であっても、このステップは必須ではありません。 これは時間がかかり、クラスタリングを改善しないために、 デフォルトではこれらのオブジェクトを再編成しません。 ただし、XML 列を持つ表に対して LONGLOBDATA オプションを指定した再編成を実行すると、未使用のスペースが再利用されるので、XML ストレージ・オブジェクトのサイズが削減します。
このパラメーターは、既存の LOB データをインライン化された LOB データに変換するときに必要です。
拡張行サイズを使用する表の場合は、表の変更後の最初のオフライン REORG で LONGLOBDATA が適用されます。
- USE longtbspace-name
- このパラメーターはオプションです。LONG データの再作成に使用する TEMPORARY 表スペースの名前を指定するために使用できます。
表オブジェクトについても LONG オブジェクトについても TEMPORARY 表スペースが指定されていない場合、現在それらのオブジェクトが存在している表スペース中にそれらのオブジェクトが構成されることになります。表に対して TEMPORARY 表スペースを指定し、このパラメーターを指定しない場合は、基本の再編成データのために使用される表スペースが使用されます。ただし、ページ・サイズが異なる場合、Db2 データベース・システムは、
LONG オブジェクトを作成するために適切なページ・サイズの一時コンテナーを選択しようとします。
USE longtbspace-name が指定されている場合、USE tbspace-name も指定する必要があります。 そうでない場合、longtbspace-name 引数は無視されます。
- KEEPDICTIONARY
- 表の
COMPRESS属性がYESであり、表にコンプレッション・ディクショナリーがある場合、新しいディクショナリーは作成されません。 再編成中に処理されるすべての行は、既存のディクショナリーを使用した圧縮の対象になります。COMPRESS属性がYESであり、表にコンプレッション・ディクショナリーが存在しない場合、 表が特定のサイズ (およそ 1 MB から 2 MB) で、十分なデータがその表に存在する場合にのみ、ディクショナリーが作成されます (そして、表が圧縮されます)。 代わりに明示的に REORG RESETDICTIONARY を指定した場合には、表に少なくとも 1 行あれば、ディクショナリーが作成されます。表のCOMPRESS属性がNOであり、 表にコンプレッション・ディクショナリーがある場合、再編成処理はディクショナリーを保持します。 新しく再編成された表の行はすべて非圧縮形式になります。 基本表の行に保管されない LOB などの一部のデータは圧縮できません。LONGLOBDATA オプションを指定しない場合、表の行データだけが再編成されます。 以下の表は、LONGLOBDATA オプションが指定されていないときの、REORG コマンドの KEEPDICTIONARY 構文の動作を説明しています。
表 4. REORG KEEPDICTIONARY 圧縮 ディクショナリーが存在するかどうか 結果と効果 Y Y ディクショナリーはそのまま、行圧縮 Y N ディクショナリーを作成、行圧縮 N Y ディクショナリーはそのまま、全行圧縮解除 N N 影響なし、全行圧縮解除 以下の表は、LONGLOBDATA オプションが指定されているときの、REORG コマンドの KEEPDICTIONARY 構文の動作を説明しています。
表 5. LONGLOBDATA オプションが指定されているときの REORG KEEPDICTIONARY。 圧縮 表の行データ・ディクショナリーが存在する XML ストレージ・オブジェクト・ディクショナリーが存在する1 コンプレッション・ディクショナリー データ圧縮 Y Y Y ディクショナリーを保存します。 既存のデータは、圧縮されます。 新規データは、圧縮されます。 Y Y N 表の行ディクショナリーを保存し、XML ストレージ・オブジェクト・ディクショナリーを作成します。 既存のデータは、圧縮されます。 新規データは、圧縮されます。 Y N Y 表の行ディクショナリーを作成し、XML ディクショナリーを保存します。 既存のデータは、圧縮されます。 新規データは、圧縮されます。 Y N N 表の行ディクショナリーおよび XML ディクショナリーを作成します。 既存のデータは、圧縮されます。 新規データは、圧縮されます。 N Y Y 表の行ディクショナリーおよび XML ディクショナリーを保存します。 表データは圧縮解除されます。 新規データは、圧縮されません。 N Y N 表の行ディクショナリーを保存します。 表データは圧縮解除されます。 新規データは、圧縮されません。 N N Y XML ディクショナリーを保存します。 表データは圧縮解除されます。 新規データは、圧縮されません。 N N N 影響なし。 表データは圧縮解除されます。 新規データは、圧縮されません。 注:- コンプレッション・ディクショナリーは、Db2 V9.7 以降の表に XML 列が追加された場合、または ADMIN_MOVE_TABLE ストアード・プロシージャー使用して表がマイグレーションされた場合のみ、表の XML ストレージ・オブジェクトに対して作成できます。
表の圧縮属性が NO の場合、(置換操作などで) 表の再初期設定または切り捨てが発生したなら、ディクショナリーが存在していればそれは廃棄されます。 逆に、表の圧縮属性が YES の場合にディクショナリーが存在しているなら、切り捨てではディクショナリーが保たれ、廃棄は実行されません。リカバリーのことを考慮して、また将来データ・キャプチャーの変更 (つまりレプリケーション) をサポートすることを考慮して、ディクショナリーは全体としてログ記録されます。
- RESETDICTIONARY
- 表の
COMPRESS属性がYESの場合、新しい行コンプレッション・ディクショナリーが作成されます。 再編成の際に処理されるすべての行は、この新しいディクショナリーによる圧縮の対象になります。前のすべてのディクショナリーは、このディクショナリーに置き換わります。 表のCOMPRESS属性がNOであり、表にコンプレッション・ディクショナリーが存在している場合、再編成処理によりそのディクショナリーは除去され、新たに編成された表のすべての行は非圧縮形式になります。基本表の行に保管されない LOB などの一部のデータは圧縮できません。LONGLOBDATA オプションを指定しない場合、表の行データだけが再編成されます。 以下の表は、LONGLOBDATA オプションが指定されていないときの、REORG コマンドの RESETDICTIONARY 構文の動作を説明しています。
表 6. REORG RESETDICTIONARY 圧縮 ディクショナリーが存在するかどうか 結果と効果 Y Y ディクショナリー新規作成*、行圧縮。DATA CAPTURE CHANGES オプションが CREATE TABLE または ALTER TABLE ステートメントで指定されていると、現在のディクショナリーが保持されます (これは履歴コンプレッション・ディクショナリーと呼ばれます)。 Y N ディクショナリー新規作成、行圧縮 N Y ディクショナリー除去、全行圧縮解除。DATA CAPTURE NONE オプションが CREATE TABLE または ALTER TABLE ステートメントで指定されていると、指定された表の履歴コンプレッション・ディクショナリー も除去されます。 N N 影響なし、全行圧縮解除 * ディクショナリーが存在し、圧縮属性が有効になっていても、現在は表にデータがない場合は、RESETDICTIONARY 操作でも既存のディクショナリーが維持されます。内部の最小レコード長よりサイズの小さい行と、圧縮が試みられたときにレコード長の節減が図られない行は、このような場合は「十分でない」とみなされます。
以下の表は、LONGLOBDATA オプションが指定されているときの、REORG コマンドの RESETDICTIONARY 構文の動作を説明しています。
表 7. LONGLOBDATA オプションが指定されているときの REORG RESETDICTIONARY。 圧縮 表の行データ・ディクショナリーが存在する XML ストレージ・オブジェクト・ディクショナリーが存在する1 データ・ディクショナリー データ圧縮 Y Y Y ディクショナリーの作成2 3。 既存のデータは、圧縮されます。 新規データは、圧縮されます。 Y Y N 新規の表の行ディクショナリーを作成し、新規の XML ディクショナリーを作成します3。 既存のデータは、圧縮されます。 新規データは、圧縮されます。 Y N Y 表の行データ・ディクショナリーを作成し、新規 XML ディクショナリーを作成します。 既存のデータは、圧縮されます。 新規データは、圧縮されます。 Y N N ディクショナリーを作成します。 既存のデータは、圧縮されます。 新規データは、圧縮されます。 N Y Y ディクショナリーを除去します。既存および新規のデータは圧縮されません。 既存の表データは圧縮解除されます。 新規データは、圧縮されません。 N Y N 表の行ディクショナリーを除去します。 すべてのデータは圧縮解除されます。
既存の表データは圧縮解除されます。 新規データは、圧縮されません。 N N Y XML ストレージ・オブジェクト・ディクショナリーを除去します。 既存の表データは圧縮解除されます。 新規データは、圧縮されません。 N N N 影響なし。 既存の表データは圧縮解除されます。 新規データは、圧縮されません。 注:- コンプレッション・ディクショナリーは、XML 列が Db2 V9.7 以降の表に追加された場合または表が Online Table Move を使用してマイグレーションされた場合にのみ、表の XML ストレージ・オブジェクトに対して作成できます。
- ディクショナリーが存在していて圧縮属性が有効であるが、現在のところ表中にデータが存在しない場合、RESETDICTIONARY 操作では既存のディクショナリーがそのまま保たれます。この場合、不適切とみなされるのは、内部最小レコード長よりもサイズが小さい行、および圧縮してもレコード長の節約にならない行です。
- DATA CAPTURE CHANGES オプションが CREATE TABLE または ALTER TABLE ステートメントで指定されていると、現在のデータ・ディクショナリーが保持されます (これは履歴コンプレッション・ディクショナリーと呼ばれます)。
inplace-options
- ALLOW READ ACCESS
- 再編成の際に表に対する読み取りアクセスだけを許可します。
- ALLOW WRITE ACCESS
- 再編成の際に表に対する書き込みアクセスを許可します。 これがデフォルトの動作です。
- FULL
- 表は、その表の PCTFREE が順守されて、各ページがいっぱいに埋まるように再編成されます。 オプションで INDEX 節を指定すると、行データがデータの再クラスタリングのために表内で移動されます。 また、オーバーフロー・レコードも、この処理の一環として標準レコードに変換されます。 この動作がデフォルトの動作です。
- INDEX index-name
- 表を再編成する際に使用する索引を指定します。schema.index-name 形式の完全修飾名を指定しない場合、
デフォルトのスキーマが想定されます。
schema は、その索引が作成された時のユーザー名です。
データベース・マネージャーは、再編成している表のレコードを物理的に再配列する索引を使用します。
表のインプレース再編成では、クラスタリング索引が表に定義されて、索引が指定されている場合、それはクラスタリング索引でなければなりません。 インプレース・オプションが指定されない場合、指定された任意の索引が使用されます。索引名を指定しない場合には、そのレコードは順番に関係なく再編成されます。 しかし、表にクラスタリング索引が定義されている場合、索引が指定されていなければ、クラスタリング索引が使用されて表がクラスタリングされます。MDC 表または ITC 表を再編成しているときには、索引を指定できません。
INDEX および ON DATA PARTITION 節の両方を使用して表が再編成される場合、指定したパーティションのみが、索引 index-name を使用して再編成されます。
- TRUNCATE TABLE
- 表の終わりの空のエクステントすべてを再利用して、それらのエクステントを表スペースに返します。 スペース再利用がインプレース再編成の最後で実行されます。 切り捨て中は、表が S ロックされて、表に対する更新が防止されます。 ALLOW WRITE ACCESS が指定されている場合も、更新は不可能です。 この動作がデフォルトの動作です。
- NOTRUNCATE TABLE
- ALLOW WRITE ACCESS を指定すると、この操作では再編成全体を通じて書き込みアクセスが許可されます。 表によって使用されているスペースの再利用が試みられることはありません。 インプレース再編成の後に表を切り捨てないでください。 切り捨ての際に、表は S ロックされます。
- START
- インプレース REORG 処理を開始します。 このオプションがデフォルトなので、このキーワードはオプションです。
- RESUME
- 以前に一時停止した、表のインプレース再編成を継続または再開します。 オンライン再編成が再開された時点で、再編成の一時停止時と同じオプションを指定したい場合は、再開時にそれらのオプションを再び指定する必要があります。
- CLEANUP OVERFLOWS
- INPLACE CLEANUP OVERFLOWS 再編成では、表を全探索して、ポインター・レコードまたはオーバーフロー・レコードを検索します。 見つかったレコードは、この操作によってすべて標準レコードに変換されます。 この操作によって、ポインター・レコードまたはオーバーフロー・レコードがかなりの数保持された表のパフォーマンスが向上します。 この操作では、表のサイズは縮小しません。
Table partitioning clause
- ON DATA PARTITION partition-name
- データ・パーティション表では、再編成するデータ・パーティションを指定します。
Db2 V9.7 フィックスパック 1 以降のリリースでは、この節を REORG INDEXES ALL コマンドで使用して、特定のパーティションのパーティション索引を再編成することができます。また、REORG TABLE コマンドで使用して、特定のパーティションのデータを再編成することもできます。
パーティション表で REORG TABLE または REORG INDEXES ALL コマンドでこの節を使用するときに、パーティション partition-name が指定した表にない場合、再編成は失敗し、理由コード 1 と共に SQL2222N を戻します。パーティション partition-name がアタッチまたはデタッチ状態の場合、再編成は失敗し、理由コード 3 と共に SQL2222N を戻します。
ON DATA PARTITION 節を指定して REORG INDEX コマンドが発行された場合、再編成は失敗し、理由コード 2 と共に SQL2222N を戻します。
パーティション表が REORG ペンディング状態にあり、かつ表に非パーティション索引が定義されている場合、REORG TABLE コマンドは失敗し、SQL1549N (SQLSTATE 5U047) を戻します。
データベース・ パーティション
- ON DBPARTITIONNUM | ON DBPARTITIONNUMS
- データベース・パーティションのセットに対して操作を実行します。
- ALL DBPARTITIONNUMS
- db2nodes.cfg ファイルに指定されているすべてのデータベース・パーティションで操作が実行されることを指定します。データベース・パーティション節が指定されていない場合、このオプションがデフォルトです。
- EXCEPT
- このデータベース・パーティション・リストに指定したパーティションを除き、 db2nodes.cfg ファイルに指定されているすべてのデータベース・パーティションに対して操作を実行することを指定します。
Partition selection clause
- db-partition-number1
- データベース・パーティション・リスト内のデータベース・パーティション番号を指定します。
- db-partition-number2
- 2 番目のデータベース・パーティション番号を指定し、 db-partition-number1 から db-partition-number2 までのすべてのデータベース・パーティションがデータベース・パーティション・リストに含まれるようにします。
例
CALL SYSPROC.ADMIN_CMD ('REORG TABLE employee
INDEX empid ON DBPARTITIONNUM (1,3,4)')使用上の注意
- コマンドの実行状況は、CALL ステートメントからの結果である SQLCA で戻されます。
- REORG ユーティリティーは、操作の開始時に COMMIT ステートメントを発行します。そのため、タイプ 2 接続では、プロシージャーから SQL30090N、理由コード 2 が戻されます。
- REORG ユーティリティーでは、ニックネームの使用はサポートされません。
- REORG TABLE コマンドは、宣言済み一時表または作成済み一時表に対してサポートされていません。
- REORG TABLE コマンドは、ビューに対しては使用できません。
- 表の再編成は、範囲がクラスター化された表との互換性がありません。 表の範囲領域は常に、クラスター化されているからです。
- DMS 表スペース中のパーティション表が属している表スペース (LOB や索引を含む) のオンライン・バックアップが実行されている間は、REORG TABLE をその表に対して使用することはできません。
- REORG TABLE は、索引拡張子に基づく索引を使用できません。
- 表が REORG ペンディング状態なら、その表に対してインプレース再編成を実行することはできません。
- 同じ TEMPORARY DMS 表スペースを使用して表の再編成を並列実行することはサポートされません。
- 表に式ベースのキーが定義されている索引がある場合、インプレース表再編成はサポートされません。
- イベント・モニターの書き込み先である表に対して再編成を実行する場合は、その前にその表に関係するイベント・モニターを非活動化しておく必要があります。
- データ・パーティション表では、以下のようになります。
- SYSCAT.TABLES の中でその表の ACCESS_MODE はフル・アクセス権限でなければなりません。
- 再編成では、アタッチまたはデタッチ操作のため、制限状態にあるデータ・パーティションがスキップされます。ON DATA PARTITION 節が指定されている場合、そのパーティションは完全にアクセス可能でなければなりません。
- 表の再編成中にエラーが発生した場合、一部の索引または索引パーティションは無効のままとなる可能性があります。 表の非パーティション索引は、再編成が最初のデータ・パーティションの置換フェーズに達するかそれをパスすると、無効のマークが付きます。置換フェーズに既に達したかまたはそれを通過したデータ・パーティションの索引パーティションには、無効のマークが付きます。索引は次回表またはデータ・パーティションにアクセスしたときに再作成されます。
- ALLOW NO ACCESS モードが使用されている場合、索引の再編成中にエラーが発生すると、表の一部の索引が無効のままになる場合があります。 表の非パーティション RID 索引については、障害発生時点で再編成中の索引のみが無効のままになります。非パーティション・ブロック索引がある MDC 表については、エラーが発生した場合、1 つ以上のブロック索引が無効のままになる可能性があります。 パーティション索引を持つ MDC 表または ITC 表の場合は、再編成されたデータ・パーティションの索引オブジェクトのみが無効になります。 無効のマークが付いたすべての索引は、次回表またはデータ・パーティションにアクセスしたときに再作成されます。
- 表に定義されたパーティション索引のみを使用するデータ・パーティション表が REORG ペンディング状態にある場合、ON DATA PARTITION 節を指定して REORG TABLE コマンドを発行すると、指定されたデータ・パーティションのみ REORG ペンディング状態ではなくなります。その表の残りのパーティションを REORG ペンディング状態から戻すためには、表全体に対して REORG TABLE コマンド (ON DATA PARTITION 節を使用しないで) を発行します。また、 残っているパーティションのそれぞれに対して ON DATA PARTITION 節を指定して REORG TABLE コマンドを発行することもできます。
表の再編成の現在の進行状態に関する情報は、 データベース活動の履歴ファイルに書き込まれます。 履歴ファイルには、再編成イベントごとの記録が含まれています。 このファイルを表示するには、 再編成している表を含むデータベースに対して LIST HISTORY コマンドを実行します。
さらに、表スナップショットを使用して表の再編成の進行状況をモニターすることもできます。 表の再編成のモニター・データは、 「データベース・モニター表スイッチ (Database Monitor Table Switch)」の設定値に関係なく記録されます。
エラーが生じた場合、SQLCA ダンプが履歴ファイルに書き込まれます。 表のインプレース再編成の場合、状況が PAUSED として記録されます。
インプレース表再編成の場合、表が 2 ページ以下の場合、REORG 操作は実行されません。また、REORG 操作の履歴ファイルにはエントリーがなく、スナップショットまたは監視メトリックにも REORG 情報は表示されません。
索引表を何度も変更すると、索引内のデータがフラグメント化されることがあります。 表が索引に関してクラスター化されている場合、 表および索引をクラスターの順序から取り出すことができます。 これら両方の要素は索引を使用するスキャンのパフォーマンスを低下させ、索引ページの事前取り出しの効果に影響を与えることがあります。REORG INDEX または REORG INDEXES で REBUILD オプションを指定して、表の 1 つの索引またはすべての索引を再編成できます。 索引を再編成して再作成すると、フラグメントが除去され、リーフ・ページに物理クラスタリングがリストアされます。REORGCHK を使用すると、索引に再編成が必要かどうかを判別するために役立ちます。すべてのデータベース操作が完了し、すべてのロックを解放したことを確かめてから、索引の再編成を呼び出してください。このステップを行うには、 WITH HOLD を指定してオープンしたすべてのカーソルをクローズし、COMMIT または ROLLBACK を発行します。
従来の表の再編成 (オフライン再編成) では、再編成の最後のフェーズで索引が再作成されます。 TEMPORARY 表スペースが複数存在する場合は、表の再編成処理に付随して実行される可能性がある追加のソートのために、 REORG TABLE コマンドで指定した TEMPORARY 表スペース以外の TEMPORARY 表スペースが使用される可能性があります。 ただし、表のインプレース再編成 (オンライン再編成) では索引は再作成されません。インプレース表再編成の完了後に、REORG INDEXES コマンドを発行することをお勧めします。インプレース表再編成は非同期です。 そのため、REORG INDEXES コマンドを発行する前にインプレース表再編成が完了していることを確認するように注意する必要があります。 インプレース表再編成が完了する前に REORG INDEXES コマンドを発行すると、再編成が失敗するおそれがあります (SQLCODE -2219)。
REORG が MDC 表の索引を再作成する場合、Full_Block ヒント・ビットは設定されません。Full_Block ヒントが設定されていないため、REORG が完了した後で DB2_TRUST_MDC_BLOCK_FULL_HINT レジストリー変数がオンになっている場合、ディメンション値から行を挿入しようとすると、挿入のパフォーマンスの機能低下を経験する可能性があります。挿入のパフォーマンスは、ディメンション値の挿入が完了した後、そのディメンション値ごとに自動的に向上します。 詳しくは、DB2_TRUST_MDC_BLOCK_FULL_HINT パフォーマンス変数を参照してください。
何回も修正されてデータがフラグメント化して、 アクセス・パフォーマンスが大幅に低下した表も REORG TABLE コマンドの対象になります。構造化タイプ列のインラインの長さを変更した後に、 長さの変更されたインラインを利用するためには、このユーティリティーを呼び出す必要もあります。 REORGCHK コマンドを使用して、表の再編成が必要であるかどうか判別してください。 すべてのデータベース操作が完了し、すべてのロックが解放されていることを確かめてから、REORG TABLE を呼び出してください。このステップを行うには、 WITH HOLD を指定してオープンしたすべてのカーソルをクローズし、COMMIT または ROLLBACK を発行します。 表の再編成の後で、RUNSTATS を使用して表統計を更新し、 REBIND を使用してこの表を使用するパッケージを再バインドします。再編成ユーティリティーは、暗黙的にすべてのカーソルをクローズします。
- 各 REORG コマンドは、ON DATA PARTITION 節を指定して、それぞれ別個のパーティションを指定しなければならない。
- 各 REORG コマンドは、ALLOW NO ACCESS モードを使用して、データ・パーティションに対するアクセスを制限しなければならない。
- REORG TABLE コマンドを発行する場合、パーティション表にはパーティション索引のみが含まれていなければならない。非パーティション索引が表に定義されていてはなりません (システム生成された XML パス索引を除く)。
REORG INDEXES ALL FOR TABLE T1 ALLOW NO ACCESS ON DATA PARTITION P1
REORG TABLE T1 ALLOW NO ACCESS ON DATA PARTITION P2
REORG INDEXES ALL FOR TABLE T1 ALLOW NO ACCESS ON DATA PARTITION P3
- ON DATA PARTITION 節を指定せずに、表に対して REORG コマンドを使用する。
- データ・パーティションを追加、アタッチ、またはデタッチするのに、表で ALTER TABLE ステートメントを使用する。
- データを表にロードする。
- 表を含むオンライン・バックアップを実行する。
表の値圧縮をアクティブ化または非アクティブ化したために表に混合した行形式が含まれている場合、 オフラインで表を再編成することによって、既存の行すべてをターゲットの行形式に変換することができます。
表がいくつかのデータベース・パーティションに分散している場合、影響を受けるデータベース・パーティションのいずれかで表または索引の再編成が失敗すると、失敗したデータベース・パーティションでのみ表または索引の再編成がロールバックされます。
再編成が失敗した場合に一時ファイルを削除しないでください。 データベース・マネージャーは、これらのファイルを使用し、データベースをリカバリーします。
索引の名前が指定されると、データベース・マネージャーはその索引の順番に従って、データを再編成します。 パフォーマンスを最大にするため、SQL 照会で頻繁に使用される索引を指定してください。 索引の名前が指定されておらず、クラスタリング索引が存在する場合、データはクラスタリング索引に従って配列されます。
表の PCTFREE 値は、ページごとに指定されたフリー・スペースの量を決定します。 この値を設定しない場合、ユーティリティーは、各ページに可能な限り大きなスペースを割り当てます。
表の再編成の後に表スペースのロールフォワード・リカバリーを完了させるには、REGULAR 表スペースと LARGE 表スペースの両方でロールフォワード・リカバリーが有効になっていなければなりません。
その表が、COMPACT オプションを使用しない LOB 列を含む場合、 LOB DATA ストレージ・オブジェクトは、表の再編成に従いかなり大きくなることができます。 このステップは、行が再編成された順序、および使用される表スペースのタイプ (SMS または DMS) に応じて異なります。
REORG INDEXES/TABLE コマンドにより XML データに対する索引が再作成される場合があります。 詳しくは、『XML データに対する索引の再作成』を参照してください。
インプレース REORG 操作は、内部レコードを移動できないため、表のスペースを十分に再利用できない可能性があります。
カラム・オーガナイズ表には索引を作成できません。 しかし、これらの表内のページを追跡するために索引が内部的に使用されます。また、ユニーク・キー制約または主キー制約を実施するために追加の索引が内部的に使用される場合もあります。カラム・オーガナイズ表のスペース管理には、ページ・マップが消費するスペースとこれらの内部索引の管理が含まれます。表の再編成によって、ページ・マップ索引内に疑似削除済みキーが生成されます。これらのキーはその後のクリーンアップ操作中にクリーンアップされます。更新操作および削除操作を行うと、一意性を適用するための索引内に疑似削除済みキーが生成されます。 CLEANUP パラメーターと RECLAIM EXTENTS パラメーターを指定した、REORG INDEX コマンドの実行を検討してください。 表自動保守が有効になっている場合は、この機能によって、索引に対するクリーンアップとスペース再利用の処理が行われます。
