DB2 - 数据库

本章介绍使用相关语法创建、激活和停用数据库。

数据库架构

数据库架构

数据库是表、模式、缓冲池、日志、存储组和表空间的集合,它们协同工作以有效地处理数据库操作。

数据库目录

数据库目录是一个有组织的数据库存储库。 创建数据库时,有关数据库的所有详细信息都存储在数据库目录中,例如默认存储设备、配置文件和临时表列表等详细信息。

在实例文件夹中创建分区全局目录。 该目录包含与数据库相关的所有全局信息。 该分区全局目录名为 NODExxxx/SQLyyy,其中 xxxx 是数据分区号,yyy 是数据库令牌。

在分区全局目录中,创建了一个特定于成员的目录。 该目录包含本地数据库信息。 成员特定目录被命名为 MEMBERxxxx,其中 xxxx 是成员编号。 DB2 Enterprise Server Edition 环境在单个成员上运行,并且只有一个特定于成员的目录。 该成员特定目录唯一命名为 MEMBER0000。

分区全局目录

目录位置 : <instance>/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> 

示例:[将数据库一连接到当前 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   
OR
db2 get dbm cfg   

语法:[更新实例数据库管理器]

db2 update database manager configuration   
OR
db2 update dbm cfg  

语法:[重置以前的配置]

db2 reset database manager configuration  
OR
db2 reset dbm cfg  

数据库配置参数

语法:[获取数据库信息]

db2 get database configuration   
OR
db2 get db cfg  

语法:[更新数据库配置]

db2 update database configuration    
OR
db2 update db cfg  

语法:[重置数据库配置中先前配置的值

db2 reset database configuration     
OR
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    

估计数据库所需的空间

为了估计数据库的大小,必须考虑以下因素的影响:

  • 系统目录表
  • 用户表数据
  • 长字段数据
  • 大型对象 (LOB) 数据
  • 索引空间
  • 临时工作空间
  • XML 数据
  • 日志文件空间
  • 本地数据库目录
  • 系统文件

检查数据库权限

您可以使用以下语法来检查在非限制性数据库上向 PUBLIC 授予了哪些数据库权限。

第 1 步:使用实例的身份验证用户 ID 和密码连接到数据库。

语法:[使用用户名和密码连接到数据库]

db2 connect to <db_name> user <userid> using <password>      

示例:[使用用户 ID"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        

第2步:验证数据库的权限。

语法:[下面的语法显示了当前数据库的权限服务的结果]

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