创建DB2数据库
DB2数据库概述
数据库、表空间、表的关系
•数据库由实例进行创建和管理
•数据库包含一到多个表空间
•表存储在表空间中
表空间、容器、区与数据页
•数据库的最小存储单位是数据页(datapage)
•区(extent)由整数倍的数据页组成
•表空间容器(Container)是由多个区组成的
•表空间(Tablespace)由一到多个容器组成
容器与表空间
•表、索引等逻辑对象放在表空间中
•容器是位于底层的物理存储
•表空间是数据库物理存储与逻辑存储的统一
•容器可以是目录、文件或者设备
表空间存储的类型
•系统管理的空间(System-Managed Space,SMS):
— 表空间容器使用操作系统的目录
—操作系统的文件系统管理表空间的存储
•数据库管理的空间(Database-Managed Space,DMS):
—表空间容器可使用文件或者裸设备
—数据库管理表空间的存储
•DMS的自动存储(Automatic Storage With DMS):
—不是单独的表空间类型
—数据库使用预定义的容器管理表空间的存储
•三种存储的表空间可以共存于同一个数据库
创建数据库
语法:
数据库的名称和分区
•database-name 指定数据库的名称
•AT DBPARTIONNUM用于指定在哪个数据库的分区恢复数据库
•最简单的建库命令: create database database_name
数据库和自动存储的位置
别名、代码页和整理次序
•ALIAS db-alias为数据库指定别名
•CODESET(字符集)和TERRITORY(地域)用于指定代码页
•COLLATE指定数据库的整理次序
数据页与默认区的大小
•PAGESIZE指定数据库的表空间和缓冲池所使用的默认数据页大小
•DFT_EXTENT_SZ指定数据库的表空间默认使用的区的大小
默认的表空间
•SYSCATSPACE:用CATALOG TABLESPACE指定,存储DB2系统编目,即“数据字典”
•TEMPSPACE1:用TEMPORARY TABLESPACE指定,是DB2放置分组、排序、连接和重组等操作中间结果集的临时存储区域
•USERSPACE1:用USER TABLESPACE指定,默认情况下存储所有用户对象的表空间
数据库目录
•数据库目录用于存储数据库的默认信息:如表空间、表、容器等信息
•创建位置取决于创建数据库时指定的数据库路径
•分区全局目录结构:db_path/instance_name/NODE0000/SQL00001
—db_path:创建数据库时指定的路径
—instance_name:与实例名相同的子目录
—NODE0000:用于区分多分区数据库的逻辑分区
—SQL00001:包含第一个数据库以及随后所创建数据库相关联的对象
•特定成员目录:MEMBER0000
分区全局目录
•表空间信息文件
—SQLSPCS.1 和 SQLSPCS.2
•存储器组控制文件
— SQLSGF.1 和 SQLSGF.2
•全局配置文件
—SQLDBCONF
•历史记录文件
—DB2RHIST.ASC 和DB2RHIST.BAK
•与日志记录相关的文件
—SQLOGCTL.GLFH.1 和 SQLOGCTL.GLFH.2
特定成员目录
•缓冲池信息文件
—SQLBP.1 和 SQLBP.2
•本地事件监视器文件
•与日志记录相关的文件
—SQLOGCTL.LFH.1
—SQLOGCTL.LFH.2
—SQLOGMIR.LFH
•本地配置文件
—SQLDBCONF
•锁定文件
—SQLINSLK 和 SQLTMPLK
数据库目录和文件
当创建一个数据库时,关于该数据库的信息(包括缺省信息)会存储在目录层次结构中。
系统已为您创建分层目录结构。可通过对 CREATE DATABASE 命令指定目录路径或驱动器来指定该结构的位置;如果未指定位置,那么会使用缺省位置。
在您在 CREATE DATABASE 命令中您指定为数据库路径的目录中,会创建使用该实例名称的子目录。
在实例名子目录内,会创建分区全局目录。分区全局目录包含与新数据库相关联的全局信息。分区全局目录名为NODExxxx/SQLyyyyy,其中 xxxx 是数据分区号,yyyyy 是数据库标记(编号大于等于 1)。
在分区全局目录下,会创建特定于成员的目录。特定于成员的目录包含本地数据库信息。特定于成员的目录名为 MEMBERxxxx,其中 xxxx 是成员号。在 DB2® pureScale® 环境中,每个成员都有一个名为 MEMBER0000、MEMBER0001 等特定于成员的目录。
在分区数据库环境中,成员编号与其对应分区号之间存在一对一映射,因此,每个成员和分区对应一个 NODExxxx 目录。特定于成员的目录始终名为 MEMBERxxxx,并且它们始终驻留在分区全局目录下。
企业服务器版环境在单个成员上运行,并且有一个特定于成员的目录,名为 MEMBER0000。
分区全局目录
分区全局目录具有以下路径:your_instance/NODExxxx/SQLxxxxx。
分区全局目录包含以下文件:全局死锁写至文件事件监视器文件,它指定相对路径或根本不指定任何路径。
表空间信息文件:SQLSPCS.1 和 SQLSPCS.2 文件都包含表空间信息。这两个文件互为副本以实现备份。
存储器组控制文件: SQLSGF.1 和 SQLSGF.2 包含与数据库的自动存储器功能相关联的存储器组信息。这两个文件互为副本,旨在进行维护和备份。这些文件是在您使用 CREATE DATABASE 命令创建数据库或将非自动存储器数据库升级至 DB2 V10.1 或更高版本时创建的。
临时表空间容器文件。新容器的缺省目录是 instance/NODExxxx/。这些文件由每个成员在本地管理。系统会使这些表空间文件名对每个成员唯一,方法是将成员号插入到文件名中,例如:
/storage_path/SAMPLEDB/T0000011/C0000000.TMP/SQL00002.MEMBER0001.TDA
全局配置文件。全局配置文件 SQLDBCONF 包含数据库配置参数,它们引用在数据库中必须保持一致的单个共享资源。切勿编辑此文件。要更改配置参数,请使用 UPDATE DATABASE CONFIGURATION 和 RESET DATABASE CONFIGURATION 命令。
历史记录文件。DB2RHIST.ASC 历史记录文件及其备份 DB2RHIST.BAK 中包含关于备份、复原、表装入、表重组、表空间更改和其他数据库更改的历史记录信息。
DB2TSCHG.HIS 文件包含日志文件级别的表空间更改的历史记录。对于每个日志文件,DB2TSCHG.HIS 中包含有助于确定日志文件影响哪些表空间的信息。表空间恢复使用此文件中的信息来确定在进行表空间恢复期间要处理哪些日志文件。可在文本编辑器中检查历史记录文件的内容。
与日志记录相关的文件。全局日志控制文件 SQLOGCTL.GLFH.1 和 SQLOGCTL.GLFH.2 包含数据库级别的恢复信息,例如,与数据库脱机时添加新成员及维护成员间的公共日志链相关的信息。日志文件本身存储在分区全局目录内的 LOGSTREAMxxxx 目录(每个成员对应一个目录)中。
锁定文件。实例数据库锁定文件 SQLINSLK 和 SQLTMPLK 有助于确保数据库仅被数据库管理器的一个实例使用。
自动存储器容器
特定于成员的目录
特定于成员的目录具有以下路径:/NODExxxx/SQLxxxx/MEMBERxxxx
此目录包含与创建的第一个数据库相关联的对象,后续数据库被给予更高的编号 SQL00002,以此类推。这些子目录可以区分在CREATE DATABASE 命令中指定的目录下的实例中创建的数据库。
数据库目录包含以下文件:缓冲池信息文件。SQLBP.1 和 SQLBP.2 文件都包含缓冲池信息。这两个文件互为副本以实现备份。
本地事件监视器文件。
与日志记录相关的文件。日志控制文件 SQLOGCTL.LFH.1 及其镜像副本 SQLOGCTL.LFH.2 和 SQLOGMIR.LFH 中包含有关活动日志的信息。在 DB2 pureScale 环境中,每个成员都有自己的日志流和本地 LFH 文件集,它们存储在每个特定于成员的目录中。
提示: 将日志子目录映射至您未用于存储数据的磁盘。通过这样做,您可将磁盘问题限制为数据或日志方面,从而避免数据和日志同时出现磁盘问题。将日志子目录映射至未用于存储数据的磁盘可大幅提高性能,因为日志文件和数据库容器不会为同一磁盘头的移动而竞争。要更改日志子目录的位置,请使用 newlogpath 数据库配置参数。
本地配置文件。本地 SQLDBCONF 文件包含数据库配置信息。切勿编辑此文件。要更改配置参数,请使用 UPDATE DATABASE CONFIGURATION 和 RESET DATABASE CONFIGURATION 命令。
在创建数据库的同时,还创建了详细死锁事件监视器。在企业服务器版环境和分区数据库环境中,详细死锁事件监视器文件存储在目录节点的数据库目录中。在 DB2 pureScale 环境中,详细死锁事件监视器文件存储在分区全局目录中。当事件监视器达到它要输出的最大文件数时,它将取消激活,并且将把一条消息写入通知日志中。这样做可避免事件监视器使用太多磁盘空间。将不再需要的输出文件除去即可在下次激活数据库时再次激活事件监视器。
注: 如果是将现有的 DB2 V9.5 或 V9.7 数据库升级到 V10.5,那么数据库日志目录已更改。如果使用用户定义的日志目录(例如 /usr/logpath),那么在升级之后日志文件的位置是 /usr/logpath/NODE0000/LOGSTREAM0000。如果使用缺省数据库目录(例如 /home/db2user/db2inst/NODE0000/SQL00001/SQLOGDIR),那么在升级之后日志文件的位置是/home/db2user/db2inst/NODE0000/SQL00001/LOGSTREAM0000。在升级之后,旧的日志目录仅包含已重命名的日志文件。可在db2diag.log 文件中查看有关新日志目录的信息。
非自动存储器数据库中的 SMS 数据库目录的其他信息
在非自动存储器数据库中,SQLT* 子目录包含缺省系统管理的空间 (SMS) 表空间:SQLT0000.0 子目录中包含带有系统目录表的目录表空间。
SQLT0001.0 子目录中包含缺省临时表空间。
SQLT0002.0 子目录中包含缺省用户数据表空间。
每个子目录或容器中都会创建一个名为 SQLTAG.NAM 的文件。这个文件可以标记正在使用中的子目录,因此在以后创建其他表空间时,不会尝试使用这些子目录。
此外,名为 SQL*.DAT 的文件中还存储有关子目录或容器包含的每个表的信息。星号 (*) 将被唯一的一组数字取代,用来识别每个表。对于每个 SQL*.DAT 文件,可能有一个或多个下列文件,这取决于表类型、表的重组状态或者表是否存在索引、LOB 或 LONG 字段:SQL*.BKM(包含块分配信息,如果它是 MDC 或 ITC 表)
SQL*.LF(包含 LONG VARCHAR 或 LONG VARGRAPHIC 数据)
SQL*.LB(包含 BLOB、CLOB 或 DBCLOB 数据)
SQL.XDA(包含 XML 数据)*
SQL*.LBA(包含有关 SQL*.LB 文件的分配和可用空间信息)
SQL*.INX(包含索引表数据)
SQL*.IN1(包含索引表数据)
SQL*.DTR(包含用于重组 SQL*.DAT 文件的临时数据)
SQL*.LFR(包含用于重组 SQL*.LF 文件的临时数据)
SQL*.RLB(包含用于重组 SQL*.LB 文件的临时数据)
SQL*.RBA(包含用于重组 SQL*.LBA 文件的临时数据)
更多相关概念与参考请登录官网查询(或者点击下面链接直接跳转):
数据库配置文件
节点目录 数据库管理器在编目第一个数据库分区时会创建节点目录。
本地数据库目录 在每条定义了数据库的路径中,都存在本地数据库目录文件。对于可从该位置访问的每个数据库,此目录中都包含一个相应的条目。
系统数据库目录 对于数据库管理器的每个实例,都存在一个系统数据库目录文件,该文件对于针对此实例编目的每个数据库都包含一个条目。
创建节点配置文件 如果数据库要在分区数据库环境中运行,那么必须创建一个名为 db2nodes.cfg
更改节点和数据库配置文件 要更新数据库配置文件,请运行带有适当选项的 AUTOCONFIGURE 命令。
数据库恢复日志数据库恢复日志保存对一个数据库所做的所有更改(包括新表的添加或对现有表的更新)的记录。实例和数据库目录的文件许可权要求
实例
恢复历史记录文件
CREATE DATABASE 命令
已安装的 DB2 数据库产品的目录结构 ( Windows )
实践:
#—数据库路径:/home/db2instl/mydb_path
#—自动存储路径: /home/db2instl/mydb_path
db2 "create database mydb1 on /home/db2instl/mydb_path"
#—数据库路径: /home/db2instl/mydb_path
#—未使用自动存储特性
db2 "create database mydb2 automatic storage no on /home/db2instl/mydb_path"
#—数据库路径: /home/db2instl/mydb_path/dbpath3
#—自动存储路径: /home/db2instl/mydb_path/auto3
db2 "create db mydb3 on /home/db2instl/mydb_path/auto3 dbpath on /home/db2instl/mydb_path/dbpath3"
#—数据库路径: /home/db2instl/mydb_path/db_path4
#—自动存储路径: /home/db2instl/mydb_path/auto41, /home/db2instl/mydb_path/auto42
db2 "create db mydb4 automatic storage yes on /home/db2instl/mydb_path/auto41,/home/db2instl/mydb_path/auto42 dbpath on /home/db2instl/mydb_path/db_path4"
#查看是否创建成功:
db2 list db directory