天天看點

DB2建立資料庫常用參數詳解(原創)

本文隻介紹db2 create database文法中的常用參數

http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp 

create database文法樹

read syntax diagramskip visual syntax diagram

>>-create--+-database-+----------------------------------------->

           '-db-------'   

>----database-name--+-----------------------------+------------><

                    +-at dbpartitionnum-----------+

                    '-| create database options |-'     

create database options

   .-automatic storage--yes-.

|--+------------------------+----------------------------------->

   '-automatic storage--no--'   

>--+---------------------------------------------+-------------->

   |     .-,---------.                           |

   |     v           |                           |

   '-on----+-path--+-+--+----------------------+-'

           '-drive-'    '-dbpath on--+-path--+-'

                                     '-drive-'       

>--+-----------------------+------------------------------------>

   '-alias--database-alias-'   

>--+----------------------------------------------+------------->

   '-using codeset--codeset--territory--territory-'   

>--+-----------------------------------------------+------------>

   |                .-system---------------------. |

   '-collate using--+-compatibility--------------+-'

                    +-identity-------------------+

                    +-identity_16bit-------------+

                    +-uca400_no------------------+

                    +-uca400_lsk-----------------+

                    +-uca400_lth-----------------+

                    +-language-aware-collation---+

                    +-locale-sensitive-collation-+

                    '-nlschar--------------------'    

參數詳解 

1. database database-name

2. at dbpartitionnum

指定資料庫将要被建立在發出指令的分區。當建立一個新庫,不要指定這個參數。可以用它重建一個因為損壞而删除的數

據庫分區。當用這個參數建立庫,資料庫将處于restore pending狀态。不切斷應用可能導緻不一緻,用時謹慎。

3. automatic storage no | yes

指定自動存儲打開或關閉。預設是打開的。

4. on path or drive

這個子句和automatic storage的值有關,它指定了db表空間的容器位置。詳細的目錄結構如下

/path or drive ---------->  資料庫目錄

    |  

    |------ instancename ---------->  執行個體名

        |

        |------ nodennnn ---------->  節點名

              |

              |------ databasename ---------->  資料庫名

                     |

                     |------tnnnnnnn ---------->  表空間容器

對于automatic storage no:隻有一個path可以包含在on後,它指定了db的位置。如果沒有指定這個參數,db建立到預設路徑中,該預設路徑為dbm cfg的dftdbpath指定。

對于automatic storage yes:可以列出多個路徑,有逗号分隔,這些路徑作為存儲路徑和儲存自動存儲表空間的容器。對于多分區db,相同的存儲路徑被用在所有分區中。

建立資料庫後将建立三個預設表空間:

t0000000子目錄中包含帶有系統目錄表的目錄表空間。

t0000001子目錄中包含預設臨時表空間。

t0000002子目錄中包含預設使用者資料表空間。

每個子目錄或容器中都會建立一個名為 sqltag.nam 的檔案。這個檔案可以标記正在使用中的子目錄,是以在以後建立其他表空間時,不會嘗試使用這些子目錄。

此外,名為 sql*.dat 的檔案中還存儲有關子目錄或容器包含的每個表的資訊。星号(*)将被唯一的一組數字取代,用來識别每個表。對于每個 sql*.dat 檔案,可能有一個或多個下列檔案,這取決于表類型、表的重組狀态或者表是否存在索引、lob 或 long 字段:

sql*.bkm(如果它是一個 mdc 表,那麼它包含塊配置設定資訊)

sql*.lf(包含 long varchar 或 long vargraphic 資料)

sql*.lb(包含 blob、clob 或 dbclob 資料)

sql*.xda(包含 xml 資料)

sql*.lba(包含有關 sql*.lb 檔案的配置設定和可用空間資訊)

sql*.inx(包含索引表資料)

sql*.in1(包含索引表資料)

sql*.dtr(包含用于重組 sql*.dat 檔案的臨時資料)

sql*.lfr(包含用于重組 sql*.lf 檔案的臨時資料)

