Chinaunix首页 | 论坛 | 博客

  • 博客访问: 5607
  • 博文数量: 1
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 22
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-13 09:32
个人简介

null

文章分类

全部博文(1)

文章存档

2016年(1)

我的朋友
最近访客

分类: DB2/Informix

2016-04-07 17:12:10

最近在参与负责某线上MySQL项目时,客户要求实现MySQL数据库备份、复原和前滚的全流程自动化

RHEL下使用Perl语言编写脚本结合CRON指令来共同实现MySQL数据库备份、复原和前滚流程的自动化,整个过程很轻松顺利且效果也比较满意。同时,由于所负责的另一个项目是线下DB2环境,那么在Windows Server下该如何实现DB2数据库备份、复原和前滚流程的自动化呢?

因为Windows的命令行功能远没有Linux强大,所以实现起来稍微曲折些,但是基本上还是可以实现的。经过简单的编写和调试通过后,现抽空将实现思路和实验代码整理分享如下,建议工作中有此需要的DBA可以参考下。

脚本编程是实现自动化运维的主要手段之一,优势在于高效率、低成本和自动化。特别是能够根据业务负载大小及生产繁忙与否,进行合理设计并安排运维作业窗口;同时,在规模化运维环境中可大大减少运维人力成本,降低人为误操作、忘操作或未按时操作所带来的未知风险。

一、实验目标
要求实现DB2数据库备份、复原和前滚等作业流程的自动化,保证安全准确,提高运维效率,降低人力成本。
1. 每日凌晨1点自动对DBS1主机的DB2数据库进行在线备份(含归档日志)。
2. 每日凌晨2点自动将DBS1主机的DB2数据库备份文件按时拷贝至DBS2主机的DB2数据库备份目录中
3. 每日凌晨3点自动对DBS2主机的DB2数据库进行复原和前滚
4. 每日凌晨0点自动对DBS1/DBS2主机的DB2数据库备份目录进行检查及清理(仅保留最近3日的),目的是为后续的DB2数据库备份操作保留足够的可用磁盘空间。
5. 每日凌晨0点自动对DBS2主机的DB2数据库归档日志备份目录进行检查及清理(仅保留当日的),目的是为后续的DB2归档日志提取操作保留足够的可用磁盘空间。
二、实验环境
主机名
DB2版本
OS版本
IP地址
DB2数据库备份目录
DB2归档日志备份目录
实例
用途
DBS1
DB2 8.1.11.973
Windows Server 2003 R2(x64)
10.0.0.11
e:\dbbackup
NULL
sample
active
DBS2
DB2 8.1.11.973
Windows Server 2003 R2(x64)
10.0.0.12
e:\dbbackup
e:\logbackup
sample
deactive

三、实验思路
首先,自动对DBS1主机的DB2数据库进行在线备份(含归档日志)。
其次,自动将DBS1主机的DB2数据库备份文件拷贝至DBS2主机的DB2数据库备份目录中
最后,自动对DBS2主机的DB2数据库进行复原及前滚
同时,自动对DBS1/DBS2主机的DB2数据库备份目录、归档日志备份目录进行定时清理以保证磁盘可用空间。
* 在线备份DB2数据库前,必须启用归档日志模式;
* 拷贝DB2数据库备份前,必须在DBS1主机上建立DBS2主机的网络盘符映射。

DBS1自动作业计划安排如下


DBS2自动作业计划安排如下


四、实验步骤
(一)自动备份DB2数据库
DBS1
1. 编写DB2数据库自动备份脚本,具体内容如下:

点击(此处)折叠或打开

  1. ::关闭回显且不显示命令本身
  2. @ECHO OFF
  3. ::定义窗口的标题
  4. TITLE 本脚本用于实现DB2数据库的自动在线备份——徐前进编写于2016年4月1日
  5. ::定义窗口的背景色和前景色
  6. COLOR 0A
  7. ::定义脚本说明
  8. ECHO ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  9. ECHO :: ::
  10. ECHO :: 本脚本用于实现DB2数据库的自动在线备份 ::
  11. ECHO :: ::
  12. ECHO :: ——徐前进编写于2016年4月1日 ::
  13. ECHO :: ::
  14. ECHO :: xuqianjin@aliyun.com ::
  15. ECHO :: ::
  16. ECHO ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  17. ::建立数据库连接
  18. DB2 CONNECT TO netdb
  19. ::在线备份数据库且包含归档日志
  20. DB2 BACKUP DATABASE netdb ONLINE TO e:\dbbackup INCLUDE LOGS
  21. ::自动判断脚本的执行结果并友好反馈给用户
  22. IF ERRORLEVEL 1 (
  23. ::若上一条命令执行失败返回状态码1时,则显示此错误提醒。
  24. ECHO -------------------------- 分割线 --------------------------
  25. ECHO -
  26. ECHO 您好,我无法完成NETDB数据库的自动在线备份操作(含归档日志)
  27. ECHO 下面,请您检查并分析导致此错误的原因,按任意键和我说告别。
  28. ECHO -
  29. ECHO -------------------------- 分割线 --------------------------
  30. PAUSE & EXIT
  31. ) ELSE (
  32. ::若上一条命令执行成功返回状态码0时,则显示此正确提醒。
  33. ECHO -------------------------- 分割线 --------------------------
  34. ECHO -
  35. ECHO 您好,我已完成NETDB数据库的自动在线备份操作(含归档日志)
  36. ECHO 下面,请您确认本地已存在备份文件后,按任意键和我说告别。
  37. ECHO 另外,我也需要休息一会,以便明日继续执行此周期性任务。
  38. ECHO -
  39. ECHO -------------------------- 分割线 --------------------------
  40. PAUSE & EXIT
  41. )
保存于“C:\Program Files (x86)\IBM\SQLLIB\BIN\”目录下并命名为“autobackup.bat”文件。
注意:建议与db2cmd.exe位于同一目录,避免无法初始化命令环境而导致语句执行失败。
2. 添加作业计划,具体操作如下:
运行参数:"C:\Program Files (x86)\IBM\SQLLIB\BIN\db2cmd.exe" autobackup.bat
日程安排:每天,凌晨1点00分
执行权限:administrator
3. DB2数据库自动备份脚本的执行效果演示


(二)自动拷贝DB2数据库备份
DBS1
1-1. 编写网络盘符映射脚本,具体内容如下:

点击(此处)折叠或打开

  1. ::关闭回显且不显示命令本身
  2. @ECHO OFF
  3. ::定义窗口的标题
  4. TITLE 本脚本用于实现DB2数据库备份目录的自动映射——徐前进编写于2016年4月1日
  5. ::定义窗口的背景色和前景色
  6. COLOR 0A
  7. ::定义脚本说明
  8. ECHO ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  9. ECHO :: ::
  10. ECHO :: 本脚本用于实现DB2数据库备份目录的自动映射 ::
  11. ECHO :: ::
  12. ECHO :: ——徐前进编写于2016年4月1日 ::
  13. ECHO :: ::
  14. ECHO :: xuqianjin@aliyun.com ::
  15. ECHO :: ::
  16. ECHO ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  17. ::建立映射前先检查并删除目标盘符
  18. NET USE z: /DELETE
  19. ::将DBS2主机的E盘符映射至DBS1主机的Z盘符且保持持久连接
  20. NET USE z: \\DBS2\e$ xuqianjin /USER:administrator /PERSISTENT:YES
  21. ::自动判断脚本的执行结果并友好反馈给用户
  22. IF ERRORLEVEL 1 (
  23. ::若上一条命令执行失败返回状态码1时,则显示此错误提醒。
  24. ECHO -------------------------- 分割线 --------------------------
  25. ECHO -
  26. ECHO 您好,我无法完成DB2数据库备份目录的自动映射。
  27. ECHO 下面,请您检查并分析导致此错误的原因,按任意键和我说告别。
  28. ECHO -
  29. ECHO -------------------------- 分割线 --------------------------
  30. PAUSE & EXIT
  31. ) ELSE (
  32. ::若上一条命令执行成功返回状态码0时,则显示此正确提醒。
  33. ECHO -------------------------- 分割线 --------------------------
  34. ECHO -
  35. ECHO 您好,我已完成DB2数据库备份目录的自动映射。
  36. ECHO 下面,请您确认本地Z盘符映射已存在后,按任意键和我说告别。
  37. ECHO -
  38. ECHO -------------------------- 分割线 --------------------------
  39. PAUSE & EXIT
  40. )
保存于“C:\Documents and Settings\All Users\「开始」菜单\程序\启动”目录下并命名为“automount.bat”文件。
1-2. 网络盘符映射脚本的执行效果演示

2-1. 编写DB2数据库备份自动拷贝脚本,具体内容如下:

