[DB2 學習記錄]7. 創建DB

有點亂,因爲有些沒明白,等明白了,再整理。

啓動Command Line Processor,CLP
db2cmd db2 
CREATE DATABASE MY1STDB
    * 數據庫名稱可以由以下字符組成:a-z、A-Z、0-9、@、# 和 $。
    * 名稱中的第一個字符必需是字母表字符、@、# 或 $;不能是數字或字母序列 SYS、DBM 或 IBM。
    * 數據庫名稱或數據庫別名是一個惟一的字符串,包含前面描述的一個到八個字母、數字或鍵盤字符。
    (是說一個INSTANCE下,要唯一吧,而且好象不能超出八位)

db2 => CREATE DATABASE MY1STDB1;
SQL1001N  "MY1STDB1;" is not a valid database name.  SQLSTATE=2E000    ---來以爲是ORACLE。
db2 => CREATE DATABASE MY1STDB1
DB20000I  The CREATE DATABASE command completed successfully.          ---成功。
db2 => CREATE DATABASE MY1STDB11
SQL1001N  "MY1STDB11" is not a valid database name.  SQLSTATE=2E000   ---9位,失敗。
db2 => CREATE DATABASE MY1STDB21
SQL1001N  "MY1STDB21" is not a valid database name.  SQLSTATE=2E000  ---9位,失敗。
db2 => CREATE DATABASE MY1STDB2
DB20000I  The CREATE DATABASE command completed successfully.            ---成功。
db2 => CREATE DATABASE MY1STDB2
SQL1005N  The database alias "MY1STDB2" already exists in either the local     ---同名,失敗。
database directory or system database directory.

DB2 創建,包括日誌文件、配置信息、歷史文件和三個表空間。這些表空間是:
    * SYSCATSPACE:這是保存 DB2 系統編目的地方,系統編目跟蹤與 DB2 對象相關聯的所有元數據。
    * TEMPSPACE1:DB2 用來放置中間結果的臨時工作區域。
    * USERSPACE1:默認情況下存放所有用戶對象(表、索引)的地方。
所有這些文件都放在默認驅動器上的 DB2 目錄中。默認驅動器通常是安裝 DB2 產品的卷。

在 DB2 9 之前,CREATE DATABASE 命令會爲上面列出的所有對象創建 SMS 表空間。
在 DB2 9 中,所有表空間都將定義爲自動存儲(DMS)表空間。
如果不要的話,可以
CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE NO
看看創建的DB目錄:
E:/db2/NODE0000/MY1STDB1>dir /s
 Volume in drive E is Application
 Volume Serial Number is 08BD-EF8E

 Directory of E:/db2/NODE0000/MY1STDB1

03/20/2008  09:33 AM                 0                         SQLCRT.FLG
03/20/2008  09:33 AM    <DIR>                              T0000000                 --估計對應SYSCATSPACE tablespace
        03/20/2008  09:34 AM        67,108,864         C0000000.CAT   
        03/20/2008  09:33 AM                 0                   SQLCRT.FLG
03/20/2008  09:34 AM    <DIR>                              T0000001                 --估計對應TEMPSPACE1 tablespace
        03/20/2008  09:34 AM    <DIR>                      C0000000.TMP
                03/20/2008  09:34 AM               512         SQLTAG.NAM
        03/20/2008  09:34 AM                 0                   SQLCRT.FLG
03/20/2008  09:33 AM    <DIR>                               T0000002                --估計對應USERSPACE1 tablespace
        03/20/2008  09:33 AM        33,554,432          C0000000.LRG
        03/20/2008  09:33 AM                 0                   SQLCRT.FLG
還有一個目錄,應該是放日誌文件、配置信息等的:
E:/db2/NODE0000/SQL00008
 
如果沒有指定路徑,會在數據庫管理程序設置(DFTDBPATH 參數)中指定的默認數據庫路徑上創建數據庫:
Default database path                       (DFTDBPATH) = E:
 
這兩個命令都沒有成功,估計和路徑有關
CREATE DATABASE MYDB ON D:/TEST
 
CREATE DATABASE MYDB
    AUTOMATIC STORAGE ON
    /db2/storagepath001,
    /db2/storagepath002,
    /db2/storagepath003
    AUTORESIZE YES            ---當表空間用光空間時,系統將自動地擴展容器的大小。
    INITIALSIZE 300 M           ---沒有定義初始大小的默認爲300 MB,每個容器是100 MB(有三個存儲路徑)。
    INCREASESIZE 75 M        ---當表空間用光時,總空間增加 75 MB;可以指定百分數,增長當前大小的百分數。
    MAXSIZE NONE                   ---表空間的最大大小沒有限制,可以限制表空間最大值。
