1. 程式人生 > >建立表空間語句詳解

建立表空間語句詳解

create tablespace語法樹



>>-CREATE
--+-----------------------+---------------------------->
           +-LARGE-----------------+  
           +-REGULAR---------------+  
           | .-SYSTEM-.            |  
           '-+--------+--TEMPORARY-'  
             '-USER---'               

>--TABLESPACE--tablespace-name---------------------------------->


>--+-----------------------------------------------------------+-->
   |     .-DATABASE PARTITION GROUP-.                          |  
   '-IN--+--------------------------+--db-partition-group-name-'  

>--+--------------------------+--------------------------------->
   '-PAGESIZE--integer--+---+-'  

                       '-K-'    

   .-MANAGED BY--AUTOMATIC STORAGE--| size-attributes |---------------------.  
>--+------------------------------------------------------------------------+-->
   '-MANAGED BY--+-SYSTEM--| system-containers |--------------------------+-'  
                 '-DATABASE--| database-containers |--| size-attributes |-'    


>--+---------------------------------+-------------------------->
   '-EXTENTSIZE--+-number-of-pages-+-'  
                 '-integer--+-K-+--'    
                            '-M-'       

>--+-----------------------------------+------------------------>
   '-PREFETCHSIZE--+-AUTOMATIC-------+-'  
                   +-number-of-pages-+    
                   '-integer--+-K-+--'    
                              +-M-+       
                              '-G-'       

>--+-----------------------------+------------------------------>
   '-BUFFERPOOL--bufferpool-name-'  

>--+----------------------------------+------------------------->
   '-OVERHEAD--number-of-milliseconds-'  

>--+------------------------+----------------------------------->
   +-NO FILE SYSTEM CACHING-+  
   '-FILE SYSTEM CACHING----'  

>--+--------------------------------------+--------------------->
   '-TRANSFERRATE--number-of-milliseconds-'  

>--+---------------------------------+-------------------------><
   '-DROPPED TABLE RECOVERY--+-ON--+-'  
                             '-OFF-'    
size-attributes

|--+---------------------+--+-----------------------------+----->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K-+-'  
                 '-YES-'                            +-M-+    
                                                    '-G-'    

>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'  
                            '-+-K-+---'    
                              +-M-+        
                              '-G-'        

>--+-----------------------------+------------------------------|
   '-MAXSIZE--+-integer--+-K-+-+-'  
              |          +-M-+ |    
              |          '-G-' |    
              '-NONE-----------'    

system-containers
   .----------------------------------------------------------------------.  
   |           .-,------------------.                                     |  
   V           V                    |                                     |  
|----USING--(----'container-string'-+--)--+-----------------------------+-+--|
                                          '-| on-db-partitions-clause |-'    

database-containers
   .--------------------------------------------------------------.  
   V                                                              |  
|----USING--| container-clause |--+-----------------------------+-+--|
                                  '-| on-db-partitions-clause |-'    

container-clause

      .-,---------------------------------------------------.     
      V                                                     |     
|--(----+-FILE---+--'container-string'--+-number-of-pages-+-+--)--|
        '-DEVICE-'                      '-integer--+-K-+--'       
                                                   +-M-+          
                                                   '-G-'          

on-db-partitions-clause

|--ON--+-DBPARTITIONNUM--+-------------------------------------->
       '-DBPARTITIONNUMS-'  

      .-,--------------------------------------------------.     
      V                                                    |     
>--(----db-partition-number1--+--------------------------+-+--)--|
                              '-TO--db-partition-number2-'       


