基础
一个DB2实例可以同时管理多个DB2数据库
一个DB2数据库只能由一个DB2实例管理
一个DB2数据库只能使用一种代码页
表table存放在表空间tablespace中
数据库最小的存储单位是数据页datapage,
DB2数据库中有4KB、8KB、16KB、32KB数据页,
代码页
DB2的字符数据类型,例如char、varchar、clob、dbclob都有相关联的字符代码页,可以把代码页理解为对照表,用来将字母、数字转换为用来存储的二进制数据
代码页在create database中通过codeset、territory来指定,在数据库创建好之后不能再进行修改
整理次序
默认情况下,DB2的整理次序根据create database中使用的代码集进行定义,默认选项collate using system,会根据为数据库指定的territory对数据值进行比较,如果使用选项collate using identity,那么以逐字节的方式使用二进制表示来比较所有值;
建库时的默认操作
执行create database命令时,DB2会创建日志文件、配置信息、历史文件和3个默认表空间,这3个表空间分别是SYSCATSPACE、TEMPSPACE1、USERSPACE1。
对于Linux/UNIX系统下,这些文件默认存放在实例用户的home目录下,而Windows则是存放在DB2产品所在的安装盘目录下,这里注意下,DB2 V9之前create database会为所有对象创建SMS表空间,到了DB2 V9时,除了系统临时表空间,其他所有表空间默认定义为DMS自动存储表空间。
管理类型
DB2支持3种管理类型的表空间:
- 系统管理的空间(System-Managed Space,SMS)
- 数据库管理的空间(Database-Managed Space,DMS)
- DMS的自动存储(Automatic Storage With DMS),DB2 V8.2.2引入
关键字
- CODESET、TERRITORY
- MANAGED BY DATABASE USING (File ‘容器绝对或相对的文件名’ 容器大小)
- EXTENTSIZE 16,表示指定数据库可以写到容器中的PAGESIZE页面数量为16,达到这个数量之后将跳到下一个容器
- PREFETCHSIZE 16,指定在执行数据预获取时将从表空间中读取的PAGESIZE页面的数量为16
- OVERHEAD、TRANSFERRATE,这2个参数用于确定查询优化期间的IO成本,测量单位都是毫秒
1. 建库
数据库的命名规则如下:
- 数据库的名称可以由以 下字符组成: az、AZ、 0~9、@、#和$。
- 数据库的名称不能超过8个字母。
- 名称中的第1个字符必须是字母表字符、@、#或$,不能是数字或字母序列SYS、DBM或IBM
-- 创建数据库,并指定代码页
CREATE DATABASE NETSEAL USING CODESET UTF-8 TERRITORY CN;
-- 数据库使用默认整理次序,
-- USER 表空间,基于DMS管理空间,表空间数据存储至‘NETSEAL’,表空间初始大小16k,
CREATE DATABASE NETSEAL COLLATE USING SYSTEM
USER TABLESPACE MANAGED BY DATABASE USING (FILE 'NETSEAL' 51200) EXTENTSIZE 16 PREFETCHSIZE 16 OVERHEAD 14.06 TRANSFERRATE 0.33
CATALOG TABLESPACE MANAGED BY DATABASE USING (FILE 'NETSEALsys' 51200) EXTENTSIZE 8 PREFETCHSIZE 8 OVERHEAD 14.06 TRANSFERRATE 0.33
TEMPORARY TABLESPACE MANAGED BY DATABASE USING (FILE 'NETSEALtemp' 51200) EXTENTSIZE 32 PREFETCHSIZE 32 OVERHEAD 14.06 TRANSFERRATE 0.33;
CONNECT TO NETSEAL user db2inst1 using db2inst1;
CREATE BUFFERPOOL BUFFPOOL16 SIZE 5000 PAGESIZE 16384;
DEACTIVATE DATABASE NETSEAL;
RESTART DATABASE NETSEAL user db2inst1 using db2inst1;
CONNECT RESET;
CONNECT TO NETSEAL user db2inst1 using db2inst1;
-- 创建表空间(数据),名为NETSEAL_DATA
CREATE REGULAR TABLESPACE NETSEAL_DATA IN NODEGROUP IBMDEFAULTGROUP PAGESIZE 16384 MANAGED BY DATABASE USING (FILE 'NETSEAL_DATA'12800) EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL BUFFPOOL16 OVERHEAD 24.100000 TRANSFERRATE 0.900000;
-- 创建表空间(索引),名为NETSEAL_IDX
CREATE REGULAR TABLESPACE NETSEAL_IDX IN NODEGROUP IBMDEFAULTGROUP PAGESIZE 16384
MANAGED BY DATABASE USING (FILE 'NETSEAL_IDX'6400) EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL BUFFPOOL16 OVERHEAD 24.100000 TRANSFERRATE 0.900000;
-- 创建表空间(临时文件),名为TMPSPACE
CREATE TEMPORARY TABLESPACE TMPSPACE IN NODEGROUP IBMTEMPGROUP PAGESIZE 16384
MANAGED BY DATABASE USING (FILE 'NETSEAL_TMP'6400) EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL BUFFPOOL16 OVERHEAD 24.100000 TRANSFERRATE 0.900000;
-- 修改建库时默认产生的3个表空间参数
ALTER TABLESPACE SYSCATSPACE PREFETCHSIZE 16 OVERHEAD 24.100000 TRANSFERRATE 0.900000;
ALTER TABLESPACE TEMPSPACE1 PREFETCHSIZE 16 OVERHEAD 24.100000 TRANSFERRATE 0.900000;
ALTER TABLESPACE USERSPACE1 PREFETCHSIZE 16 OVERHEAD 24.100000 TRANSFERRATE 0.900000;
-- 设置NETSEAL_DATA 和 NETSEAL_IDX 2个表空间为自动扩容
ALTER TABLESPACE NETSEAL_DATA AUTORESIZE YES;
ALTER TABLESPACE NETSEAL_IDX AUTORESIZE YES;
2.建表
CREATE TABLE SEAL_USER
(
ID BIGINT NOT NULL,
ACCOUNT VARCHAR(30) NOT NULL,
STATUS INTEGER NOT NULL
) IN NETSEAL_DATA INDEX IN NETSEAL_IDX;
ALTER TABLE SEAL_USER ADD PRIMARY KEY (ID);
3. 建索引
CREATE UNIQUE INDEX U_SEAL_USER ON SEAL_USER(ACCOUNT) PCTFREE 10;
CREATE INDEX N_SEAL_USER ON SEAL_USER(CREATE_TIME) PCTFREE 10;