DB2 数据库
数据库是表、模式、缓冲池、日志、存储组和表空间的集合,它们一起工作以有效地处理数据库操作。
数据库目录
数据库目录是一个有组织的数据库存储库。 创建数据库时,数据库的所有详细信息都存储在数据库目录中,例如默认存储设备的详细信息、配置文件和临时表列表等。
在实例文件夹中创建分区全局目录。 该目录包含与数据库相关的所有全局信息。 此分区全局目录名为 NODExxxx/SQLyyy
,其中 xxxx 是数据分区号,yyy 是数据库令牌。
在分区全局目录中,创建了一个特定于成员的目录。 该目录包含本地数据库信息。 特定于成员的目录被命名为 MEMBERxxxx
,其中 xxxx 是成员编号。 DB2 Enterprise Server Edition 环境在单个成员上运行,并且只有一个成员特定目录。 此成员特定目录唯一命名为 MEMBER0000
。
分区全局目录
目录位置:<实例>/NODExxx/SQLxxx
分区全局目录包含数据库相关文件,如下所列。
- 全局死锁写入文件事件监控文件
- 表空间信息文件[SQLSPCS.1、SQLSPCS.2]
- 存储组控制文件[SQLSGF.1、SQLSGF.2]
- 临时表空间容器文件。 [
/存储路径//T0000011/C000000.TMP/SQL00002.MEMBER0001.TDA
] - 全局配置文件 [SQLDBCONF]
- 历史文件 [DB2RHIST.ASC、DB2RHIST.BAK、DB2TSCHG.HIS、DB2TSCHG.HIS]
- 日志记录相关文件 [SQLOGCTL.GLFH.1, SQLOGCTL.GLFH.2]
- 锁定文件 [SQLINSLK、SQLTMPLK]
- 自动存储容器
成员专用目录
目录位置:/NODExxxx/SQLxxxx/MEMBER0000
该目录包含:
- 与数据库关联的对象
- 缓冲池信息文件 [SQLBP.1, SQLBP.2]
- 本地事件监控文件
- 与日志记录相关的文件 [SQLOGCTL.LFH.1、SQLOGCTL.LFH.2、SQLOGMIR.LFH]。
- 本地配置文件
- 死锁事件监视器文件。 在 ESE 和分区数据库环境下,详细的死锁事件监视器文件存储在目录节点的数据库目录中。
创建数据库
我们可以使用 CREATE DATABASE
命令在实例中创建数据库。 所有数据库都是使用默认存储组“IBMSTOGROUP”创建的,该组是在创建实例时创建的。 在 DB2 中,所有的数据库表都存储在“表空间”中,表空间使用各自的存储组。
数据库的权限自动设置为 PUBLIC [CREATETAB、BINDADD、CONNECT、IMPLICIT_SCHEMA 和 SELECT],但是,如果存在 RESTRICTIVE
选项,则不会将权限授予 PUBLIC。
创建非限制性数据库
该命令用于创建非限制性数据库。
语法
创建一个新的数据库。 ‘database_name’表示要创建的新数据库名称。
db2 create database <database name>
示例
创建一个名为“one”的新的非限制性数据库
db2 create database one
输出
DB20000I The CREATE DATABASE command completed successfully.
创建限制性数据库
调用此命令时会创建限制性数据库。
语法
在下面的语法中,“db_name”表示数据库名称。
db2 create database <db_name> restrictive
示例
创建一个名为“two”的新限制性数据库
db2 create database two restrictive
使用不同的用户定义位置创建数据库
在不同的路径上创建一个带有默认存储组“IBMSTOGROUP”的数据库。 之前,您在没有任何用户定义位置的情况下调用了“创建数据库”命令,以在特定位置存储或创建数据库。 要使用用户定义的数据库位置创建数据库,请遵循以下过程:
语法
在下面的语法中,'db_name' 表示'数据库名称','data_location' 表示必须在文件夹中存储数据的位置,'db_path_location' 表示'data_location' 的驱动程序位置。
db2 create database '<db_name>' on '<data location>' dbpath on '<db_path_location>'
示例
创建名为“four”的数据库,其中数据存储在“data1”中,此文件夹存储在“dbpath1”中
db2 create database four on '/data1' dbpath on '/dbpath1'
查看本地或系统数据库目录文件
我们执行此命令以查看当前实例中可用的目录列表。
语法
db2 list database directory
示例
db2 list database directory
输出
System Database Directory
Number of entries in the directory = 6
Database 1 entry:
Database alias = FOUR
Database name = FOUR
Local database directory =
/home/db2inst4/Desktop/dbpath
Database release level = f.00
Comment =
Directory entry type = Indirect
Catalog database partition number = 0
Alternate server hostname =
Alternate server port number =
Database 2 entry:
Database alias = SIX
Database name = SIX
Local database directory = /home/db2inst4
Database release level = f.00
Comment =
Directory entry type = Indirect
Catalog database partition number = 0
Alternate server hostname =
Alternate server port number =
激活数据库
此命令为特定数据库启动所有必要的服务,以便该数据库可供应用程序使用。
语法
‘db_name’表示数据库名
db2 activate db <db_name>
示例
激活数据库“one”
db2 activate db one
停用数据库
使用此命令,我们可以停止数据库服务。
语法
db2 deactivate db <db_name>
示例
停用数据库“one”
db2 deactivate db one
连接到数据库
创建数据库后,要使用它,需要连接或启动数据库。
语法
db2 connect to <database name>
示例
将数据库 one 连接到当前 CLI
db2 connect to one
输出
Database Connection Information
Database server = DB2/LINUXX8664 10.1.0
SQL authorization ID = DB2INST4
Local database alias = ONE
验证数据库是否有限制
要检查此数据库是否具有限制性,语法如下:
语法
以下语法中,‘db’表示数据库,‘cfg’表示配置,‘db_name’表示数据库名
db2 get db cfg for <db_name> | grep -i restrict
示例
检查“ one ”数据库是否受限
db2 get db cfg for one | grep -i restrict
输出
Restrict access = NO
配置数据库管理器和数据库
实例配置(数据库管理器配置)存储在名为“db2system”的文件中,数据库相关配置存储在名为“SQLDBCON”的文件中。 这些文件不能直接编辑。 我们可以使用调用 API 的工具来编辑这些文件。 使用命令行处理器,我们可以使用这些命令。
数据库管理器配置参数
语法:[获取实例数据库管理器的信息]
db2 get database manager configuration
或者
db2 get dbm cfg
语法
更新实例数据库管理器
db2 update database manager configuration
或者
db2 update dbm cfg
语法
重置以前的配置
db2 reset database manager configuration
或者
db2 reset dbm cfg
数据库配置参数
语法
获取数据库信息
db2 get database configuration
或者
db2 get db cfg
语法
更新数据库配置
db2 update database configuration
或者
db2 update db cfg
语法
重置数据库配置中先前配置的值
db2 reset database configuration
或者
db2 reset db cfg
语法
检查当前活动数据库的大小
db2 "call get_dbsize_info(?,?,?,-1)"
示例
验证当前激活数据库的大小
db2 "call get_dbsize_info(?,?,?,-1)"
输出
Value of output parameters
--------------------------
Parameter Name : SNAPSHOTTIMESTAMP
Parameter Value : 2014-07-02-10.27.15.556775
Parameter Name : DATABASESIZE
Parameter Value : 105795584
Parameter Name : DATABASECAPACITY
Parameter Value : 396784705536
Return Status = 0
估计数据库所需的空间
要估计数据库的大小,必须考虑以下因素的影响:
- 系统目录表
- 用户表数据
- Long 字段数据
- 大对象 (LOB) 数据
- 索引空间
- 临时工作空间
- XML数据
- 日志文件空间
- 本地数据库目录
- 系统文件
检查数据库权限
我们可以使用以下语法检查在非限制性数据库上哪些数据库权限被授予 PUBLIC。
第一步:使用实例的认证用户名和密码连接到数据库。
语法
使用用户名和密码连接到数据库
db2 connect to <db_name> user <userid> using <password>
示例
使用用户标识“db2inst4”和密码“db2inst4”连接“一个”数据库
db2 connect to one user db2inst4 using db2inst4
输出
Database Connection Information
Database server = DB2/LINUXX8664 10.1.0
SQL authorization ID = DB2INST4
Local database alias = ONE
第二步:验证数据库的权限。
语法
以下语法为当前数据库权限服务结果
db2 "select substr(authority,1,25) as authority, d_user, d_group,
d_public, role_user, role_group, role_public,d_role from table(
sysproc.auth_list_authorities_for_authid ('public','g'))as t
order by authority"
示例
db2 "select substr(authority,1,25) as authority, d_user, d_group,
d_public, role_user, role_group, role_public,d_role from table(
sysproc.auth_list_authorities_for_authid ('PUBLIC','G'))as t
order by authority"
输出
AUTHORITY D_USER D_GROUP D_PUBLIC ROLE_USER ROLE_GROUP ROLE_PUBLIC D_ROLE
------------------------- ------ ------- -------- --------- ---------- ----------- ------
ACCESSCTRL * * N * * N *
BINDADD * * Y * * N *
CONNECT * * Y * * N *
CREATETAB * * Y * * N *
CREATE_EXTERNAL_ROUTINE * * N * * N *
CREATE_NOT_FENCED_ROUTINE * * N * * N *
CREATE_SECURE_OBJECT * * N * * N *
DATAACCESS * * N * * N *
DBADM * * N * * N *
EXPLAIN * * N * * N *
IMPLICIT_SCHEMA * * Y * * N *
LOAD * * N * * N *
QUIESCE_CONNECT * * N * * N *
SECADM * * N * * N *
SQLADM * * N * * N *
SYSADM * * * * * * *
SYSCTRL * * * * * * *
SYSMAINT * * * * * * *
SYSMON * * * * * * *
WLMADM * * N * * N *
20 record(s) selected.
删除数据库
使用 Drop
命令,我们可以从实例数据库目录中删除我们的数据库。 该命令可以删除其所有对象、表、空间、容器和关联文件。
语法
从实例中删除任何数据库
db2 drop database <db_name>
示例
从实例中删除“six”数据库
db2 drop database six
输出
DB20000I The DROP DATABASE command completed successfully