引數詳解
1.LARGE, REGULAR, SYSTEM TEMPORARY, or USER TEMPORARY
指定要建立的表空間的型別,如果不指定,預設型別是由”MANAGED BY”字句決定的。
LARGE:
只儲存永久性資料。這個型別只允許用在DMS表空間上。它也是建立DMS表空間的預設型別。當一個表放置在一個large型別的表空間中:
這個表可以比放置在regular型別的表空間中更大。
這個表可以支援每個data page有超過255行記錄,這樣可以增加空間利用效用。
這個表上的索引需要每行多出額外的2位元組,和regular表空間上的索引對比。
REGULAR:
只儲存永久性資料。這個型別可以用在DMS和SMS表空間。這個型別也是唯一可以用在SMS表空間的型別,同時也是SMS的預設型別。
SYSTEM TEMPORARY
儲存臨時表,和完成一些排序和連線等操作的工作區。一個資料庫至少有一個系統臨時表空間,因為臨時表只能放置在這種表空間中。在資料庫建立時,自動建立一個臨時表空間。由於臨時表空間涉及到空間回收,故常採用SMS表空間
USER TEMPORARY
儲存建立的臨時表和宣告的臨時表。當資料庫被建立時,沒有使用者臨時表空間存在。為了允許定義臨時表和宣告臨時表,至少有一個使用者臨時表空間被建立,通過使用USE privileges. 由於臨時表空間涉及到空間回收,故常採用SMS表空間
注:當存在多個臨時表空間時,採取迴圈方式,平衡他們的使用。
2.tablespace-name

