<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`"
相关推荐
王小小鸭3 分钟前
【开发小技巧11】用经典报表实现badge list效果,根据回显内容用颜色加以区分
oracle·oracle apex
大白要努力!4 分钟前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
tatasix1 小时前
MySQL UPDATE语句执行链路解析
数据库·mysql
南城花随雪。1 小时前
硬盘(HDD)与固态硬盘(SSD)详细解读
数据库
儿时可乖了1 小时前
使用 Java 操作 SQLite 数据库
java·数据库·sqlite
懒是一种态度1 小时前
Golang 调用 mongodb 的函数
数据库·mongodb·golang
天海华兮1 小时前
mysql 去重 补全 取出重复 变量 函数 和存储过程
数据库·mysql
gma9992 小时前
Etcd 框架
数据库·etcd
爱吃青椒不爱吃西红柿‍️2 小时前
华为ASP与CSP是什么?
服务器·前端·数据库
Yz98763 小时前
hive的存储格式
大数据·数据库·数据仓库·hive·hadoop·数据库开发