DB2 快速指南
DB2简介
本章描述 DB2 的历史、版本、版本及其各自的功能。
概述
DB2 是 IBM 的数据库产品。它是一个关系数据库管理系统(RDBMS)。DB2 旨在高效地存储、分析和检索数据。DB2 产品通过面向对象功能和 XML 非关系结构的支持进行了扩展。
历史
最初,IBM 为其特定平台开发了 DB2 产品。从1990年开始,它决定开发通用数据库(UDB)DB2服务器,它可以运行在Linux、UNIX和Windows等任何权威操作系统上。
版本
对于IBM DB2,UDB当前版本为10.5,具有BLU Acceleration功能,其代号为“Kepler”。下面列出了迄今为止 DB2 的所有版本:
版本 | 代码名称 |
---|---|
3.4 | 蛛网 |
8.1, 8.2 | 刺 |
9.1 | 毒蛇 |
9.5 | 毒蛇2 |
9.7 | 眼镜蛇 |
9.8 | 它添加了仅 PureScale 的功能 |
10.1 | 伽利略 |
10.5 | 开普勒 |
数据服务器版本和功能
根据 DB2 所需功能的要求,组织选择合适的 DB2 版本。下表显示了 DB2 服务器版本及其功能:
版本 | 特征 |
---|---|
高级企业服务器版和企业服务器版(AESE / ESE) | 它专为中型到大型企业组织而设计。平台 - Linux、UNIX 和 Windows。表分区 高可用性 灾难恢复 (HARD) 物化查询表 (MQT) 多维集群 (MDC) 连接集中器 纯 XML 备份压缩 同构联合 |
工作组服务器版 (WSE) | 它专为工作组或中型企业组织而设计。使用此 WSE,您可以使用 - 高可用性灾难恢复 (HARD) 在线重组 纯 XML Web 服务联合支持 DB2 同质联合 同质 SQL 复制 备份压缩 |
快递-C | 它以零费用提供 DB2 的所有功能。它可以在任何配置规模的物理或虚拟系统上运行。 |
快捷版 | 它专为入门级和中型企业组织而设计。它是全功能的 DB2 数据服务器。它仅提供有限的服务。该版本附带 - Web 服务联合 DB2 同质联合 同质 SQL 复制 备份压缩 |
企业开发者版 | 它只提供单一应用程序开发人员。设计、构建和原型化应用程序以部署在任何 IBM 服务器上非常有用。该软件不能用于开发应用程序。 |
DB2 服务器安装
本章介绍DB2服务器的安装步骤。
介绍
您可以从www.ibm.com下载 DB2 Server 试用版或购买产品许可证。有两个独立的 DB2 服务器可供下载,具体取决于要执行的操作系统的大小。例如,如果您想要下载适用于 32 位 Linux 或 UNIX 操作系统的 DB2 服务器,那么您需要下载 32 位 DB2 服务器。这同样适用于 64 位 DB2 服务器。
硬件要求
处理器:最低 Core 2Duo
内存:至少 1GB
硬盘:最小 30GB
软件要求
在安装 DB2 服务器之前,您的系统需要准备好所需的软件。对于Linux,您需要安装“libstdc++6.0”。
检查系统兼容性
在安装 DB2 Server 之前,您需要验证您的系统是否与 DB2 服务器兼容。为了确认兼容性,您需要在命令控制台上调用“db2prereqcheck”命令。
在 Linux 操作系统上安装 DB2
打开终端并使用“CD <DB2 安装文件夹>”命令在控制台上设置 db2 安装映像文件夹路径。然后输入“./db2prereqcheck”命令,确认您的系统与 DB2 服务器的兼容性。
./db2prereqcheck
Linux操作系统和硬件系统的兼容性要求如图1所示。
请按照以下步骤在 Linux 系统上安装 DB2:
- 打开终端。
- 以 root 用户身份登录。
- 打开 DB2 安装文件夹。
- 输入“./db2setup”并按 Enter 键。
此进程将开始执行 DB2 服务器设置。
输入“./db2setup”并在根终端上按 Enter 键开始 DB2 Server 的安装过程。
执行此操作后,将出现“设置启动台”屏幕。[图2]
在“设置启动板”页面上,从左侧菜单中选择“安装产品”选项。选择选项“DB2 Advanced Enterprise Server Edition”。选择“安装新的”按钮。
将出现一个名为“DB2 setup Wizard”的新框架。点击下一步”。[图3]
下一个屏幕将显示 DB2 许可协议。选择“我接受条款...”点击“下一步”。[图4]
下一个屏幕会显示安装类型,默认设置为“典型”。
保持相同的选择。点击下一步”。[图5]
出现下一个屏幕并显示安装操作。
选择“安装 DB2 高级企业服务器版...”
点击下一步”。[图6]
在下一个屏幕上,安装程序要求选择安装目录。
保持默认,点击“下一步”。
下一个屏幕出现用户身份验证。输入“dasusr1”用户的密码。
(您的密码可以与用户名相同,方便记忆。)
在接下来的屏幕上,安装程序会要求您创建 DB2 服务器实例。
在这里,它正在创建一个名为“db2inst1”的 DB2 实例。
下一个屏幕会询问您默认实例所需的分区数。
您可以选择“单个或多个”分区。
选择“单分区实例”。点击下一步”。
在下一个屏幕上,安装程序会要求您对正在创建的 DB2 实例进行身份验证。
此处,默认用户名创建为“db2inst1”。您可以输入与用户名相同的密码。
点击下一步”。
在下一个屏幕上,安装程序要求输入“db2fenc”用户的身份验证信息。
在这里,您可以输入与用户名相同的密码。
点击下一步”。
在下一个屏幕上,您可以选择“此时不要将 db2 服务器设置为发送通知”选项。
点击下一步”。
下一个屏幕显示有关 db2 设置的信息。
单击“完成”。
DB2 安装过程在此阶段已完成。
验证 DB2 安装
您需要验证 DB2 服务器的安装是否有用。完成 DB2 服务器安装后,从当前用户模式注销并登录到“db2inst1”用户。在“db2inst1”用户环境中,您可以打开终端并执行以下命令来验证您的db2产品是否正确安装。
数据库级别
此命令显示当前实例已安装的 DB2 产品的当前版本和服务级别。
句法:
db2level
例子:
db2level
输出:
DB21085I Instance "db2inst2" uses "64" bits And DB2 code release "SQL10010" with level identifier "0201010E". Informational tokens are "DB2 v10.1.0.0", "s120403", "LINUXAMD64101", and Fix Pack "0". Product is installed at "/home/db2inst2/sqllib".
db2licm
此命令显示我们的 DB2 产品的所有许可证相关信息。
句法:
db2licm <parameter>
例子:
db2licm -l
输出:
Product name: "DB2 Advanced Enterprise Server Edition" License type: "Trial" Expiry date: "10/02/2014" Product identifier: "db2aese" Version information: "10.1" Product name: "DB2 Connect Server" License type: "Trial" Expiry date: "10/02/2014" Product identifier: "db2consv" Version information: "10.1"
命令行处理器 (CLP)
CLP 可以以三种模式之一启动:
命令模式:在此模式下,每个命令和SQL语句必须以“db2”为前缀。例如,查询“db2 activate 数据库示例”。
交互式输入模式:您可以使用“db2”命令启动此模式。在这里,您可以传递不带前缀的 SQL 语句。例如,“激活数据库示例”。
批处理模式:这里,您需要创建一个脚本文件,其中包含要求的所有SQL查询,并以“.db2”扩展名保存该文件。您可以使用语法“db2 –tf <filename.db2>”在命令行中调用它。
DB2 实例
介绍
实例是 DB2 数据库管理器的逻辑环境。使用实例,您可以管理数据库。根据我们的需求,您可以在一台物理机上创建多个实例。实例目录的内容是:
- 数据库管理器配置文件
- 系统数据库目录
- 节点目录
- 节点配置文件 [db2nodes.cfg]
- 调试文件、转储文件
对于 DB2 数据库服务器,默认实例是“DB2”。创建实例目录后无法更改其位置。一个实例可以管理多个数据库。在一个实例中,每个数据库都有一个唯一的名称、自己的一组目录表、配置文件、权限和特权。
DB2产品中实例的架构
多个实例
您可以在 Linux、UNIX 和 Windows 上的一台 DB2Server 中创建多个实例。一台物理机上可以安装多个DB2Server。
在 Linux 上创建实例
如果 DB2 Server 以 root 用户身份安装,则可以在 Linux 和 UNIX 上创建多个实例。实例可以同时独立运行在 Linux 和 UNIX 上。您一次可以在数据库管理器的单个实例中工作。
实例文件夹包含数据库配置文件和文件夹。根据操作系统版本的不同,实例目录在 Windows 上存储在不同的位置。
列出实例
以下命令用于列出实例:
db2ilist
此命令列出系统上可用的所有实例。
句法:
db2ilist
示例: [查看 DB2 副本中创建了多少个实例]
db2ilist
输出:
db2inst1 db2inst2 db2inst3
实例环境命令
这些命令对于在 DB2 CLI 中安排实例非常有用。
获取实例
此命令显示当前正在运行的实例的详细信息。
句法:
db2 get instance
示例: [查看激活当前用户的当前实例]
db2 get instance
输出:
The current database manager instance is : db2inst1
设置实例
要启动或停止 DB2 UDB 上实例的数据库管理器,将对当前实例执行以下命令。
句法:
set db2instance=<instance_name>
示例: [将“db2inst1”环境安排给当前用户]
set db2instance=db2inst1
db2启动
使用此命令,您可以启动一个实例。在此之前,您需要运行“设置实例”。
句法:
db2start
示例: [启动实例]
db2start
输出:
SQL1063N DB2START processing was successful
db2停止
使用此命令您可以停止正在运行的实例。
句法:
db2stop
输出:
SQL1064N DB2STOP processing was successful.
创建实例
让我们看看如何创建一个新实例。
db2icrt
如果您想创建新实例,则需要使用 root 登录。实例 ID 不是根 ID 或根名称。
以下是创建新实例的步骤:
Step1:创建一个操作系统用户实例。
句法:
useradd -u <ID> -g <group name> -m -d <user location> <user name> -p <password>
示例:[例如在组“db2iadm1”中创建名称为“db2inst2”、密码为“db2inst2”的用户]
useradd -u 1000 -g db2iadm1 -m -d /home/db2inst2 db2inst2 -p db2inst2
步骤2:以root用户进入DB2实例目录创建新实例。
地点:
cd /opt/ibm/db2/v10.1/instance
步骤3:使用以下语法创建实例:
句法:
./db2icrt -s ese -u <inst id> <instance name>
示例:[在用户“db2inst2”中创建具有“ESE”功能的新实例“db2inst2”(企业服务器版)]
./db2icrt -s ese -u db2inst2 db2inst2
输出:
DBI1446I The db2icrt command is running, please wait. …. ….. DBI1070I Program db2icrt completed successfully.
为实例安排通信端口和主机
编辑 /etc/services 文件并添加端口号。在下面给出的语法中,“inst_name”表示实例名称,“inst_port”表示实例的端口号。
句法:
db2c_<inst name> <inst_port>/tcp
示例:[在“services”文件中使用变量“db2c_db2inst2”添加实例“db2inst2”的“50001/tcp”端口号]
db2c_db2inst2 50001/tcp
语法 1:[使用服务名称更新数据库管理器配置。以下语法'svcename'表示实例服务名称,'inst_name'表示实例名称]
db2 update database manager configuration using svcename db2c_&<inst_name>
示例 1:[使用值为“db2c_db2inst2”的变量 svcename 更新 DBM 配置,例如“db2inst2”
db2 update database manager configuration using svcename db2c_db2inst2
输出
DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed successfully.
语法2:设置当前实例的“tcpip”通信协议
db2set DB2COMM=tcpip
语法 3:[停止和启动当前实例以从数据库管理器配置获取更新的值]
db2stop db2start
更新实例
您可以使用以下命令更新实例:
db2iupdt
该命令用于在同一版本发布内更新实例。在执行此命令之前,您需要使用“db2stop”命令停止实例数据库管理器。“inst_name”下面的语法表示先前发布或安装的 db2 服务器实例名称,您希望将其更新到较新版本或安装的 db2 服务器版本。
语法1:在正常模式下更新实例
db2iupdt <inst_name>
示例1:
./db2iupdt db2inst2
语法 2:在调试模式下更新实例
db2iupdt -D <inst_name>
例子
db2iupdt -D db2inst2
升级实例
您可以将实例从先前版本的 DB2 副本升级到当前新安装的 DB2 副本版本。
db2i升级
在 Linux 或 UNIX 系统上,该命令位于 DB2DIR/instance 目录中。在以下语法中,“inst_name”表示先前版本的 DB2 实例,“inst_username”表示当前安装的版本 DB2 副本实例用户。
语法2:
db2iupgrade -d -k -u <inst_username> <inst_name>
示例:
db2iupgrade -d -k -u db2inst2 db2inst2
命令参数:
-d:打开调试模式。
-k:如果您运行此命令的 DB2 副本支持升级前的实例类型,则保留该类型。
如果您在 Linux 上使用超级用户 (su) 执行 db2iupgrade 命令,则必须发出带有“-”选项的“su”命令。
删除实例
您可以删除或删除由“db2icrt”命令创建的实例。
db2idrop
在 Linux 和 UNIX 操作系统上,该命令位于 DB2_installation_folder/instance 目录中。
语法:[以下语法中,'inst_username'表示实例的用户名,'inst_name'表示实例名称]
db2idrop -u <inst_username> <inst_name>
示例:[删除 db2inst2]
./db2idrop -u db2inst2 db2inst2
在实例中使用其他命令
用于找出我们现在正在处理哪个 DB2 实例的命令。
语法 1:[检查数据库管理器激活的当前实例]
db2 get instance
输出:
The current database manager instance is: db2inst1
语法 2:[查看当前实例的操作位和发布版本]
db2pd -inst | head -2
例子:
db2pd -inst | head -2
输出:
Instance db2inst1 uses 64 bits and DB2 code release SQL10010
语法 3:[检查当前工作实例的名称]
db2 select inst_name from sysibmadm.env_inst_info
例子:
db2 select inst_name from sysibmadm.env_inst_info
输出:
INST_NAME -------------------------------------- db2inst1 1 record(s) selected.
语法:[将新实例设置为默认实例]
db2set db2instdef=<inst_name> -g
示例:[将新创建的实例排列为默认实例]
db2set db2instdef=db2inst2 -g
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>
示例:[将数据库一连接到当前 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 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
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
DB2 缓冲池
本章向您介绍数据库中的缓冲池。
介绍
缓冲池是由数据库管理器分配的主内存空间的一部分。缓冲池的目的是缓存磁盘上的表和索引数据。所有数据库都有自己的缓冲池。默认缓冲池是在创建新数据库时创建的。它称为“IBMDEFAULTBP”。根据用户要求,可以创建多个缓冲池。在缓冲池中,数据库管理器将表行数据作为页放置。该页将保留在缓冲池中,直到数据库关闭或空间被写入新数据为止。缓冲池中用数据更新但未写入磁盘的页面称为“脏”页面。将缓冲池中更新的数据页写入磁盘后,缓冲池就准备好获取另一个数据。
表空间和缓冲池之间的关系
每个表空间都与数据库中的特定缓冲池相关联。一个表空间与一个缓冲池关联。缓冲池和表空间的大小必须相同。多个缓冲池允许您配置数据库使用的内存以提高其整体性能。
缓冲池大小
缓冲池页面的大小是在使用“CREATE DATABASE”命令时设置的。如果不指定页面大小,则采用默认页面大小,即 4KB。缓冲池一旦创建,以后就无法修改页面大小
列出当前数据库目录中可用的缓冲池
语法:[下面的语法显示数据库中所有可用的缓冲池]
db2 select * from syscat.bufferpools
示例:[查看当前数据库中可用的缓冲池]
db2 select * from syscat.bufferpools
输出:
BPNAME BUFFERPOOLID DBPGNAME NPAGES PAGESIZE ESTORE NUMBLOCKPAGES BLOCKSIZE NGNAME ------------------------------------------------------------ IBMDEFAULTBP 1 - -2 4096 N 0 0 - 1 record(s) selected.
创建缓冲池
要为数据库服务器创建新的缓冲池,您需要两个参数,即“缓冲池名称”和“页面大小”。执行以下查询来创建新的缓冲池。
语法:[在下面的语法中,“bp_name”表示缓冲池名称,“size”表示需要为缓冲池声明的页面大小(4K、8K、16K、32K)]
db2 create bufferpool <bp_name> pagesize <size>
示例:[创建一个名为“bpnew”、大小为“8192”(8Kb) 的新缓冲池。]
db2 create bufferpool bpnew pagesize 8192
输出
DB20000I The SQL command completed successfully.
删除缓冲池
在删除缓冲池之前,需要检查是否有表空间分配给它。
语法:[删除缓冲池]
drop bufferpool <bp_name>
示例:[删除名为 bufferpool 的 'bpnew']
db2 drop bufferpool bpnew
输出
DB20000I The SQL command completed successfully.
DB2 表空间
本章详细描述表空间
介绍
表空间是一种存储结构,它包含表、索引、大对象和长数据。它可用于将数据库中的数据组织到与数据在系统上存储的位置相关的逻辑存储组中。该表空间存储在数据库分区组中
数据库中表空间的好处
表空间在数据库中以多种方式发挥作用,如下所示:
可恢复性:表空间使备份和恢复操作更加方便。使用单个命令,您可以备份或恢复表空间中的所有数据库对象。
自动存储管理:数据库管理器根据需要创建和扩展容器。
内存利用率:单个缓冲池可以管理多个表空间。您可以将临时表空间分配给它们自己的缓冲池,以提高排序或连接等活动的性能。
容器
表空间包含一个或多个容器。容器可以是目录名、设备名或文件名。在数据库中,单个表空间可以在同一物理存储设备上拥有多个容器。如果使用自动存储表空间选项创建表空间,则容器的创建和管理将由数据库管理器自动处理。如果不是使用自动存储表空间选项创建的,则需要自己定义和管理容器。
默认表空间
当您创建新数据库时,数据库管理器会为数据库创建一些默认表空间。这些表空间用作用户数据和临时数据的存储。每个数据库必须至少包含三个表空间,如下所示:
- 目录表空间
- 用户表空间
- 临时表空间
目录表空间:它包含数据库的系统目录表。它被命名为 SYSCATSPACE 并且不能被删除。
用户表空间:该表空间包含用户定义的表。在数据库中,我们有一个默认的用户表空间,名为 USERSPACE1。如果您在创建表时没有为表指定用户定义的表空间,那么数据库管理器将为您选择默认用户表空间。
临时表空间:临时表空间包含临时表数据。该表空间包含系统临时表空间或用户临时表空间。
系统临时表空间保存数据库管理器在执行排序或连接等操作时所需的临时数据。一个数据库必须至少有一个系统临时表空间,其名称为TEMPSPACE1。它是在创建数据库时创建的。用户临时表空间保存表中的临时数据。它是使用 DECLARE GLOBAL TEMPORARY TABLE 或 CREATE GLOBAL TEMPORARY TABLE 语句创建的。默认情况下,创建数据库时不会创建此临时表空间。
表空间和存储管理:
表空间可以通过不同的方式设置,具体取决于您想要如何使用它们。您可以设置操作系统来管理表空间分配,可以让数据库管理器分配空间,也可以选择为数据自动分配表空间。
可以使用以下三种类型的托管空间:
系统管理空间(SMS):操作系统的文件系统管理器分配和管理存储表的空间。存储空间按需分配。该模型由表示数据库对象的文件组成。在版本 10.1 中,已针对用户定义表空间弃用此表空间类型,但对于目录表空间和临时表空间,并未弃用该表空间类型。
数据库管理空间(DMS):数据库服务器控制存储空间。存储空间是根据您在创建 DMS 表空间时指定的容器定义在文件系统上预先分配的。从版本 10.1 修复包 1 开始,对于用户定义的表空间,它已被弃用,但对于系统表空间和临时表空间,它并未被弃用。
自动存储表空间:数据库服务器可以自动管理。数据库服务器根据数据库上的数据创建和扩展容器。通过自动存储管理,不需要提供容器定义。数据库服务器负责创建和扩展容器以利用分配给数据库的存储。如果将存储空间添加到存储组,则当现有容器达到其最大容量时,会自动创建新容器。如果想立即使用新增的存储,可以重新平衡表空间。
页、表和表空间大小:
临时 DMS 和自动存储表空间,您为数据库选择的页大小决定了表空间大小的最大限制。对于表SMS和临时自动存储表空间,页大小限制表本身的大小。页面大小可以是 4kb、8kb、16kb 或 32kb。
表空间类型 | 4K页面大小限制 | 8K页面大小限制 | 16K 页面大小限制 | 32K 页面大小限制 |
---|---|---|---|---|
DMS,非临时自动存储常规表空间 | 64G | 128G | 256G | 512G |
DMS、临时DMS和非临时自动存储表空间大 | 1892G | 16384G | 32768G | 65536G |
DB2 存储组
本章介绍数据库存储组。
介绍
一组存储数据库表或对象的存储路径,就是一个存储组。您可以将表空间分配给存储组。创建数据库时,所有表空间均采用默认存储组。数据库的默认存储组是“IBMSTOGROUP”。创建新数据库时,如果您在“CREATE DATABASE”命令末尾传递“AUTOMATIC STOGROUP NO”参数,则默认存储组处于活动状态。数据库没有任何默认存储组。
列出存储组
您可以列出数据库中的所有存储组。
语法:[查看当前数据库中可用存储组的列表]
db2 select * from syscat.stogroups
示例:[查看当前数据库中可用存储组的列表]
db2 select * from syscat.stogroups
创建存储组
以下是在数据库中创建存储组的语法:
语法:[创建一个新的斯托组。'stogropu_name'表示新存储组的名称,'path'表示存储数据(表)的位置]
db2 create stogroupon ‘path’
示例:[在路径“data1”文件夹上创建新的 stogroup“stg1”]
db2 create stogroup stg1 on ‘/data1’
输出:
DB20000I The SQL command completed succesfully
使用stogroup创建表空间
以下是如何使用 storegroup 创建表空间:
语法:[使用现有存储组创建新表空间]
db2 create tablespace <tablespace_name> using stogroup <stogroup_name>
示例:[使用现有存储组“stg1”创建名为“ts1”的新表空间]
db2 create tablespace ts1 using stogroup stg1
输出:
DB20000I The SQL command completed succesfully
更改存储组
您可以使用以下语法更改存储组的位置:
语法:[将存储组从旧位置移动到新位置]
db2 alter stogroupadd ‘location’, ‘location’
示例:[将名为“sg1”的存储组的位置路径从旧位置修改到新位置]
db2 alter stogroup sg1 add ‘/path/data3’, ‘/path/data4’
删除存储组的文件夹路径
在删除存储组的文件夹路径之前,您可以使用 alter 命令为存储组添加新位置。
语法:[从存储组位置删除旧路径]
db2 alter stogroupdrop ‘/path’
示例:[从“stg1”中删除存储组位置]
db2 alter stogroup stg1 drop ‘/path/data1’
重新平衡表空间
当我们为存储组或表空间创建新文件夹时,当在数据库上进行事务并且表空间已满时,需要重新平衡表空间。重新平衡使用新存储组更新数据库配置文件。
语法:[将表空间从旧存储组路径重新平衡到新存储组]
db2 alter tablspace <ts_name> rebalance
示例:[重新平衡]
db2 alter tablespace ts1 rebalance
重命名存储组
语法:[修改现有存储名称]
db2 rename stogroup <old_stg_name> to <new_stg_name>
示例:[将存储组的名称从“sg1”修改为新名称“sgroup1”]
db2 rename stogroup sg1 to sgroup1
删除存储组
步骤 1:在删除任何存储组之前,您可以为表空间分配一些不同的存储组。
语法:[为表空间分配另一个存储组。]
db2 alter tablspace <ts_name> using stogroup <another sto_group_name>
示例:[将表空间“ts1”从一个旧的 stogroup 更改为名为“sg2”的新 stogroup]
db2 alter tablespace ts1 using stogroup sg2
第2步:
语法:[删除现有的stogroup]
db2 drop stogorup <stogroup_name>
示例:[从数据库中删除 stogroup 'stg1']
db2 drop stogroup stg1
DB2 模式
本章介绍并描述了 Schema 的概念。
介绍
模式是数据库中按逻辑分类的命名对象的集合。
在数据库中,不能创建多个同名的数据库对象。为此,该模式提供了一个组环境。您可以在数据库中创建多个架构,并且可以使用不同的架构组创建具有相同名称的多个数据库对象。
模式可以包含表、函数、索引、表空间、过程、触发器等。例如,您为“员工”数据库创建两个不同的模式,分别命名为“专业”和“个人”。可以创建两个具有相同名称“Employee”的不同表。在这种环境中,一张表包含专业信息,另一张表包含员工的个人信息。尽管有两个同名的表,但它们有两个不同的模式“个人”和“专业”。因此,用户可以同时使用两者而不会遇到任何问题。当表的命名受到限制时,此功能非常有用。
让我们看一些与 Schema 相关的命令:
获取当前活动模式
句法:
db2 get schema
示例:[获取当前数据库架构]
db2 get schema
将另一个架构设置为当前环境
句法:
db2 set schema=<schema_name>
示例:[将“schema1”安排到当前实例环境]
db2 set schema=schema1
创建新架构
语法:[使用授权用户 ID 创建新架构]
db2 create schema <schema_name> authroization <inst_user>
示例:[创建由“db2inst2”授权的“schema1”模式]
db2 create schema schema1 authorization db2inst2
锻炼
让我们创建两个具有相同名称但两个不同架构的不同表。在这里,您创建具有两种不同模式的员工表,一种用于个人信息,另一种用于专业信息。
步骤 1:创建两个模式。
架构 1:[创建名为 professional 的架构]
db2 create schema professional authorization db2inst2
架构 2:[创建名为个人的架构]
db2 create schema personal authorization db2inst2
步骤 2:为员工详细信息创建两个同名表
表1:专业.员工
[使用模式名称“professional”在数据库中创建新表“employee”]
db2 create table professional.employee(id number, name varchar(20), profession varchar(20), join_date date, salary number);
表2:个人.雇员
[在同一数据库中创建新表“employee”,模式名称为“personal”]
db2 create table personal.employee(id number, name varchar(20), d_birth date, phone bigint, address varchar(200));
执行这些步骤后,您将获得两个具有相同名称“employee”的表,具有两个不同的架构。
DB2 数据类型
本章介绍 DB2 中使用的各种数据类型。
介绍
在 DB2 数据库表中,每一列都有自己的数据类型,具体取决于开发人员的要求。数据类型被称为表列中值的类型和范围。
内置数据类型
- 约会时间
- TIME:代表一天中的时间,以小时、分钟和秒为单位。
- TIMESTAMP:以年、月、日、时、分、秒、微秒的形式表示日期和时间的七个值。
- DATE:表示一天中的日期,分为年、月、日三部分。
- 细绳
- 特点
- CHAR(固定长度):固定长度的字符串。
- 不同长度
- VARCHAR:变长字符串。
- CLOB:大对象字符串,当字符串可能超出 VARCHAR 数据类型的限制时,可以使用它。
- 形象的
- 形象的
- 固定长度:包含双字节字符的固定长度图形字符串
- 不同长度
- VARGRAPHIC:包含双字节字符的变化字符图形字符串。
- DBCLOB:大对象类型
- 二进制
- BLOB(变长):大对象中的二进制字符串
- BOOLEAN:以 0 和 1 的形式。
- 有符号数字
- 精确的
- 二进制整数
- SMALLINT [16BIT]:使用它,您可以将小 int 值插入到列中
- INTEGER [32BIT]:使用它,您可以将大 int 值插入到列中
- BIGINT [64BIT]:使用它您可以将更大的 int 值插入到列中
- 十进制
- 十进制(压缩)
- DECFLOAT(十进制浮点数):使用它,可以插入十进制浮点数
- 近似
- 浮点数
- REAL(单精度):使用此数据类型,您可以插入单精度浮点数。
- DOUBLE(双精度):使用此数据类型,可以插入双精度浮点数。
- 可扩展标记语言
- XML:您可以将 XML 数据存储到此数据类型列中。
DB2 表
表是由数据库管理器维护的逻辑结构。在表中,每个垂直块称为列(元组),每个水平块称为行(实体)。以列和行形式存储的数据集合称为表。在表中,每一列都有不同的数据类型。表用于存储持久数据。
桌子类型
- 基表:它们保存持久数据。有不同类型的基表,包括:
- 常规表:通用表,带有索引的普通表是通用表。
- 多维集群表(MDC):这种类型的表在物理上聚集在多个键上,用于维护大型数据库环境。DB2 pureScale 不支持这些类型的表。
- 插入时间聚类表(ITC):与 MDC 表类似,行在插入表时进行聚类。它们可以是分区表。他们也不支持 pureScale 环境。
- 范围聚集表 表 (RCT):这些类型的表提供快速、直接的数据访问。它们被实现为顺序集群。表中的每条记录都有一个记录 ID。这些类型的表用于数据与表中的一列或多列紧密聚集的情况。DB2 pureScale 也不支持这种类型的表。
- 分区表:此类表用于数据组织架构,其中表数据被划分为多个存储对象。数据分区可以添加到分区表、附加到分区表以及从分区表分离。您可以在一个表空间中存储一张表的多个数据分区。
- 时态表:数据库中表的历史记录存储在时态表中,例如之前进行的修改的详细信息。
- 临时表:对于不同数据库操作的临时工作,需要使用临时表。临时表 (DGTT) 不会出现在系统目录中,XML 列不能在创建的临时表中使用。
- 物化查询表:MQT 可用于提高查询性能。这些类型的表由查询定义,该查询用于确定表中的数据。
创建表
以下语法创建表:
语法:[创建新表]
db2 create table <schema_name>.<table_name> (column_name column_type....) in <tablespace_name>
示例:我们创建一个表来存储“专业”模式中的“员工”详细信息。该表具有“id、name、jobrole、joindate、salary”字段,该表数据将存储在表空间“ts1”中。
db2 create table professional.employee(id int, name varchar(50),jobrole varchar(30),joindate date, salary double) in ts1
输出:
DB20000I The SQL command completed successfully.
列出表格详细信息
以下语法用于列出表详细信息:
语法:[查看使用模式创建的表的列表]
db2 select tabname, tabschema, tbspace from syscat.tables
示例:[查看当前数据库中的表列表]
db2 select tabname, tabschema, tbspace from syscat.tables
输出:
TABNAME TABSCHEMA TBSPACE ------------ ------------- -------- EMPLOYEE PROFESSIONAL TS1 1 record(s) selected.
列出表中的列
以下语法列出表中的列:
语法:[查看表的列和数据类型]
db2 describe table <table_name>
示例:[查看表“employee”的列和数据类型]
db2 describe table professional.employee
输出:
Data type Column Column name schema Data type name Length Scale Nulls ------ ----- --------- ----------------- --------- ----- ------ ID SYSIBM INTEGER 4 0 Yes NAME SYSIBM VARCHAR 50 0 Yes JOBROLE SYSIBM VARCHAR 30 0 Yes JOINDATE SYSIBM DATE 4 0 Yes SALARY SYSIBM DOUBLE 8 0 Yes 5 record(s) selected.
隐藏列
您可以隐藏表格的整列。如果您调用“select * from”查询,隐藏列不会在结果表中返回。当您将数据插入表中时,没有列列表的“INSERT”语句不需要任何隐式隐藏列的值。这些类型的列在具体化查询表中被高度引用。这些类型的列不支持创建临时表。
创建带有隐藏列的表
以下