create tablespace語句可以定義表空間,給表空間分配容器,在catalog中記錄表空間定義和屬性。
權限:SYSCTRL 或SYSADM
語法:
>>-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
存儲臨時表,和完成一些排序和連接等操作的工作區。一個數據庫至少有一個系統臨時表空間,因為臨時表只能放置在這種表空間中。在數據庫創建時,自動創建一個臨時表空間。
USER TEMPORARY
存儲創建的臨時表和聲明的臨時表。當數據庫被創建時,沒有用戶臨時表空間存在。為了允許定義臨時表和聲明臨時表,至少有一個用戶臨時表空間被創建,通過使用USE privileges.
2. tablespace-name
表空間的名稱,這是一個整體名字,是一個SQL標示符。不能使用在catalog中存在的表空間名稱,也不能以’SYS’開頭命名表空間。
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,循環使用容器存儲數據。
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的默認值。
PS:
1. 當存在多個臨時表空間時,采取循環方式,平衡他們的使用。
2. 表空間所有者創建表空間,被授予了USE privilege with the WITH GRANT OPTION,在這個表空間。