一、
数据库的组成
(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/dircon 1’ ,‘f:/testdb/dircon 2’ )
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 命令察看当前数据库表格空间情况
分别使用命令窗口和命令中心两种方式执行。