一、 數據庫的組成
(1) Db2中,數據庫是 實例下 的 最大數據對象集合,是關係型數據庫,也就是以表格形式存放數據。
(2)從數據庫管理員(DBA ― 就是您)的角度看,實際的數據庫包含許多下面列出的物理和邏輯對象:
- 表、視圖、索引和模式
- 鎖、觸發器、存儲過程和包
- 緩衝池、日誌文件和表空間
(3)數據庫中表的類型
用戶表:即存放用戶數據的表
系統表:存放系統數據的表,用來記錄該數據庫中所有的對象(如:表格空間、表格、索引、觸發器、存儲過程)的定義、結構及權限。
臨時表:系統的臨時表用於對錶排序、重組、連結、創建索引等
二、 幾個概念
容器: 物理存儲設備(真正的存儲設備),可以是操作系統目錄(文件夾)、設備或操作系統文件,表實際存儲於容器中
表空間:一個表空間可以包括多個容器,是容器的邏輯集合,一個容器只能屬於一個表空間,一個表空間也只能屬於一個數據庫。
表空間分類:系統表空間(sysspace):存放這個數據庫的所有系統表格
臨時表空間(tempspace): 存放db2在執行sql指令時,因爲排序、連接等工作產生的臨時表
用戶表空間(userspace):存放用戶自己定義的表
表: 在邏輯上,表存儲於一個表空間中,實際上是分佈在對應表空間的物理容器中,表空間在數據庫內創建,表則在表空間內創建。
三、創建數據庫:
1、數據庫名稱的規則是:
· 數據庫名稱可以由以下字符組成:a-z、A-Z、0-9、@、# 和 $。
· 名稱中的第一個字符必須是字母字符、@、# 或 $;它不能是數字,也不能構成字母序列 SYS、DBM 或 IBM。
· 數據庫名稱或數據庫別名是一個唯一的字符串,包含一至八個上述字符集中的字母、數字或鍵盤字符。
2、CREATE DATABASE 命令創建了什麼?
當你發出 CREATE DATABASE 命令時,DB2 創建了許多文件。這些文件包括日誌文件、配置信息、歷史文件和三個表空間及其對應的容器。這三個表空間是:
- SYSCATSPACE:這是存放 DB2 系統目錄的地方,系統目錄跟蹤所有與 DB2 對象相關的元數據(系統數據)。
- TEMPSPACE1:DB2 放置中間結果的臨時工作區。
- USERSPACE1:缺省情況下所有用戶對象(表和索引)所在的地方。
SQL00001 (當前實例在該盤創建的第一個數據庫)
|
SQL00002 (當前實例在該盤創建的第二個數據庫)
|
當使用create database mydb on f: 創建mdb數據庫時
也以在建立數據庫時,特別指定syscataspace、tempspace1、userspace1的設定:
create database test on d: user tablespace managed by system using(‘f:/testdb/dircon1’ ,‘f:/testdb/dircon2’)
SQL00001 (當前實例在該盤創建的第一個數據庫)
|
3、在控制中心裏面創建數據庫
四、 cREATE DATABASE 的完整語法
|
DB2 CREATE DATABASE 命令的完整語法可以在《DB2 命令參考大全》(DB2 Command Reference)中找到,不過下圖列舉了 DBA 會感興趣的主要選項。
>>-CREATE--+-DATABASE-+--database-name-------------------------->
'-DB-------'
>--+-----------------------------+----------------------------->
'-| Create Database options |-'
Create Database options
|--+---------------+--+-----------------------+----------------->
'-ON--+-path--+-' '-ALIAS--database-alias-'
'-drive-'
>--+----------------------------------------------+------------->
'-USING CODESET--codeset--TERRITORY--territory-'
>--+----------------------------------+------------------------->
| .-SYSTEM--------. |
'-COLLATE USING--+-COMPATIBILITY-+-'
+-IDENTITY------+
'-NLSCHAR-------'
>--+---------------------------------------+-------------------->
'-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
'-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
'-TEMPORARY TABLESPACE--| tblspace-defn |-'
tblspace-defn
|--MANAGED BY--------------------------------------------------->
.-,------------------.
V |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
| .-,-----------------------------------------------. |
| V | |
'-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
'-DEVICE-'
>--+-----------------------------+------------------------------>
'-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
'-PREFETCHSIZE--number-of-pages-'
|
示例:
CREATE DATABASE EMPLOYEE ON D: ALIAS emp
USING CODESET GBK TERRITORY CN COLLATE USING SYSTEM
USER TABLESPACE MANAGED BY SYSTEM USING ('D:/employeedata/datacon1', 'D:/employeedata/datacon2')
EXTENTSIZE 8 PREFETCHSIZE 8 OVERHEAD 10.50 TRANSFERRATE 0.33
TEMPORARY TABLESPACE MANAGED BY DATABASE USING (FILE 'D:/employeedata/tempcon' 512)
EXTENTSIZE 32 PREFETCHSIZE 32 OVERHEAD 10.50 TRANSFERRATE 0.33;
五、 表格空間(表空間)的管理
1、 表空間類型
(1)從存放表的類型分爲:系統表空間、臨時表空間、用戶表空間
(2)根據存儲數據的類型分爲:常規、大型、系統臨時、用戶臨時
(3)根據管理方式的不同分爲:
SMS類型表空間:表空間由操作系統(WINDOWS、UNIX等)創建並管理。
DMS類型表空間:也稱爲數據庫管理(人工管理)表空間,由數據庫管理器控制存儲空間。
一個表格空間只能由一種管理方式進行管理。
區別:
1、 容器類型不一樣,sms類型表空間容器只能是目錄
dms類型表間容器是文件或原始設備
2、 sms表空間中的容器不指定大小,不對數據預留空間,容器所在文件系統中可用空間的變動,直接影響到表空間的容量。
dms表空間的容器要預留空間並指定大小
3、 dms類型表空間可以加入數據容器以擴充容量,也可以刪除數據容器,但sms類型表格空間不允許。
4、 一個表如果建立在sms表格空間內,那麼這個表所有數據,包括索引及大型對象的字段數據,都會存放在這個表空間內,而如果建立在dms表空間內,可以指定表的索引、大型對象字段(long varchar 或 lob)存放在另外的表格空間內。
例如:
create table aa (…) in ts1 index in ts2 long in ts3
5、存儲分配的區別:
extent 是db2配置磁盤空間的單位。對於dms表格空間,db2每次在數據容器中分配一個extent,當一個extent用完後,回到下一個容器中再分配一個extent.
Sms表空間,db2每次分配一個page(數據頁),用完後在同一個容器中再分配一個頁,當成長到一個extent時,再換到下一個容器,依次進行。
特性
|
SMS
|
DMS
|
條帶分割?
|
是
|
是
|
對象管理
|
操作系統
|
DB2
|
空間分配
|
根據需要增長/縮減
|
預先分配;大小可以縮減或增長,但需要 DBA 介入。
|
管理的便利性
|
最佳;只需極少調優或不需調優
|
良好,但需要一些調優(例如,EXTENTSIZE PREFETCHSIZE )
|
性能
|
極佳
|
最佳;使用原始容器可使性能達到最多 5% 到 10% 的改善
|
2、 表空間、表和數據容器的關係
(1)表與表空間
表創建於表空間,表中的數據、索引和大型對象字段可以分別存放在不同的表空間中(該表創建於dms類型表空間中)
Table space1 tablespace2
Table space3 Table space4 Table space5
|
(2)表與數據容器
表空間中的表的數據分佈在該表空間的數據容器中。
當表空間由多個數據容器構成時,db2會把表的數據用循環的方式分散在這些容器上。
例:
如果在表空間中建立一個employee表,db2 會把employee表的數據存在container0中,當數據量增大到一個extent後,就會把該表後面的數據放在container1中,當container1也用了一個extent後,再將後來的數據存到container2中,然後再到container0和container1中。
如果在這個表格空間中再創建一個表格dept,db2會從container1開始存放數據,如果再創建第三個表格project,db2會從container2開始創建表格。
最終,三個表的數據會以循環的方式,分散存放在3個容器上。
拆模:db2將數據循環分佈在數據容器上的做法稱爲拆模。
好處:增進數據讀取的性能
示例:你的機器上有4個磁盤驅動器,你建了一個由4個數據容器構成的表格空間,這4個數據容器分別放在這些磁盤驅動器上,通過拆模的作用,就可以將一個表格的數據“打散”在4個磁盤驅動器上,當db2需要從表格中讀取大量的數據時,就可以利用4個磁盤驅動器獨立的 I/O CHANNEL 將數據讀入DB2的緩衝池。
3、 創建表格空間
表空間基於數據庫創建
表基於表空間創建
可指定創建的類型、管理方式
CREATE REGULAR (常規、系統臨時、用戶臨時、大型) TABLESPACE DATACON PAGESIZE 4 K
MANAGED BY SYSTEM (sms類型表空間)
USING ('D:/employeedata/data' )
(sms類型表空間只能使用目錄容器)
EXTENTSIZE 16 OVERHEAD 10.5 PREFETCHSIZE 16 TRANSFERRATE 0.33 BUFFERPOOL IBMDEFAULTBP DROPPED TABLE RECOVERY OFF;
CREATE TABLE ADMINISTRATOR.TEST ( SS CHARACTER (10) ) IN "DATACON" ; (用戶表只能創建於常規類型表空間中)
4、 察看數據庫中的表格空間
當連接到數據庫時,察看該數據庫的表格空間,使用命令:
db2 list tablsespaces
db2 list tablespaces show detail
5、 擴充與縮小表格空間
通過在表格空間中加入、刪除、修改數據容器來擴充和縮小表格空間
dms表格空間的數據容器管理
(1)ALTER TABLESPACE SUN ADD ( FILE 'D:/testdb/dircon4' 5120 ); 只能是文件和設備 , 紅色數字爲數據容器的大小
(2)ALTER TABLESPACE SUN ADD ( DEVICE '//./D:' 5120 ); 添加原始設備作爲數據容器
(3)改變容器大小:
ALTER TABLESPACE SUN RESIZE ( FILE 'D:/testdb/dircon4'
512 );resize爲重新定義大小。
ALTER TABLESPACE sun reduce ( file 'd:/testdb/dircon3' 20)
reduce在原大小基礎上減去20頁
sms表格空間的數據容器添加
ALTER TABLESPACE USERSPACE1 ADD ('D:/testdb/dircon5' ); 只能是目錄和設備
六、 模式
模式是用來將一組數據庫對象(例如,表、視圖、索引和別名)分組的唯一標識符。即,如果您正在創建一個名爲 PAYROLL 的表,則需要單調地搜索數據庫以便弄清楚是否其他某些用戶已經創建了同名的表。每個對象的名稱只需要在它自己的模式中是唯一的。
大多數數據庫對象的名稱都由兩部分組成,第一部分是模式名,第二部分是對象的名稱。當創建了對象時,可以將它分配給特定模式。如果不指定模式,則將它分配給缺省模式,該模式通常就是創建對象的人員的用戶標識。例如,姓名爲 Smith 的用戶可能具有一個名爲 SMITH.PAYROLL 的表。
模式也成爲數據庫中的一個對象。模式是在創建模式中的第一個對象時創建的。模式可以由單個所有者所有,並且所有者可以控制對其中的數據和對象的存取權。
您可以:
- 創建模式。
- 通過在創建對象時指定模式名來顯式地將對象添加到模式中。
- 通過在創建對象時不指定模式名來隱式地將對象添加到當前模式中(通常是您的用戶標識)。
- 刪除模式。
- 授予或取消對模式的特權。
七、 緩衝池
緩衝池就是在處理期間對數據庫頁進行讀取、修改和保存所在的內存區域。
緩衝池可提高數據庫性能。如果所需要的數據頁已存在於緩衝池中,則存取該頁將比直接從磁盤中讀取它更快。數據庫管理器具有代理進程,代理進程的任務是從磁盤中檢索數據頁,並將它們放入緩衝池(預取器)中,以及將修改過的數據頁從緩衝池寫回到磁盤(頁清除器)中。
從磁盤中讀取數據頁以及將數據頁寫入磁盤就稱爲磁盤輸入/輸出(I/O)。提高數據庫性能的主要方法是避免與磁盤 I/O 相關聯的等待。您如何創建緩衝池、配置數據庫管理器以及與緩衝池相關聯的代理進程,將會控制數據庫的性能。通過 SQL 和配置參數,可以控制緩衝池的大小、用來將數據頁移入和移出緩衝池的預取器和頁清除器的數目、數據頁的大小以及一次可以移動的數據頁數。
數據庫必須始終至少具有一個緩衝池。DB2 提供了缺省緩衝池(IBMDEFAULTBP),可以直接使用它或者改變之後再使用它。
您可以:
- 創建緩衝池。
- 改變緩衝池。
- 刪除緩衝池,但是缺省緩衝池除外。
試驗:
一、 創建數據庫
命令1:create database mydb on d:
命令2:ccreate database test on d: user tablespace managed by system using ('d:/testdb/dircon1','d:/testdb/dircon2')
分別觀察在d盤所創建的文件結構
命令3:ccreate database newtest on d: user tablespace managed by system using ('d:/testdb/dircon1','d:/testdb/dircon2')
執行命令3,觀察是否能正確執行,找出原因
試驗總結:
一、 命令1和2 分別在d:盤上生成了什麼文件夾和文件,用途分別是什麼
二、命令3能否執行,如不能,什麼原因?
試驗:
練習使用以下表格管理命令:
1、 創建表格空間
2、 使用list tablespaces 命令察看當前數據庫表格空間情況
3、 使用list tablespaces show detail 命令察看當前數據庫表格空間情況
分別使用命令窗口和命令中心兩種方式執行。