Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
データベースへの連続アクセスという要件があるために、データベース全体の再構築ができない場合に、テーブルの断片化を解除します。
REORGANIZE TABLE [ owner.]table-name [ { PRIMARY KEY | FOREIGN KEY foreign-key-name | INDEX index-name } ]
次のいずれかの値に従って、テーブルを再編成します。
PRIMARY KEY 句 テーブルのプライマリキーのインデックスを再編成します。
FOREIGN KEY 句 指定の外部キーを再編成します。
INDEX 句 指定のインデックスを再編成します。
テーブルが断片化されると、パフォーマンスが妨害されることがあります。この文を使って、テーブル内のローの断片化を解除したり、DELETE によって散在したインデックスを圧縮したりします。また、テーブルとそのインデックスを記録するために使われる総ページ数と、インデックスツリーに含まれるレベル数も減らします。ただし、データベースファイル全体のサイズは小さくなりません。sa_table_fragmentation と sa_index_density の各システムプロシージャーを使用して、テーブル対象の処理を選択することをおすすめします。
インデックスまたはキーを指定しない場合は、再編成処理によってローグループが削除されてから再挿入され、テーブル内のローの断片化が解除されます。グループごとに、テーブルの排他ロックが取得されます。グループの処理が完了すると、他の接続がテーブルにアクセスできるように、ロックが解除され、再取得されます (必要な場合は待機します)。グループの処理中はチェックポイントが中断されます。グループが終了すると、チェックポイントが発生することがあります。クラスタードインデックスが存在する場合、ローはクラスタードインデックスの順序で処理されます。存在しない場合は、プライマリキーの順序で処理されます。テーブルにクラスタードインデックスもプライマリキーもない場合、エラーが返されます。処理済みのローはテーブルの最後に再挿入され、処理の最後にローがプライマリキーによってクラスタされます。必要な作業量は、最初にローが断片化されていた程度に関係なく同じなので注意してください。
インデックスまたはキーを指定すると、そのインデックスが処理されます。オペレーション中は、テーブルの排他ロックが保持され、チェックポイントは中断されます。他の接続がテーブルにアクセスしようとすると、blocking オプションの設定に応じてブロックされるか失敗します。ロック期間は、排他ロックを取得する前にインデックスページをあらかじめ読み込んでおくことで最短に抑えられます。
再編成で多数のページが修正される場合があるため、チェックポイントログが大きくなる可能性があります。これにより、データベースファイルのサイズが大きくなる可能性がありますが、チェックポイントログがシャットダウン時に削除され、ファイルはその時点でトランケートされるため、サイズは一時的に大きくなるだけです。
この文は、トランザクションログには記録されません。
文またはトランザクションのスナップショットを使用する、WITH HOLD 句を使用して開かれたカーソルがある場合、この文は実行できません。
この文の実行中に、進行状況メッセージの表示を要求できます。
また、Progress 接続プロパティを使用して、文がどの程度実行されたかを確認することもできます。
テーブルの所有者であるか、DBA 権限が必要です。
Windows Mobile ではサポートされません。
再編成を開始する前に、チェックポイントが実行され、空きページ数を最大限に増やそうとします。また、REORGANIZE TABLE 文の実行時は約 100 ローごとに暗黙的なコミットがあるため、大規模なテーブルを認識すると複数のコミットが実行されます。
SQL/2008 ベンダー拡張。
次の文は、Employees テーブルのプライマリキーのインデックスを再編成します。
REORGANIZE TABLE Employees PRIMARY KEY;
次の文は、Employees テーブルのテーブルページを再編成します。
REORGANIZE TABLE Employees;
次の文は、Products テーブルのインデックス IX_prod_name を再編成します。
REORGANIZE TABLE Products INDEX IX_product_name;
次の文は、Employees テーブルの外部キー FK_DepartmentID_DepartmentID を再編成します。
REORGANIZE TABLE Employees FOREIGN KEY FK_DepartmentID_DepartmentID;