DB2 的REORG_學習(1)_REORG INDEXES/TABLE Command
最近寫一個DB2的REORG的指令碼,因為以前在mysql裡面是沒有接觸過這個REORG的,所以系統瞭解一下,我的學習的話是先從命令入手,看看這個名的結構,然後還有選項,這些選項會揭示一些這個命令能幹什麼事,瞭解了命令,命令的選項之後再去看相關的理論,再結合理解一下應該就會比較清晰一些了。
所以先來看命令吧。
REORG INDEXES/TABLE Command
重新組織一個索引或一張表。
你可以通過 將索引資料重建到 碎片的,物理連續的頁上面。在一個數據分割槽的表上,你可以重組一個特定的分割槽表上的非分割槽索引,或者,你可以重組某一個數據分割槽上的所有分割槽索引。
如果你聲明瞭index子句的CLEANUP選項,在不重建索引的情況下將會執行cleanup(cleanup is performed without rebuilding the indexes
The table option reorganizes a table by reconstructing the rows to eliminate fragmented data, and by compacting information. On a partitioned table, you can reorganize a single partition.
table選項 通過重建行來剔除碎片資料 和壓縮資訊來 重組一個表(The table option reorganizes a table by reconstructing the rows to eliminate fragmented data, and by compacting information
Scope範圍
這個命令影響在資料庫分割槽組中的所有的資料庫分割槽
需要下列許可權之一:
- SYSADM
- SYSCTRL
- SYSMAINT
- DBADM
- SQLADM
- CONTROL privilege on the table.
必要的連線資訊Required connection
Database/資料庫
命令語法
>>-REORG-------------------------------------------------------->
>--+-TABLE--table -name--| Table clause |--------------------------------+-->
+-+-INDEXES ALL FOR TABLE--table-name------------+--| Index clause |-+
| '-INDEX--index-name--+-----------------------+-' |
| '-FOR TABLE--table-name-' |
| .-ALLOW WRITE ACCESS-. |
'-TABLE--table-name--RECLAIM EXTENTS--+--------------------+---------'
+-ALLOW READ ACCESS--+
'-ALLOW NO ACCESS----'
>--+-------------------------------+---------------------------->
'-| Table partitioning clause |-'
>--+-------------------------------+---------------------------><
'-| Database partition clause |-'
Table clause
|--+-------------------+---------------------------------------->
'-INDEX--index-name-'
.-KEEPDICTIONARY--.
>--+-+-------------------+--+-------------------+--+-----------+--+---------------------+--+-----------------+-+--|
| +-ALLOW NO ACCESS---+ '-USE--tbspace-name-' '-INDEXSCAN-' '-| longlob-options |-' '-RESETDICTIONARY-' |
| '-ALLOW READ ACCESS-' |
| .-ALLOW WRITE ACCESS-. .-START--. |
'-INPLACE--+-+--------------------+--+------------------+--+--------+-+-------------------------------------'
| '-ALLOW READ ACCESS--' '-NOTRUNCATE TABLE-' '-RESUME-' |
'-+-STOP--+------------------------------------------------'
'-PAUSE-'
longlob-options
|--LONGLOBDATA--+-----------------------+-----------------------|
'-USE--longtbspace-name-'
Index clause
.-REBUILD---------------.
|--+--------------------+--+-----------------------+------------|
+-ALLOW NO ACCESS----+ '-space-reclaim-options-'
+-ALLOW WRITE ACCESS-+
'-ALLOW READ ACCESS--'
space-reclaim-options
|--+--------------------+--+-----------------+------------------|
| .-ALL---. | '-RECLAIM EXTENTS-'
'-CLEANUP--+-------+-'
'-PAGES-'
Table partitioning clause
|--ON DATA PARTITION--partition-name----------------------------|
Database partition clause
|--ON----------------------------------------------------------->
>--+-+-DBPARTITIONNUM--+--| Partition selection clause |-------------------------------------+--|
| '-DBPARTITIONNUMS-' |
'-ALL DBPARTITIONNUMS--+----------------------------------------------------------------+-'
'-EXCEPT--+-DBPARTITIONNUM--+--| Partition selection clause |--)-'
'-DBPARTITIONNUMS-'
Partition selection clause
.-,--------------------------------------------------.
V |
|--(----db-partition-number1--+--------------------------+-+--)--|
'-TO--db-partition-number2-'
命令引數Command parameters
INDEXES ALL FOR TABLE table-name
指定要重組的索引所屬的表,這個表可以是位於本地資料庫,也可以是位於遠端資料庫。
INDEX index-name
指定一個位於資料分割槽表上的 要重組的獨立索引。 對於單一索引的重組僅支援在一個分割槽表上的非分割槽索引。這個引數不支援塊索引(*block indexes*).
FOR TABLE table-name
指定 非分割槽索引索引名是建立在 的那個表名稱。鑑於一個數據庫內的索引名稱是唯一的,這個引數是可選的。
重組索引的訪問方式選項
ALLOW NO ACCESS
- 對於重組全部索引,這個選項指定 在索引重建過程中 其他使用者不可以訪問表。如果對一個分割槽表指定了ON DATA PARTITION子句,則只有指定非分割槽嚴格限制該訪問模式。
- 對於重組單一索引,這個選項指定 在非分割槽索引重組時, 索引所在的表不能被其他使用者訪問。
ALLOW READ ACCESS
- 對於重組 全部索引,這個選項指定 在索引重建過程中 其他使用者只能對錶進行只讀訪問。ALLOW READ ACCESS模式不支援在一個分割槽表上 重組全部索引,除非指定了CLEANUP或RECLAIM EXTENTS選項,或者指定了ON DATA PARTITION 子句。如果對一個分割槽表指定了ON DATA PARTITION子句,則只有指定非分割槽嚴格限制該訪問模式。
- 對於重組單一索引,這個選項指定 在非分割槽索引重組時, 索引所在的表僅允許使用者進行只讀訪問。
ALLOW WRITE ACCESS
- 對於重組 全部索引,這個選項指定 在索引重組時,其他使用者可以對錶進行讀寫訪問。ALLOW WRITE ACCESS模式不支援分割槽表,除非指定了CLEANUP或RECLAIM EXTENTS選項,或者指定了ON DATA PARTITION 子句。如果對一個分割槽表指定了ON DATA PARTITION子句,則只有指定非分割槽嚴格限制該訪問模式。
- 對於重組單一索引,這個選項指定 在非分割槽索引重組過程中 可以讀寫表。
- ALLOW WRITE ACCESS 模式不支援多維叢集(* multidimensional clustering (MDC)*)或插入時間叢集(ITC)表和擴充套件索引,除非指定了CLEANUP或RECLAIM EXTRNTS 選項。
下面的條目適用於資料分割槽表 當REORG INDEXES ALL命令指定了ON DATA PARTITION子句時 的 資料分割槽表:
只有指定資料分割槽嚴格限制訪問模式級別。在一個指定的分割槽的分割槽表索引被重組的過程中,表的其他分割槽允許使用者讀寫。
下面的 表 列出當指定了ON DATA PARTITION子句時,表的其他分割槽上支援的和允許的一致性訪問。
表格1:當指定REORG INDEXES ALL 命令的ON DATA PARTITION 子句時 ,支援的 訪問模式和併發(concurrent)訪問允許Access mode 指定分割槽上的併發訪問允許 其他分割槽上的併發訪問允許 ALLOW NO ACCESS 不允許訪問 讀寫訪問 ALLOW READ ACCESS 分割槽上可讀直到索引被更新 讀寫訪問 ALLOW WRITE ACCESS 分割槽上讀寫訪問直到索引被更新 讀寫 只有 指定分割槽的 分割槽索引被重組。分割槽表上的不分割槽索引不會被重組。
如果在表上有被標記為“失效”或“用於重構(rebuild)”的非分割槽索引,這些索引會在重組之前rebuild。如果沒有,如果索引物件被標記為“失效”或“用於重構(rebuild)” 只有指定分割槽上的分割槽索引被重組或重構 .當指定了 CLEANUP 或 RECLAIM EXTENTS選項時只有指定分割槽的分割槽索引被cleaned 。
The following table lists the supported access modes for index reorganization of partitioned and nonpartitioned tables:
下面的表格列示了分割槽表和非分割槽表的索引重組時支援的訪問模式。
表格2. 分割槽表和分割槽表上的索引重組支援的訪問模式
命令 | 表型別 | 表分割槽子句 | 索引子句指定的附加引數 | 支援的訪問模式 |
---|---|---|---|---|
REORG INDEXES | 非分割槽表 | 不適用 Not applicable |
Any | ALLOW NO ACCESS, ALLOW READ ACCESS1, ALLOW WRITE ACCESS |
REORG INDEX | 分割槽表 | 不適用 Not applicable |
Any | ALLOW NO ACCESS, ALLOW READ ACCESS1, ALLOW WRITE ACCESS |
REORG INDEXES | 分割槽表 | None | 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 |
注:標有上標1的是預設的訪問模式.
CLEANUP
當需要CLEANUP時,執行cleanup(清空)而不是REBUILD。索引不被重建,並且釋放的任何頁 僅可以被 定義在這個表上的索引重用。
ALL
指定索引 應該 通過提交 pseudo 刪除的鍵 和pseudo的 空頁 而打掃乾淨。
CLEANUP ALL選項將會釋放標記為(pseudo)空 的頁,也會從非空的pages中提交標記(pseudo)刪除的鍵。 如果合併可以 使得 合併後的葉子