DB2表空间扩容
第一阶段:在虚拟化平台添加硬盘
- 在您的VMware vSphere、Proxmox、Hyper-V等管理界面中,为虚拟机
db2server02添加一块新的SCSI硬盘(例如:100GB)。 - 确保硬盘控制器类型为SCSI(推荐使用LSI Logic SAS或PVSCSI)
第二阶段:在Linux操作系统中整合新硬盘
第1步:识别新硬盘
登录系统后,首先确认系统是否识别到了新硬盘。
sudo lsblk输出示例:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 98.5G 0 part
├─datavg-db2data_lv 253:0 0 88.5G 0 lvm /db2data
└─datavg-other_lv 253:1 0 10G 0 lvm /other
sdn 8:16 0 100G 0 disk # <--- 这就是新添加的硬盘!
sr0 11:0 1 1024M 0 rom在这个例子中,新硬盘被识别为 /dev/sdn。请记下您的设备名。
重要提醒: 如果 lsblk 没有立即显示新硬盘,可以尝试让系统重新扫描SCSI总线来识别新设备:
# 重新扫描SCSI主机总线(host# 请根据您的系统调整,通常是host0)
echo "- - -" | sudo tee /sys/class/scsi_host/host0/scan
# 如果不行,可以尝试扫描所有主机
for host in /sys/class/scsi_host/host*/scan; do echo "- - -" | sudo tee $host; done再次运行 sudo lsblk 确认新硬盘出现。
假设您新添加的硬盘在系统中识别为 /dev/sdn。
第1步:创建物理卷 (PV)
# 跳过 fdisk 分区,直接在整个磁盘上创建物理卷
sudo pvcreate /dev/sdn系统会提示你 Physical volume "/dev/sdn" successfully created.。这会将必要的 LVM 元数据直接写入磁盘的起始部分。
第2步:将新物理卷扩展到现有卷组 (VG)
# 假设您的卷组名是 datavg,不知道可以vgdisplay
sudo vgextend datavg /dev/sdn使用 sudo vgdisplay datavg 确认 “Free PE / Size” 已经增加。
第3步:扩展逻辑卷 (LV)
# 将卷组中的所有空闲空间都扩展到你的逻辑卷
sudo lvextend -l +100%FREE /dev/mapper/datavg-datalv(你也可以指定具体大小,如 -L +50G,但通常直接用完所有空间更方便)
第4步:扩展文件系统
# 扩展文件系统以使用新的空间(假设是XFS,挂载在 /db2data)
sudo xfs_growfs /db2data
# 如果是 ext4,命令如下:
sudo resize2fs /dev/mapper/datavg-datalvDB2 表空间扩容流程
第 1 步:确认当前状态(基线)
在进行任何操作前,先记录下表空间的初始状态。
# 1. 连接到数据库
db2 connect to dzzf
# 2. 查看表空间详情,重点关注ASSP的ID、总页数、可用页数
echo "=== 当前所有表空间状态 ==="
db2 list tablespaces show detail
# 如下
db2inst1@db2server02:~> db2 list tablespaces | grep ASSP
Name = ASSP
Name = ASSP_INDEX
Name = ASSP_CLOB
# 检查当前连接的数据库所有表的表空间使用率MB显示
db2 "SELECT SUBSTR(TBSP_NAME, 1, 20) AS NAME, TBSP_TYPE AS TYPE, TBSP_TOTAL_PAGES * TBSP_PAGE_SIZE / 1024 / 1024 AS TOTAL_MB, TBSP_USED_PAGES * TBSP_PAGE_SIZE / 1024 / 1024 AS USED_MB, TBSP_FREE_PAGES * TBSP_PAGE_SIZE / 1024 / 1024 AS FREE_MB, DECIMAL((TBSP_USED_PAGES * 100.0) / NULLIF(TBSP_TOTAL_PAGES, 0), 5, 2) AS USED_PCT FROM SYSIBMADM.TBSP_UTILIZATION ORDER BY USED_PCT DESC"
# 3. 查看ASSP表空间的容器列表,记住容器路径和大小
echo "=== ASSP表空间的容器详情 ==="
# 首先获取ASSP的表空间ID(例如:6)
db2 list tablespaces | grep ASSP
# 假设查到的ID是 2,则查看其容器
db2 list tablespace containers for 6记录关键信息:
- 表空间 ID (TSID): 例如
6 - 总页数 (Total Pages): 例如
12800(约50MB) - 容器路径:
/db2data/assp_container1 - 容器大小: 初始应为
50M
第 2 步:方法一扩展现有容器 (EXTEND)
我们将现有容器扩大 50MB。
# 1. 执行EXTEND命令,在原有50M基础上再增加50M
echo "=== 开始EXTEND扩容:为现有容器增加50M ==="
db2 "ALTER TABLESPACE ASSP_CLOB EXTEND (FILE '/db2data/assp_container1' 50M)"
# 2. 立即验证结果
echo "=== EXTEND操作完成,验证新大小 ==="
db2 list tablespace containers for 6
db2 list tablespaces show detail | grep -A 3 -B 3 ASSP_CLOB预期结果:
- 容器路径不变,但
total_pages和usable_pages应该大约翻倍(例如从 ~12800 变为 ~25600)。 - 操作几乎是瞬时的,因为不涉及数据移动。
第 3 步:方法二添加新容器 (ADD)
我们现在添加第二个大小为 50MB 的新容器。
# 1. 执行ADD命令,添加一个新容器
echo "=== 开始ADD扩容:添加一个新容器 ==="
db2 "ALTER TABLESPACE ASSP ADD (FILE '/db2data/assp_container2ASSP表空间的容器详情 (ID: 6)' 50M)"
# 2. 监控重新平衡(REBALANCE)进程
echo "=== 监控ADD触发的REBALANCE工具状态 ==="
db2 list utilities show detail
# 上述命令会显示一个状态为‘Executing’的REBALANCE utility。
# 可以多次运行此命令,直到其状态变为‘Completed’。
# 注意:Rebalance可能需要一些时间,即使数据量很小。
# 3. Rebalance完成后,验证最终结果
echo "=== REBALANCE完成,验证最终大小和容器列表 ==="
db2 list tablespace containers for 6
db2 list tablespaces show detail | grep -A 4 -B 4 ASSP预期结果:
list tablespace containers会显示两个容器:/db2data/assp_container1(100M) 和/db2data/assp_container2(50M)。list tablespaces显示的总页数应该是三个容器页数的总和(~25600 + ~12800 = ~38400)。- 表空间状态 (
tbsp_state) 在 rebalance 期间可能是0x0001000(Quiesced: SHARE),完成后会恢复正常状态0x0000000(Normal)。
第 4 步:最终验证和总结
进行最后一次全面检查,确认扩容完全成功。
# 最终状态检查
echo "========== 扩容最终验证 =========="
echo "1. 表空间总体状态:"
db2 list tablespaces show detail | grep -A 1 -B 1 ASSP
echo "2. 容器详细列表:"
db2 list tablespace containers for 6
db2 "SELECT SUBSTR(TBSP_NAME, 1, 20) AS NAME, TBSP_TYPE AS TYPE, TBSP_TOTAL_PAGES * TBSP_PAGE_SIZE / 1024 / 1024 AS TOTAL_MB, TBSP_USED_PAGES * TBSP_PAGE_SIZE / 1024 / 1024 AS USED_MB, TBSP_FREE_PAGES * TBSP_PAGE_SIZE / 1024 / 1024 AS FREE_MB, DECIMAL((TBSP_USED_PAGES * 100.0) / NULLIF(TBSP_TOTAL_PAGES, 0), 5, 2) AS USED_PCT FROM SYSIBMADM.TBSP_UTILIZATION ORDER BY USED_PCT DESC"
echo "3. 文件系统空间检查(确认/db2data仍有充足空间):"
df -h /db2data最终成果:
您已经成功将一个 50MB 的 ASSP 表空间通过两种方式扩容到了约 150MB。
- 纵向扩展 (EXTEND): 将第一个容器从 50M -> 100M。
- 横向扩展 (ADD): 新增一个 50M 的容器。