点击(此处)折叠或打开

  1. ::关闭回显且不显示命令本身
  2. @ECHO OFF
  3. ::定义窗口的标题
  4. TITLE 本脚本用于实现DB2数据库备份文件的自动拷贝——徐前进编写于2016年4月1日
  5. ::定义窗口的背景色和前景色
  6. COLOR 0A
  7. ::定义脚本说明
  8. ECHO ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  9. ECHO :: ::
  10. ECHO :: 本脚本用于实现DB2数据库备份文件的自动拷贝 ::
  11. ECHO :: ::
  12. ECHO :: ——徐前进编写于2016年4月1日 ::
  13. ECHO :: ::
  14. ECHO :: xuqianjin@aliyun.com ::
  15. ECHO :: ::
  16. ECHO ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  17. ::打印当前日期
  18. ECHO %date%
  19. ::定义年变量给xcopy引用
  20. set yyyy=%date:~0,4%
  21. ::定义月变量给xcopy引用
  22. set mm=%date:~5,2%
  23. ::定义日变量给xcopy引用
  24. set dd=%date:~8,2%
  25. ::将修改日期为当日的目录递归复制且保持目录结构一致
  26. xcopy e:\dbbackup\NETDB.0\DB2\NODE0000\CATN0000\*.* z:\dbbackup\NETDB.0\DB2\NODE0000\CATN0000 /s /i /v /f /y /d:%mm%-%dd%-%yyyy%
  27. ::自动判断脚本执行结果并友好反馈给用户
  28. IF ERRORLEVEL 1 (
  29. ECHO -------------------------- 分割线 --------------------------
  30. ECHO -
  31. ECHO 您好,我无法完成NETDB数据库备份文件的自动拷贝操作。
  32. ECHO 下面,请您检查并分析导致此错误的原因,按任意键和我说告别。
  33. ECHO -
  34. ECHO -------------------------- 分割线 --------------------------
  35. PAUSE & EXIT
  36. ) ELSE (
  37. ECHO -------------------------- 分割线 --------------------------
  38. ECHO -
  39. ECHO 您好,我已完成NETDB数据库备份文件的自动拷贝操作。
  40. ECHO 下面,请确认已存在数据库备份文件后,按任意键和我说告别。
  41. ECHO 另外,我也需要休息一会,以便明日继续执行此周期性任务。
  42. ECHO -
  43. ECHO -------------------------- 分割线 --------------------------
  44. PAUSE & EXIT
  45. )
保存于“C:\Program Files (x86)\IBM\SQLLIB\BIN\”目录下并命名为“autocopy.bat”文件。
2-2. 添加作业计划,具体操作如下:
运行参数:C:\Program Files (x86)\IBM\SQLLIB\BIN\autobackup.bat
日程安排:每天,凌晨2点00分
执行权限:administrator
2-3. DB2数据库备份自动拷贝脚本的执行效果演示


(三)自动复原及前滚DB2数据库
DBS2
1. 编写DB2数据库自动复原及前滚脚本,具体内容如下:

点击(此处)折叠或打开

  1. ::关闭回显且不显示命令本身
  2. @ECHO OFF
  3. ::定义窗口的标题
  4. TITLE 本脚本用于实现DB2数据库的自动复原及前滚——徐前进编写于2016年4月1日
  5. ::定义窗口的背景色和前景色
  6. COLOR 0A
  7. ::定义脚本说明
  8. ECHO ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  9. ECHO :: ::
  10. ECHO :: 本脚本用于实现DB2数据库的自动复原及前滚 ::
  11. ECHO :: ::
  12. ECHO :: ——徐前进编写于2016年4月1日 ::
  13. ECHO :: ::
  14. ECHO :: xuqianjin@aliyun.com ::
  15. ECHO :: ::
  16. ECHO ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  17. ::先从数据库备份文件中提取归档日志到指定目录
  18. DB2 RESTORE DATABASE netdb LOGS FROM e:\dbbackup LOGTARGET e:\logbackup
  19. ::再复原数据库并从指定目录读取归档日志来前滚事务
  20. DB2 RECOVER DATABASE netdb TO END OF LOGS AND STOP OVERFLOW LOG PATH(e:\logbackup)
  21. ::建立数据库连接来验证复原及前滚结果
  22. DB2 CONNECT TO netdb
  23. ::自动判断脚本执行结果并友好反馈给用户
  24. IF ERRORLEVEL 1 (
  25. ECHO -------------------------- 分割线 --------------------------
  26. ECHO -
  27. ECHO 您好,我无法完成NETDB数据库的自动复原及前滚操作。
  28. ECHO 下面,请您检查并分析导致此错误的原因,按任意键和我说告别。
  29. ECHO -
  30. ECHO -------------------------- 分割线 --------------------------
  31. PAUSE & EXIT
  32. ) ELSE (
  33. ECHO -------------------------- 分割线 --------------------------
  34. ECHO -
  35. ECHO 您好,我已完成NETDB数据库的自动复原及前滚操作。
  36. ECHO 下面,请您确认前滚状态为未暂挂后,按任意键和我说告别。
  37. ECHO 另外,我也需要休息一会,以便明日继续执行此周期性任务。
  38. ECHO -
  39. ECHO -------------------------- 分割线 --------------------------
  40. PAUSE & EXIT
  41. )