還發現真的要在CPL下,跑的話,要加/,續行,才能跑,繁人。

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;
在這個命令中,可以提供與表空間相關聯的任何參數;
但是,使用自動存儲可以大大簡化日常的表空間維護。
與重要的大型生產表相關聯的表空間可能需要 DBA 更多地干預。

在沒有啓用自動存儲的數據庫中創建表空間時,
必須指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。
使用這些子句會分別創建 SMS 表空間和 DMS 表空間。
在這兩種情況下,都必須提供容器的顯式列表。
SYSTEM USING ('container string')
DATABASE USING ( FILE/DEVICE 'container string' number of pages )

重要提示:所有容器必須是在所有數據庫上惟一的;一個容器只能屬於一個表空間。

字符代碼
db2都有一個相關聯的字符代碼頁,可以認爲代碼頁是一個對照表,用來將字母數字數據轉換爲數據庫中存儲的二進制數據。一個 DB2 數據庫只能使用一個代碼頁。
代碼頁是在 CREATE DATABASE 命令中使用 CODESET 和 TERRITORY 選項設置的。

對於需要使用 XML 數據的應用程序,
當前,DB2 只在定義爲 Unicode(UTF-8)的數據庫中支持 XML 列。
如果數據庫在創建時沒有啓用 Unicode 支持,就不能在其中創建 XML 列。

另外:
db2 => CREATE DATABASE DB2TEST4  AUTOMATIC STORAGE YES
SQL1047N  The application is already connected to another database. --遇到這個,要connect reset
db2 => connect reset
DB20000I  The SQL command completed successfully.
db2 => CREATE DATABASE DB2TEST4  AUTOMATIC STORAGE YES

db2 => CREATE DATABASE MYDB
SQL1032N  No start database manager command was issued.   --db service沒起來。

--也可能DB沒有起來.
SQL30081N  檢測到通信錯誤。正在使用的通信協議:"TCP/IP"。正在使用的通信
API:"SOCKETS"。檢測到錯誤的位置:"10.89.59.203"。檢測到錯誤的通信功能:
"connect"。特定於協議的錯誤代碼:"10061"、"*" 和 "*"。  SQLSTATE=08001
      

最後的例子
( 1) CREATE DATABASE MY1STDB
( 2) DFT_EXTENT_SZ 4
( 3) CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4) (FILE 'C:/CAT/CATALOG.DAT' 2000, FILE 'D:/CAT/CATALOG.DAT' 2000)
( 5) EXTENTSIZE 8
( 6) PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8) ('C:/TEMPTS','D:/TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10) (FILE 'C:/TS/USERTS.DAT' 121)
(11) EXTENTSIZE 24
(12) PREFETCHSIZE 48
自己琢磨琢磨吧!

後加的,
  • EXTENTSIZE:區段(extent) 是表空間的容器中的一個空間單元。數據庫對象(除了 LOB 和 long varchar 之外)都存儲在 DB2 中的頁面 中。這些頁面組合成區段。區段大小是在表空間級定義的。一旦爲表空間指定了區段大小,就不能改變了。數據庫配置參數 DFT_EXTENT_SZ 指定數據庫中所有表空間的默認區段大小。這個值的範圍是 2 到 256 個頁面;因此,絕對大小是從 8 KB 到 1024 KB(對於 4 KB 頁面),或者從 16 KB 到 2048 KB(對於 8 KB 頁面)。可以在 CREATE TABLESPACE 語句中使用 EXTENTSIZE 參數覆蓋這個數字。

    如果打算在表的設計中使用多維聚簇(MDC),區段就是一個重要的設計決定。MDC 表將爲創建的每個新的維集分配一個區段。如果區段太大,那麼區段的很大一部分有可能是空的(對於包含很少記錄的維集)。關於 MDC 及其對 EXTENTSIZE 的影響的更多信息,請參考 DB2 Administration Guide。

  • PREFETCHSIZE:連續的預獲取是指數據庫管理程序能夠提前預測查詢,在實際引用頁面之前讀取這些頁面。這種異步的檢索可以顯著減少執行時間。可 以通過修改 CREATE TABLESPACE 語句中的 PREFETCHSIZE 參數來控制執行預獲取的積極程度。在默認情況下,這個值設置爲 DFT_PREFETCH_SZ 數據庫配置參數。這個值代表在 DB2 觸發預獲取請求時每次讀取多少個頁面。通過將這個值設置爲區段大小的倍數,可以並行地讀取多個區段。當表空間的容器在不同的硬盤上時,這個功能甚至效率更 高。

這些參數的默認值對於許多應用程序是合適的,但是對於執行許多查詢或分析大量數據的應用程序,可以考慮設置更高的 PREFETCHSIZE。

用Control Center的嚮導來創建DB,好處是最後可以得到對應的SQL。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章