sql*.rlb(包含用于重組 sql*.lb 檔案的臨時資料)

sql*.rba(包含用于重組 sql*.lba 檔案的臨時資料)

5、dbpath on指定了資料庫基礎檔案(控制檔案,日志檔案等)的建立位置。如果沒有指定,則資料庫在on後面第一

個路徑指定。如果沒有指定路徑,則在預設位置建立,該預設路徑為dbm cfg的dftdbpath指定。資料庫路徑裡面建立了

分層目錄結構。這個結構儲存了資料庫操作需要的檔案,目錄結構具體如下

              |------ sqlxxxxx ---------->  資料庫編号

              |      |

              |      |------sqlogdir ---------->  資料庫日志目錄

              |------sqldbdir ----------> 本地資料庫編目

其中sqlogdir目錄用來存放資料庫日志檔案,建庫後可以更改日志檔案位置

sqlxxxxx目錄下包含如下檔案

sqlbp.1 和 sqlbp.2 檔案中都包含緩沖池資訊。這兩個檔案中具有相同的副本,進而提供備份。

sqlspcs.1 和 sqlspcs.2 檔案中都包含表空間資訊。這兩個檔案中具有相同的副本,進而提供備份。

sqlsgf.1 和 sqlsgf.2 檔案中都包含與資料庫的自動存儲器相關的存儲路徑資訊。這兩個檔案中具有相同的副本,進而提供備份。

sqldbcon 檔案中包含資料庫配置資訊。切勿編輯此檔案。要更改配置參數,請使用控制中心或者使用 update database configuration 和 reset database configuration 指令。

db2rhist.asc 曆史記錄檔案及其備份 db2rhist.bak 中包含關于備份、複原、表裝入、表重組、表空間改變和其他資料庫更改的曆史記錄資訊。

db2tschng.his檔案中包含日志檔案級别的表空間更改的曆史記錄。對于每個日志檔案,db2tschg.his中包含有助于确定日志檔案影響哪些表空間的資訊。表空間恢複使用此檔案中的資訊來确定在進行表空間恢複期間要處理哪些日志檔案。可以在文本編輯器中檢查這兩個曆史記錄檔案中的内容。

日志控制檔案 sqlogctl.lfh 和 sqlogmir.lfh 中包含有關活動日志的資訊。

恢複處理過程使用這些檔案中的資訊來确定要在日志中後退多遠來開始恢複。sqlogdir子目錄中包含實際的日志檔案。

注:您應確定不要将日志子目錄映射到用于存儲資料的磁盤。這樣,在磁盤發生問題時,隻會影響到資料或日志,而不會同時影響這兩者。由于日志檔案與資料庫容器不會争用同一磁盤磁頭的移動,是以這可提供很多性能方面的好處。要更改日志子目錄的位置,請更改 newlogpath資料庫配置參數。

sqlinslk檔案用于確定一個資料庫隻能由資料庫管理器的一個執行個體使用。

在建立資料庫的同時,還在db2event目錄下建立了詳細死鎖事件螢幕。詳細死鎖事件螢幕檔案存儲在目錄節點的資料庫目錄中。當事件螢幕達到它要輸出的最大檔案數 時,它将取消激活,并且将把一條消息寫入通知日志中。這樣可防止事件螢幕消耗過多的磁盤空間。除去不再需要的輸出檔案将允許在下一次資料庫激活時再次激 活事件螢幕。 

dbpath on選項可以被用來把以上檔案和資訊,放在一個與資料庫資料存儲路徑分開的路徑中。當使用automatic storage時,建議将資料庫的information和資料庫的data分開。

對于mpp系統,資料庫不能建在nfs檔案夾中,不能是相對路徑。每個給出的路徑必須在每個資料庫分區中存在并可通路。

database path最長215字元,storage path最長175字元。

5. alias database-alias

在database directory中,資料庫的别名。如果沒指定,就用資料庫名稱。

6. using codeset codeset

