从今天开始DB2相关的内容

系统为 Redhat 7.4

数据库为 v10.5fp10

上节我们说了如何建立DB2实例,这节内容为建立数据库

DB2中一个实例下可以有多个数据库,一个数据库只能属于一个实例

## 1. 建立数据库目录

首先我们建立存放容器(数据文件)的目录

这里我们假设建立的数据库名称为testdb

```
su - root

mkdir /db2data

cd /db2data

mkdir db2_archive  tbs_data  backup

cd /db2data/tbs_data

mkdir testdb

chown -R db2inst1:db2iadm1 /db2data

chmod -R 775 /db2data
```

## 2. 建立数据库

接下来我们建立数据库

```
su - db2inst1

# 如果db2未开启则先开启

db2start 

db2 CREATE DATABASE testdb ON /db2data USING CODESET UTF-8 TERRITORY CN PAGESIZE 8192
```


[image:876 size:orig]



然后我们连接数据库

```
db2 activate db testdb
db2 connect to testdb
```

## 3. 数据库目录结构

当执行完上面的语句后,我们来看下DB2到底新建了什么

**/home/db2inst1/sqllib下面**


在家目录的sqllib下面新建了一个sqldbdir目录

[image:877 size:orig]


发现下面只有三个文件

[image:878 size:orig]


**/db2data目录里面**

在创建数据库的时候我们指定了容器(数据文件)的目录

DB2会在该目录下建立如下目录,为本地数据库编录目录

/db2data/db2inst1/NODE0000


其中db2inst1为实例名称 

NODE0000代表第一个节点,非DPF(分区数据库)中只有一个NODE0000


接下来包含3个目录

[image:879 size:orig]


- SQL00001 数据库编号,代表当前为该实例的第一个数据库
- sqldbdir本地数据库编录目录
- TESTDB为数据文件目录

**SQL00001目录**

[image:880 size:orig]


图中的1和2代表冗余文件

- db2rhist.asc  数据库历史文件,使用list history浏览
- SQLDBCONF 数据库参数配置文件,使用get db cfg/uodate db cfg 读取和修改
- SQLOGCTL.GLFH 数据库全局日志控制文件
- SQLSGF 存放和自动存储管理相关的信息,ASM默认启动
- SQLSPCS 表空间控制文件,使用list/alter tablespace控制
- HADR 存储HADR相关信息,类似于Oracle的DataGuard
- LOGSTREAM0000 活动日志存放的位置,类似于Oracle的Redo Log
- MEMBER0000 本地数据库信息


**SQL00001/MEMBER0000 目录**

[image:881 size:orig]

- SQLBP 数据库缓冲池文件
- SQLDBCONF 数据库参数文件,和SQL00001下的同名文件冗余
- SQLINSLK和SQLTMPLK是lock文件,用于确保数据库只能会一个实例占有
- SQLOGCTL.LFH 和SQLOGMIR.LFH 数据库日志控制文件,和 SQLOGCTL.GLFH冗余


**TESTDB目录**

[image:882 size:orig]

该目录存放数据文件,是数据库自动创建的

- T0000000 数据库系统表空间目录
- T0000001 数据库临时文件目录
- T0000002 数据库用户表空间目录
- T0000003 数据库系统工具表空间目录


[image:883 size:orig]

数据库的建立就说到这里,下一节为数据库的配置