教程 > DB2 教程 > DB2 基础 阅读:69

DB2 数据库

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

db2 数据库结构
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 [CREATETABBINDADDCONNECTIMPLICIT_SCHEMASELECT],但是,如果存在 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 

查看笔记

扫码一下
查看教程更方便