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