指定資料進入資料庫所使用的編碼集。建立資料庫後,不能修改。

7. territory territory

指定資料庫進入資料庫所使用的區域标示符或本地标示符。建立資料庫後,不能修改。code set和territory的組合,必須是有效的。

讀者可以通過以下連接配接檢視db2支援的代碼頁清單

http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2fcom.ibm.db2.luw.admin.nls.doc%2fdoc%2fr0004565.html&resultof=%22%e4%bb%a3%e7%a0%81%e9%a1%b5%22

其中顯示代碼頁(“s”)表示單位元組、(“d”)表示雙位元組、(“n”)表示中性。如果兩個代碼頁屬于同一組,則他們可以浮想轉換,否則無法轉換。注意,s和d組的代碼都可以轉換成中性的,但n組不一定能轉換成s或者d組。

國内常用的資料庫編碼集是gbk和utf-8,gbk支援中文字元,utf-8幾乎支援所有語言。9.5版本之前,如果不指定編碼db2預設根據系統的locale來設定。9.5版本開始,預設的資料庫編碼為utf-8,可以通過如下指令來檢視編碼集和編碼頁的資訊

$db2 get db cfg for testdb

       database configuration for database testdb

 database configuration release level                    = 0x0d00

 database release level                                  = 0x0d00

 database territory                                      = cn

 database code page                                      = 1208

 database code set                                       = utf-8

 database country/region code                            = 86

 database collating sequence                             = identity 

其中code set是作業系統級别的編碼設定,是通用的;而code page是對db2編碼集的内部數字表示,隻在db2内部有意義。本例中編碼集設定未utf-8對應db2内部的編碼頁未1208。

8. collate using

指定資料庫使用的比較順序規則。建立資料庫後,不能修改。

在unicode的資料庫中,catalog tables和views總是用identity collation,無論資料庫指定了哪種collation。在non-unicode資料庫裡,catalog tables和views使用資料庫的collation建立。

compatibility

db2 version 2的比較規則。一些已經加強了。這個選項指定了之前的版本會用使用。

identity

字元串是逐位元組比較的。

identity_16bit

cesu-8 (compatibility encoding scheme for utf-16: 8-bit(www.unicode.org),隻能在unicode資料庫使用。

uca400_no

the uca (unicode collation algorithm) collation sequence that is based on the unicode standard version 4.0.0 with normalization implicitly set to on. 隻能在unicode資料庫使用。

uca400_lsk

the uca (unicode collation algorithm) collation sequence based on the unicode standard version 4.0.0 but will sort slovak characters in the appropriate order. 隻能在unicode資料庫使用。

uca400_lth

the uca (unicode collation algorithm) collation sequence that is based on the unicode standard version 4.0.0 but will sort all thai characters according to the royal thai dictionary order. 隻能在unicode資料庫使用。

language-aware-collation

隻能在unicode資料庫使用。對于non-unicode資料庫,是基于system cllation。字元串必須是system_codepage_territory的格式,否則建立資料庫會失敗。

當create database在v9上使用,這個選項不會被使用。預設,unicode資料庫在v9上會事system collation。

locale-sensitive-collation

隻能在unicode資料庫使用。

nlschar

隻能用在thai code page(cp874),否則出錯。為指定的set/territory設定獨特的collation。

system

這是建立資料庫時,collation的預設選項。對于non-unicode資料庫,collation是基于territory。對于unicode資料庫,根據客戶的code set和territory,對應一個language-aware-collation,如何沒有合适的language-aware可用,會使用identity。

示例 

db2=>create database testdb automatic storage yes on /dbauto dbpath on /database using codeset utf-8 territory cn collate using system

參考至:《db2資料庫最佳管理實踐》

               http://www.dblotus.com/?p=457

               http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp

本文原創,轉載請注明出處、作者

如有錯誤,歡迎指正

郵箱:[email protected]

作者:czmmiao 原文位址:http://czmmiao.iteye.com/blog/1327636