保存于“C:\Program Files (x86)\IBM\SQLLIB\BIN\”目录下并命名为“autorecover.bat”文件。
注意:建议与db2cmd.exe位于同一目录,避免无法初始化命令环境而导致语句执行失败。
2. 添加作业计划,具体操作如下:
运行参数:C:\Program Files (x86)\IBM\SQLLIB\BIN\autorecover.bat
日程安排:每天,凌晨3点00分
执行权限:administrator
3. DB2数据库自动复原及前滚脚本的执行结果演示


(四)自动清理DB2数据库备份目录

1. 编写DB2数据库备份目录自动清理脚本,具体内容如下:

点击(此处)折叠或打开

  1. ::关闭回显且不显示命令本身
  2. @ECHO OFF
  3. ::定义窗口的标题
  4. TITLE 本脚本用于实现DB2数据库备份历史文件的自动清理——徐前进编写于2016年4月1日
  5. ::定义窗口的背景色和前景色
  6. COLOR 0A
  7. ::定义脚本说明
  8. ECHO ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  9. ECHO :: ::
  10. ECHO :: 本脚本用于实现DB2数据库备份历史文件的自动清理 ::
  11. ECHO :: ::
  12. ECHO :: ——徐前进编写于2016年4月1日 ::
  13. ECHO :: ::
  14. ECHO :: xuqianjin@aliyun.com ::
  15. ECHO :: ::
  16. ECHO ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  17. ::共2步
  18. ::第1步是清理DBS1主机的数据库备份目录
  19. ::先递归删除DBS1主机中3天前的数据库备份文件
  20. FORFILES /P e:\dbbackup\NETDB.0\DB2\NODE0000\CATN0000 /M *.* /S /C "cmd /c del @file" /D -3
  21. ::再递归删除DBS1主机中3天前的空目录
  22. dir /ad /b /s e:\dbbackup\NETDB.0\DB2\NODE0000\CATN0000 | sort /r > e:\dbbackup\emptydirectorylist.txt
  23. For /f "tokens=*" %%i in (e:\dbbackup\emptydirectorylist.txt) DO rd "%%i"
  24. del e:\dbbackup\emptydirectorylist.txt
  25. ::第2步是清理DBS2主机的数据库备份目录
  26. ::先递归删除DBS2主机中1天前的数据库备份文件
  27. FORFILES /P z:\dbbackup\NETDB.0\DB2\NODE0000\CATN0000 /M *.* /S /C "cmd /c del @file" /D -1
  28. ::再递归删除DBS2主机1天前的空目录
  29. dir /ad /b /s z:\dbbackup\NETDB.0\DB2\NODE0000\CATN0000 | sort /r > z:\dbbackup\emptydirectorylist.txt
  30. For /f "tokens=*" %%i in (z:\dbbackup\emptydirectorylist.txt) DO rd "%%i"
  31. del z:\dbbackup\emptydirectorylist.txt
  32. ::自动判断脚本执行结果并友好反馈给用户
  33. IF ERRORLEVEL 1 (
  34. ECHO -------------------------- 分割线 --------------------------
  35. ECHO -
  36. ECHO 您好,我无法完成NETDB数据库备份历史文件的自动清理操作。
  37. ECHO 下面,请您检查并分析导致此错误的原因,按任意键和我说告别。
  38. ECHO -
  39. ECHO -------------------------- 分割线 --------------------------
  40. PAUSE & EXIT
  41. ) ELSE (
  42. ECHO -------------------------- 分割线 --------------------------
  43. ECHO -
  44. ECHO 您好,我已完成NETDB数据库备份历史文件的自动清理操作。
  45. ECHO 下面,请您确认历史备份文件已清理后,按任意键和我说告别。
  46. ECHO 另外,我也需要休息一会,以便明日继续执行此周期性任务。
  47. ECHO -
  48. ECHO -------------------------- 分割线 --------------------------
  49. PAUSE & EXIT
  50. )
