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 
    
    例子: [创建一个名为“二”的新限制性数据库]
    
    db2 create database two restrictive 
    
  • 创建具有不同用户定义位置的数据库

    在不同路径上创建具有默认存储组“IBMSTOGROUP”的数据库。之前,您在没有任何用户定义位置的情况下调用了命令“create database”来在特定位置存储或创建数据库。要使用用户定义的数据库位置创建数据库,请遵循以下过程:
    语法: [在下面的语法中,“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> 
    
    例子: [激活数据库‘一’]
    
    db2 activate db one  
    
  • 停用数据库

    使用此命令,您可以停止数据库服务。
    语法:
    
    db2 deactivate db <db_name>
    
    例子:[停用数据库“一”]
    
    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 
    
    例子:[检查“一个”数据库是否受到限制]
    
    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 输出 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 哪些数据库权限。
    Step 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        
    
    Step2: 验证数据库的权限。
    语法: [以下语法显示当前数据库的权限服务结果]
    
    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>
    
    例子:[从实例中删除“六”数据库]
    
    db2  drop database six 
    
    输出:
    
    DB20000I The DROP DATABASE command completed successfully