<DB2>《AIX环境下DB2冷备机恢复方案(生产实践)》

《AIX环境下DB2冷备机恢复方案(生产实践)》

  • [1 DB2数据库常见备份方式简要说明](#1 DB2数据库常见备份方式简要说明)
  • [2 方案说明](#2 方案说明)
  • [3 实际方案(信息已脱敏)](#3 实际方案(信息已脱敏))
    • [3.1 基本信息](#3.1 基本信息)
    • [3.2 创建互信](#3.2 创建互信)
    • [3.3 部署scp脚本](#3.3 部署scp脚本)
    • [3.4 在冷备机192.168.16.165上部署恢复脚本](#3.4 在冷备机192.168.16.165上部署恢复脚本)
    • [3.5 在冷备机192.168.16.165上部署清理脚本](#3.5 在冷备机192.168.16.165上部署清理脚本)

1 DB2数据库常见备份方式简要说明

生产环境中,对于生产环境DB2数据库的安全备份主要有以下方法,我将以从小到大的方式进行叙述:

序号 标题 表现方式
1 备份数据库表 一般有以下方式: 方式1:在生产环境数据库创建备份表,并将数据完整插入备份表。但无法实现实时备份。 方式2:利用SQL复制技术,建立复制表,进行实时复制。 方式3:利用Q复制技术,可实现跨服务器的实时复制。 方式4:利用表的导出导入,备份和恢复表。
2 备份表空间 一般将表空间进行备份然后恢复。
3 备份数据库 一般有以下方式: 方法1:离线备份数据库。这样的备份比较完整。可用于离线恢复。 方法2:在线全备数据库。这样的备份也比较完整。但有时恢复时需要读取日志文件。 方法3:在线增备数据库,又分为拆分备份和差异备份。都需要在在线全备基础上进行恢复。
4 备份数据库所在的小型机 数据库在小型机上,使用AIX系统时,可以通过操作系统HACMP技术,将数据库所在的小机进行备份,达到一台故障另一台接管的数据库卷组的目的。这种方式一般数据较为完整,但是过程中会出现数据库重启,极端情况会导致数据库实例损坏。
5 备份数据库卷组 一般通过存储技术将数据库所在的卷组进行复制,这样出现断电等极端情况下,在另一台数据库实例上恢复数据库。一般在日常,就已经准备了另一套完整的数据库环境,一侧卷组损坏数据库无法恢复,则可以直接启动另一侧。缺点是,一般无法实时同步,两端数据差在4小时左右。
6 备份数据库环境 数据库在linux虚拟机上时,可以克隆虚拟机。这样对操作系统、数据库软件、数据库实例、数据库都做了完整备份。
7 备份机房环境 在同城或异地建设容灾机房,配置网络,复刻生产环境的数据库和应用,日常可利用存储和操作系统技术进行数据库数据备份,紧急情况可通过切换网络,实现紧急恢复。缺点是,数据一般有延迟,部分新数据存在丢失风险。

2 方案说明

本方案实际解决的是数据库HA无法保障数据库正常应对灾难情况下,使用冷备的数据库进行恢复。

冷备的数据库一般具备以下特征:

1、一般会配置生产相同的数据库版本、数据库用户、权限、服务器用户密码。

2、设置数据库参数、操作系统参数与生产环境基本一致。

3、数据库家目录、数据库日志、表空间等操作系统目录和文件的路径与生产一致。

4、网络安全策略与生产环境一致。

5、通过更改网卡为生产环境网卡进行启动。

3 实际方案(信息已脱敏)

3.1 基本信息

类别 源数据库服务器 冷备机服务器
IP地址 192.168.16.161 192.168.16.165
实例用户 db2test1 db2test1
数据库1 usme usme
数据库1活动日志 /datanet/usme/db2test1/db2test1/NODE0000/SQL00001/LOGSTREAM0000/

3.2 创建互信

由于使用scp方式传输数据,建立源服务器到冷备机服务器的互信。

步骤 内容
1 db2test1用户,登录165,在/etc/hosts文件中,添加192.168.16.161 prvip_WZFWZ01
2 db2test1用户,登录161,在/etc/hosts文件总,添加192.168.16.165 zwfw
3 db2test1用户,在161生成秘钥,执行ssh-keygen -t rsa,在~/.ssh目录下生成id_rsa id_rsa.pub两个文件。 将id_rsa.pub重命名id_rsa.pub@161,传输到165上,scp id_rsa.pub@161 db2test1@192.168.16.165:/datanet/backupsafe。
4 db2test1用户,登录165,复制id_rsa.pub为id_rsa.pub@165,传输到161上,scp id_rsa.pub@165 db2test1@192.168.16.161:/home/db2test1。
5 将公钥追加到authorized_keys文件。 db2test1用户,登录161,cd /home/db2test1/.ssh,cat id_rsa.pub@161 >> authorized_keys db2test1用户,登录165,cd /home/db2test1/.ssh,cat id_rsa.pub@165 >> authorized_keys

3.3 部署scp脚本

在源服务器部署scp脚本,将备份文件和日志文件传输到冷备机服务器。

sql 复制代码
//crontab 如下
#0 3 * * * sh /home/db2test1/scpdbbkup.sh  >> /home/db2test1/scpdbbkup.log
// 脚本内容如下:
#!/bin/bash
echo "Startbackup:`date +"%Y%m%d_%H%M"`"
scp -r /databak/datanet/backup/backup01/usme*001 db2test1@192.168.16.165:/datanet/backupsafe/usme
scp -r /databak/datanet/backup/backup01/seame*001 db2test1@192.168.16.165:/datanet/backupsafe/seame
uslog=`ls -rtl /datanet/usme/db2test1/db2test1/NODE0000/SQL00001/LOGSTREAM0000/ | tail -8 | awk '{print $9}'`
for i in $uslog
do
        scp /datanet/usme/db2test1/db2test1/NODE0000/SQL00001/LOGSTREAM0000/$i db2test1@192.168.16.165:/datanet/backupsafe/usme/log/NODE0000/LOGSTREAM0000
done
sealog=`ls -rtl /datanet/seame/db2test1/db2test1/NODE0000/SQL00001/LOGSTREAM0000/ | tail -8 | awk '{print $9}'`
for k in $sealog
do
        scp /datanet/seame/db2test1/db2test1/NODE0000/SQL00001/LOGSTREAM0000/$k db2test1@192.168.16.165:/datanet/backupsafe/seame/log/NODE0000/LOGSTREAM0000
done
echo "Endbackup:`date +"%Y%m%d_%H%M"`" 

3.4 在冷备机192.168.16.165上部署恢复脚本

sql 复制代码
//crontab 如下
#0 4 * * *  sh /datanet/backupsafe/safeusbak.sh >> /datanet/backupsafe/safebackup.log 2>1&
// 脚本内容如下:
#!/bin/bash
. /etc/profile
if [ -f /home/db2test1/sqllib/db2profile ]; then
    . /home/db2test1/sqllib/db2profile
fi
echo '\n\n\n\n'
echo "Start of usme restore:`date +"%Y%m%d_%H%M"`"
db2 restore database usme from /datanet/backupsafe/usme logtarget /datanet/backupsafe/usme/logs without prompting 
echo "End of usme restore:`date +"%Y%m%d_%H%M"`"
## move file from the directory log to logs
uslogfile="/datanet/backupsafe/usme/log/NODE0000/LOGSTREAM0000"
for i in `ls -l /datanet/backupsafe/usme/log/NODE0000/LOGSTREAM0000 | awk '{print $9}'| grep -v "^$"`
do
cd $uslogfile 
if [ ! -e /datanet/backupsafe/usme/logs/NODE0000/LOGSTREAM0000/$i ];then
mv /datanet/backupsafe/usme/log/NODE0000/LOGSTREAM0000/$i /datanet/backupsafe/usme/logs/NODE0000/LOGSTREAM0000
fi
done
db2 "rollforward database usme to end of logs and stop overflow log path(/datanet/backupsafe/usme/logs/NODE0000/LOGSTREAM0000)"
echo "End of usme rollforward:`date +"%Y%m%d_%H%M"`" 

3.5 在冷备机192.168.16.165上部署清理脚本

清理备份文件,否则不断传输备份文件,将使得磁盘空间浪费。

sql 复制代码
//crontab 如下
#0 7 * * *  sh /datanet/backupsafe/safeclear.sh >> /datanet/backupsafe/safebackup.log 2>1&
// 脚本内容如下:
#!/bin/bash
. /etc/profile
echo "ClearStart time :`date`"
cd /datanet/backupsafe/usme
rm -rf usme.0*001
cd /datanet/backupsafe/usme/log/NODE0000/LOGSTREAM0000
rm -rf S0*.LOG
cd /datanet/backupsafe/usme/logs
rm -rf NODE0000
cd /datanet/backupsafe/seame
rm -rf seame.0*001
cd /datanet/backupsafe/seame/log/NODE0000/LOGSTREAM0000
rm -rf S0*.LOG
cd /datanet/backupsafe/seame/logs
rm -rf NODE0000
echo "ClearEnd time :`date`"
相关推荐
奶糖趣多多10 分钟前
Redis知识点
数据库·redis·缓存
CoderIsArt1 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
师太,答应老衲吧3 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Channing Lewis4 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
毕业设计制作和分享6 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
ketil276 小时前
Redis - String 字符串
数据库·redis·缓存
Hsu_kk7 小时前
MySQL 批量删除海量数据的几种方法
数据库·mysql
编程学无止境7 小时前
第02章 MySQL环境搭建
数据库·mysql
knight-n7 小时前
MYSQL库的操作
数据库·mysql
包饭厅咸鱼8 小时前
QML----复制指定下标的ListModel数据
开发语言·数据库