保存于“C:\WINDOWS\system32\”目录下并命名为“autocleandb.bat”文件。
注意:建议与forfiles.exe位于同一目录,避免无法初始化命令环境而导致语句执行失败。
2. 添加作业计划,具体操作如下:
运行参数:"C:\WINDOWS\system32\forfiles.exe" autocleandb.bat
日程安排:每天,凌晨0点00分
执行权限:administrator
3. DB2数据库备份目录自动清理脚本的执行结果演示


(五)自动清理DB2数据库归档日志备份目录

1. 编写DB2数据库归档日志备份目录自动清理脚本,具体内容如下:

点击(此处)折叠或打开

  1. ::关闭回显且不显示命令本身
  2. @ECHO OFF
  3. ::定义窗口的标题
  4. TITLE 本脚本用于实现DB2数据库归档日志的自动清理——徐前进编写于2016年4月1日
  5. ::定义窗口的背景色和前景色
  6. COLOR 0A
  7. ::定义脚本说明
  8. ECHO ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  9. ECHO :: ::
  10. ECHO :: 本脚本用于实现DB2数据库归档日志的自动清理 ::
  11. ECHO :: ::
  12. ECHO :: ——徐前进编写于2016年4月1日 ::
  13. ECHO :: ::
  14. ECHO :: xuqianjin@aliyun.com ::
  15. ECHO :: ::
  16. ECHO ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  17. ::仅清理DBS2主机日志目录中1天前的归档日志
  18. FORFILES /P z:\logbackup /M *.log /S /C "cmd /c del @file" /D 0
  19. ::自动判断脚本执行结果并友好反馈给用户
  20. IF ERRORLEVEL 1 (
  21. ECHO -------------------------- 分割线 --------------------------
  22. ECHO -
  23. ECHO 您好,我无法完成NETDB数据库归档日志的自动清理操作。
  24. ECHO 下面,请您检查并分析导致此错误的原因,按任意键和我说告别。
  25. ECHO -
  26. ECHO -------------------------- 分割线 --------------------------
  27. PAUSE & EXIT
  28. ) ELSE (
  29. ECHO -------------------------- 分割线 --------------------------
  30. ECHO -
  31. ECHO 您好,我已完成NETDB数据库归档日志的自动清理操作。
  32. ECHO 下面,请您确认历史归档日志已清理后,按任意键和我说告别。
  33. ECHO 另外,我也需要休息一会,以便明日继续执行此周期性任务。
  34. ECHO -
  35. ECHO -------------------------- 分割线 --------------------------
  36. PAUSE & EXIT
  37. )
保存于“C:\WINDOWS\system32\”目录下并命名为“autocleanlog.bat”文件。
注意:建议与forfiles.exe应用程序位于同一目录,避免无法初始化命令环境导致语句执行失败。
2. 添加自动调度任务计划,具体操作如下:
运行参数:"C:\WINDOWS\system32\forfiles.exe" autocleanlog.bat
日程安排:每天,凌晨0点00分
执行权限:administrator
3. DB2数据库归档日志备份目录自动清理脚本的执行结果演示


附录:关于RESTORE/ROLLFORWARD/RECOVER区别
RESTORE命令用于实现DB2数据库的复原操作。
ROLLFORWARD命令用于实现DB2数据库的前滚操作。
RECOVER命令用于实现DB2数据库的复原和前滚操作。
在DB2 v8.2前,执行DB2数据库复原及前滚共需2步(RESTORE+ROLLFORWARD),具体如下:
DB2 RESTORE DATABASE sample FROM e:\dbbackup LOGTARGET e:\logbackup     // 复原DB2数据库并提取DB2归档日志
DB2 RESTORE DATABASE sample LOGS FROM e:\dbbackup LOGTARGET e:\logbackup  // 仅提取DB2归档日志
DB2 ROLLFORWARD DATABASE sample TO END OF LOGS AND STOP OVERFLOW LOG PATH(e:\logbackup)
在DB2 v8.2后,执行DB2数据库复原及前滚仅需1步(RECOVER=RESTORE+ROLLFORWARD),具体如下:
DB2 RECOVER DATABASE sample TO END OF LOGS AND STOP OVERFLOW LOG PATH(e:\logbackup)

                                                                                                           ————徐前进(撰写于2016/04/05)

原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处http://blog.chinaunix.net/uid-14418988-id-5696127.html、作者信息和本声明。否则,将追究法律责任。
阅读(1303) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~