表空間的名稱,這是一個整體名字,是一個SQL標示符。不能使用在catalog中存在的表空間名稱,也不能以’SYS’開頭命名錶空間。表空間所有者建立表空間,針對於這個表空間,被授予了USE privilege with the WITH GRANT OPTION。
3.IN DATABASE PARTITION GROUP db-partition-group-name
為表空間指定資料庫分割槽組。資料庫分割槽組必須已存在。當建立系統臨時表空間時,唯一允許的分割槽組是IBMTEMPGROUP。
‘DATABASE PARTITION GROUP’關鍵詞是不強制的,可有可無,並不影響引數。
如果建立表空間時,沒有指定分割槽組,Regular, Large和User Temporary型別使用IBMDEFAULTGROUP分組區;SYSTEM TEMPORARY型別,使用IBMTEMPGROUP型別。
4.PAGESIZE integer [K]
為表空間定義頁大小page size。沒有指定字尾K的情況下,有效值是4096,8192,16384,32768;有後綴K的情況下,有效值是4,8,16,32。如果不是這些有效值,會報錯。當表空間的page size和所指定的buffer pool的page size大小不一樣,也會報錯。pagesize的預設值在db cfg中可以找到,這個引數是在建立資料庫時設定的。
5.MANAGED BY AUTOMATIC STORAGE
指定表空間為自動儲存的表空間。如果資料庫沒有定義automatic storage,會報錯。可以為SMS或DMS指定為自動儲存。
| size-attributes |語句塊
AUTORESIZE:指定DMS表空間是否開啟auto-resize功能,當表空間要滿時,自動增加大小。其他引數見上面語法圖。
6.MANAGED BY SYSTEM
指定表空間為SMS,系統管理表空間。當type沒有指定,預設行為是建立regular表空間。
| system-containers |語法塊,指定SMS表空間的容器。
USING (‘container-string’,…)
對於SMS表空間,指定一個或多個容器儲存資料。container-string的長度超過240位元組。每一個container-string可以是絕對或相對路徑。
注:如果用相對路徑,是相對於資料庫目錄,而且可以是軟連線。如果指定的資料夾不存在,資料庫管理器會自動建立這個資料夾。如果表空間被刪除,所有被資料庫管理器建立的元件也會被刪除。如果指定的資料夾已經存在,這個資料夾不能包含任何檔案和子目錄。
container-string的格式依賴於作業系統。windows下,絕對路徑以碟符和:開始;Unix中,絕對路徑以/開始。相對路徑形式一樣。
也可以支援遠端資源,如LAN-redirected drives或NFS-mounted檔案系統。
| on-db-partitions-clause | 指定容器在一個分割槽資料庫中。如果沒有指定,在分割槽組中找一個分割槽建立。如果是系統臨時表,則在每個分割槽中建立。
7.MANAGED BY DATABASE
指定表空間是DMS,資料庫管理表空間。當type沒有指定,預設是large。
| database-containers | 語法塊,為DBS表空間指定容器。
USING |container-clause|
(FILE|DEVICE ‘container-string’ number-of-pages,…)
對於DMS表空間,指定一個或多個container儲存資料。容器型別(FILE或DEVICE)和大小(沒有單位,預設是page的數量)需要指定。大小也可以指定單位,K,M,G,如果指定單位,用位元組數除pagesize然後下取整,來決定page個數。container-stiring不能超過254個位元組。
對於FILE的容器,必須是絕對或相對路徑。如果目錄中沒有任何元件,它會被資料庫管理器建立。如果檔案不存在,它會被建立和初始化到指定大小。當表空間被刪除,所有元件也被刪除。如果檔案存在,會被覆蓋,如果檔案小於指定大小,會被擴充套件,如果大於指定大小,並不會被截斷。
對於DEVICE容器,container-string必須是裝置名,裝置必須已存在。
所有容器必須在所有資料庫中是唯一的。一個容器只能屬於一個表空間。一個表空間中不同容器的大小可以不同;但是,一個表空間中的容器大小一樣,可以獲得更好的效能。container-string的精確的形式和作業系統有關。
遠端資源也是支援的,同SMS。
|on-db-partitions-clause|,同SMS。
8.EXTENTSIZE number-of-pages
指定一個EXTENTSIZE,在跳轉到下一個容器前,需要在當前容器中的寫入的頁數。
也可以指定單位,K,M,最後的extent size為位元組數除pagesize下取整。資料庫管理器會根據extent size,迴圈使用容器儲存資料。 根據DB2對容器進行迴圈寫入的原則,如果您選擇實現磁碟條帶分割以及DB2條帶分割,那麼表空間的擴充套件資料塊大小和磁碟的分割大小應該相同,這樣會使效能更加優化。
EXTENTSIZE的預設值在db cfg中可以找到,DFT_EXTENT_SZ,建立DB時候設定的,這個值有效值是2-256。
9.PREFETCHSIZE
在查詢之前,取出查詢所需要的資料,這樣不需要等待I/O。
預設值由db cfg中的dft_prefetch_sz決定。
預設為AUTOMATIC指定prefetch size為自動更新,由資料庫管理器控制。當容器增加等,會自動調整。
number-of-pages指定prefetch的頁數,也可以用單位,也是通過位元組自動計算頁數。
10.BUFFERPOOL bufferpool-name
指定這個表空間使用的緩衝池,這個緩衝池必須已存在。如果沒有指定,預設的緩衝池(IBMDEFAULTBP)將被使用。緩衝池的的頁大小必須和表空間的頁大小一樣。
11.OVERHEAD number-of-milliseconds
指定I/O控制器開銷和磁碟尋道和延遲時間。這個值用於在查詢優化時決定I/O開銷,可以是任何數字,包括浮點。如果表空的容器OVERHEAD值不同,則取平均值。db2 v9以上,這個值預設是7.5,從v9之前升級過來的,預設是12.67.
12.FILE SYSTEM CACHING or NO FILE SYSTEM CACHING
指定I/O操作是否在作業系統級別進行快取。如果不指定這個引數,預設值如下:
在JFS on AIX, Linux System z®, all non-VxFS file systems on Solaris, HP-UX,SMS臨時表空間,所有LOB和large data,都預設使用FILE SYSTEM CACHING。在所有其他平臺和檔案系統中,預設使用NO FILE SYSTEM
FILE SYSTEM CACHING在目標表空間上的I/O操作,會在作業系統級別上進行快取。
NO FILE SYSTEM CACHING指定I/O操作繞過作業系統級別快取。
13.TRANSFERRATE number-of-milliseconds
指定讀一個page到記憶體的時間。這個值用來決定在查詢優化時,I/O的成本。可以是浮點數,如果每個容器的值不同,取平均。V9以前版本,建立的DB,預設值是0.06毫秒,從V9以前版本升級到V9之後,預設值是0.18毫秒。
14.DROPPED TABLE RECOVERY
指明被刪除的表是否可以被恢復,通過使用”ROLLFORWARD DATABASE …RECOVER DROPPED TABLE”。
ON,指定被刪除的表,可以恢復。這是V8之後是預設值。
OFF,被刪除的表不能恢復。V7的預設值。

