日常数据备份的方式通常可分为增量备份、完全备份。通常采用增量备份和完全备份相结合的方式进行备份。 当出现意外时,使用最近的数据全备份恢复,再重复全备份每天的数据加载操作。最坏的情况是一次数据恢复和本周的加载更新操作。
增量备份分为 增量和DELTA的备份映像,他们的关键差别在于:对连续不断更改的对象进行持续备份时,他们的行为不同。每个连续增量映像都包含了前一个增量映像的完整内容以及自上一次声称完整备份后更改过的或新增的任何数据。DELTA的备份映像只包含自上次生成任何类型的映像后更改过的页。
同时备份包括在线备份和脱机备份,这里主要介绍在线备份。
此文档适用于Linux /Unix 下server_name DB2数据库的备份与恢复,前提是创建好server_name 数据库。
server_name数据库备份
在创建好server_name 数据库后,首先需要打开支持在线备份的数据库配置参数,需要以root 用户执行configure.sh脚本,它分别执行以下操作:
启用镜像日志到/home/db2inst1/archivelog目录下
启用用户出口
启用归档日志
启用增量备份功能
开启这些参数后,数据库处于backup pending状态,要求做数据库的离线全备份,请执行cold_complete.sh 脚本,它会执行一次离线全备份到/var/server_namebak/databak/week/complete目录下。
备份策略采用以下方式:
周在线全备份
/var/server_namebak/baksh/hot_complete_week.sh 这个脚本会在每周日凌晨0点30分执行在线全备份。备份文件存放在/var/server_namebak/databak/week/complete 目录下,备份文件保留27天。
月在线全备份
/var/server_namebak/baksh/hot_complete_month.sh 这个脚本会在每月27日凌晨0点30分执行在线全备份。备份文件存放在/var/server_namebak/databak/month/complete 目录下,备份文件保留一年。
周增量备份
/var/server_namebak/baksh/incremental_wed.sh 这个脚本会在每周三凌晨0点30分执行在线增量备份。备份文件保存在/var/server_namebak/databak/day/incremental 目录下,备份文件保留6天。
天增量DELTA备份
/var/server_namebak/baksh/incremental_delta_day.sh 这个脚本会在每周一、二、四、五、六 的凌晨0点30分执行在线增量delta 备份。备份文件保存在/var/server_namebak/databak/day/incremental 目录下,备份文件保存6天。
主要采用每周一个在线全备份,同时每周三有一个在线增量备份,和剩下每天的增量delta 备份以保证数据的正常、安全备份和故障恢复的方便进行。
注:
备份脚本里默认db2inst1 用户密码为123456,请根据实际情况进行修改。
crontab 执行任务存放在/etc/crontab文件中。
server_name 数据库恢复
假如数据库由于突发故障,导致数据库需要恢复,这里需要准备恢复的备份文件,
在/var/server_namebak/databak/week/complete找到最近一次的全备份,同时在
/var/server_namebak/databak/day/incremental里根据备份日期找出自全备份后的当周周三备份和所有的天增量delta 备份。
这里需要注意的是:如故障发生在周一至周二,需要找出上次最近的周日全备份和周一、周二的增量delta 备份进行恢复,如故障发生在周三至周日之间,则只需找出上次最近的周日全备份和周三的增量备份以及周四、周五等到故障点的最近delta 备份既可。
将故障发生时的镜像日志进行备份以待恢复时使用,如下:
cp –rf /home/db2inst1/archivelog /home/db2inst1/log
以db2inst1 用户执行
db2ckrst -d SERVER_NAME -t 20090129194515 -r database
其中-t 20090129194515 代表要恢复的备份文件的备份时间点,该命令返回建议的必须的恢复操作命令,如下执行过程返回:
restore db SERVER_NAME incremental taken at 20090129194247
restore db SERVER_NAME incremental taken at 20090129194050
restore db SERVER_NAME incremental taken at 20090129194247
根据时间找出所进行的备份时间文件以及位置。
 
 
可以使用最后一次增量备份执行自动恢复,如下:
db2 restore db SERVER_NAME incremental automatic from /u01/server_namebak/databak/day/incremental taken at 20090129194247
它会自动查找所需要的备份文件进行恢复。
 
也可以按照第一步提示的恢复步骤恢复,如下:
db2 restore db SERVER_NAME incremental from /u01/server_namebak/databak/day/incremental taken at 20090129194247
此代表从/u01/server_namebak/databak/day/incremental 目录下恢复SERVER_NAME数据库的增量备份,时间点为20090129194247
接着执行
db2 restore db SERVER_NAME incremental from /u01/server_namebak/databak/week/complete taken at 20090129194050
接着执行
db2 restore db SERVER_NAME incremental from /u01/server_namebak/databak/day/incremental taken at 20090129194247
 
当所有备份文件恢复完毕时,这时数据库处于rollforward-pending state的状态,需要做roll forward 操作
恢复到最后备份节点至故障发生时操作
db2 rollforward db SERVER_NAME to end of logs and complete overflow log path ("/home/db2inst1/log")
其中/home/db2inst1/log 为所备份的镜像日志目录。