【正文】
各位同仁,数据是企业的“原油”,备份体系就是输油管线。管线断了,原油再多也炼不出汽油。过去十年,我们团队用DB2支撑日均数十亿次检索,靠的正是一条“零中断、可回滚、秒级挂载”的备份管线。今天我把这套方法无保留分享,核心只有一句话:让备份对业务透明,让恢复成为常态演练。
一、建立“归档即生产”的认知
多数故障并非硬件猝死,而是逻辑错误悄悄渗透。如果归档日志不连续,哪怕你昨晚刚做完全备,也只能回到昨夜。因此,第一步永远是打开归档:
db2 update db cfg for prodDB using LOGARCHMETH1 'DISK:/db2arch' LOGARCHMETH2 'TSM'
两条通道同时写,磁盘做快速回滚,TSM做长期留存。归档一旦开启,就不要再关,任何“临时关闭省空间”的想法都是给未来的自己挖坑。
二、在线全备:业务不中断的基石
归档就绪后,立刻做一次在线全备:
db2 backup db prodDB online to /db2backup include logs
关键字online保证用户无感知;include logs把当前活跃日志一起打包,省得恢复时再四处找文件。对10 TB级库,我们实测搭配4个buffer、2并行会话可稳定跑满10 Gbps网络。
三、增量链:让时间粒度细到15分钟
全备耗时长,不能每天跑。用增量差分把时间窗口缩小:
(周日) db2 backup db prodDB online incremental use tsm
(周一~周六) db2 backup db prodDB online incremental delta use tsm
delta只捕获最近一次增量以来的变化,链短、恢复快。配合TSM策略,每小时自动回收超期镜像,空间利用率提升40%。
四、快照备份:秒级备份与挂载的终极武器
如果库跑在云主机上,直接借助云盘快照:
db2 set write suspend for database
gcloud compute disks snapshot db2-data-disk --snapshot-names=prodDB-$(date +%F-%H%M)
db2 set write resume for database
整个动作3秒内完成,生成的快照可在任意可用区30秒内挂载成新盘,再db2 restore重定向即可拉起一套读写分离的备库,用于报表或应急。
五、恢复演练:让工程师在和平时期就打过仗
备份是否有效,不看备份报告,看演练结果。我们坚持“321”原则:
六、常见误区小结
只备份数据文件,不备份日志——恢复时只能回到昨夜。
把备份脚本放到crontab就不管——作业失败告警被淹没,半年后才发现备份早已中断。
用网络盘做备份目的地,却不做端到端校验——一次静默写坏块,整月备份全部作废。
解决之道:日志+数据双备、失败告警直送手机、每次备份后db2ckbkp校验镜像完整性。
结语
数据安全没有银弹,只有工程。把备份当成功能需求写进CI/CD,把恢复脚本写成自动化测试,让每一次发布都像一次灾备演练。如此,方可在大流量时代睡得安稳。
【教程】手把手完成DB2备份与恢复(Linux单分区场景)
环境假设
数据库名:prodDB
实例用户:db2inst1
备份目录:/db2backup(本地SSD)
归档目录:/db2arch(NFS共享)
开归档
以实例用户登录:
db2 connect to prodDB
db2 get db cfg | grep LOGARCHMETH1 # 若为OFF则继续
db2 update db cfg using LOGARCHMETH1 'DISK:/db2arch' LOGARCHMETH2 'TSM'
db2stop force && db2start # 重启实例使归档生效
首次全备(脱机)
db2 force applications all
db2 deactivate db prodDB
db2 backup db prodDB to /db2backup
db2 activate db prodDB
日常在线全备
db2 backup db prodDB online to /db2backup include logs
可加入compress、parallelism等参数,例如:
db2 backup db prodDB online to /db2backup compress parallelism 4 include logs
增量差分
-- 每周日累积增量
db2 backup db prodDB online incremental to /db2backup
-- 周一至周六差异增量
db2 backup db prodDB online incremental delta to /db2backup
验证镜像
db2ckbkp /db2backup/PRODDB.*.IMG
输出末尾出现“Backup image is valid”即通过。
恢复演练(同机回滚)
模拟误删表
db2 drop table important_data
还原到最近备份
db2 restore db prodDB from /db2backup taken at 20250902030000
前滚日志到误删前一分钟
db2 rollforward db prodDB to 2025-09-02-03.05.00 using local time and stop
检查数据已恢复
快照演练(云盘环境)
暂停写IO
db2 set write suspend for database
创建快照(以GCP为例,可替换为AWS/Azure命令)
gcloud compute disks snapshot prodDB-data-disk --snapshot-names=quick-$(date +%s)
恢复写IO
db2 set write resume for database
30秒后,快照可在新实例挂载并执行:
db2 restore db prodDB from snapshot redirect
db2 rollforward ...
至此,你已拥有一套可落地、可演练、可度量的DB2备份体系。祝各位数据长青,业务长红。