表空間日常管理命令
本例建立的表空間pagesize大部分為32kb,故
1、建立pagesize為32kb的bufferpool
create bufferpool bp32k size 2000 pagesize 32k
2、檢視bufferpool屬性
select * from syscat.bufferpools
3、更改緩衝池大小
alter bufferpool bp32k size 2000


4、建立資料頁為32kb資料塊為1024kb預取值為預設,且不使用檔案系統快取的大型DMS表空間


create large tablespace tbs_data pagesize 32k managed by database using (file '/database/tbs_data/cont0' 100M,file '/database/tbs_data/cont1' 100M) extentsize 32 prefetchsize automatic bufferpool bp32k no file system caching


5、建立 資料頁為32kb的SMS系統臨時表空間
create temporary tablespace tbs_temp pagesize 32k managed by system using ('/database/tbs_temp') bufferpool bp32k



6、建立 資料頁為32kb的SMS使用者臨時表空間

create user temporary tablespace tbs_user_temp pagesize 32k managed by system using('/database/tbs_usertemp') bufferpool bp32k
7、建立 資料頁為32kb的自動儲存管理表空間
create tablespace tbs_index pagesize 32k bufferpool bp32k

8、建立初始大小為100MB,增量為100MB,最大大小為100GB的 自動儲存管理表空間
create tablespace tbs_data2 initialsize 100M increasesize 100M maxsize 100G
9、查看錶空間資訊
list tablespaces
list tablespaces show detail
db2pd -d testdb -tablespaces
get snapshot for tablespaces on testdb
也可以檢視sysibmadm.snaptbsp和sysibmadm.snapcontainer這兩個檢視
10、查看錶空相關的容器資訊
list tablespace containers for 7    #tablespace id
list tablespace containers for 7 show detail
11、如果DMS表空間對應的儲存中還有未分配空間,可通過alter tablespace的extend、reduce或resize選項擴充套件已有表空間容器的大小。其中extend用來擴充套件容器大小,reduce用來縮減已有容器大小,resize重新設定容器大小。對於reduce和resize,需確保更改後的表空間有足夠空間,否則DB2拒絕操作。
alter tablespace tbs_data extend (file '/database/tbs_data/cont0' 10M)
12、如果表空間容器已經沒有剩餘空間,可通過add選項增加容器,當然必要的情況下也可以通過drop選項刪除容器。對於add和drop操作會在容器間發生資料重新平衡(rebalance)。如果資料量很大,rebalance時間有可能很久,對系統可能造成很大影響。

alter tablespace tbs_data add(file '/database/tbs_data/cont2' 100m)
13、如果使用begin new strip set選項則會在現有容器空間用完時使用新增容器,該選項使資料不會在容器間做rebalance,但會造成資料偏移。
alter tablespace tbs_data begin new stripe set (file '/database/tbs_data/cont3' 100m)

14、檢視自動儲存管理表空間路徑
db2pd -d testdb -storagepaths
15、對於自動儲存管理表空間,無法在表空間級進行容器更改,只能在資料級別,因為自動儲存路徑是在建庫時指定的。可以使用add storage on選項為資料庫新增新的儲存路徑。在v9.7版本之前,自動儲存路徑只能增加,不能刪除。新增加的儲存路徑不會備表空間立即使用,只有在已有儲存路徑檔案系統空間滿了,才會使用新增路徑,增加路徑只是為了解決容量問題。v9.7版本之後,只要對使用自動儲存管理的表空間執行rebalance,則該表空間可以立即使用新增儲存路徑。

alter database testdb add storage on '/database/czm'
alter tablespace 7 rebalance


16、將DMS表空間轉換成自動儲存管理表空間
alter tablespace tbs_data managed by automatic storage
alter tablespace tbs_data rebalance



參考至:《DB2資料庫最佳管理實踐》徐明偉著
http://www.ibm.com/developerworks/cn/data/library/techarticles/0212wieser/0212wieser.html
http://www.2cto.com/database/201201/116270.html