虚位以待(AD)
虚位以待(AD)
首页 > 数据库 > DB2数据库 > Windows Server下DB2自动备份、复原和前滚的脚本编程

Windows Server下DB2自动备份、复原和前滚的脚本编程
类别:DB2数据库   作者:码皇   来源:互联网   点击:

最近在参与负责某线上MySQL项目时,客户要求实现MySQL数据库备份、复原和前滚的全流程自动化。在RHEL下使用Perl语言编写脚本结合CRON指令来共同实现MySQL数据库备份、复原和前滚流程的自动化,整个过程很轻松顺利

最近在参与负责某线上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地址 数据备份目录 归档日志目录 实例 用途
DBS1 8.1.11.973 Windows Server 2003 R2(x64) 10.0.0.11 e:dbbackup NULL sample active
DBS2 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自动作业计划安排如下

wKiom1cLqPSxSydKAACGWw0ByH8882.png

DBS2自动作业计划安排如下

wKioL1cLqbXzs7T0AACIuf3FXZE970.png

四、实验步骤

(一)自动备份DB2数据库

DBS1

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

    ::关闭回显且不显示命令本身@ECHOOFF::定义窗口的标题TITLE本脚本用于实现DB2数据库的自动在线备份—

    徐前进编写于2016年4月1日::定义窗口的背景色和前景色COLOR0A::定义脚本说明ECHO::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ECHO::::ECHO::本脚本用于实现DB2数据库的自动在线备份::ECHO::::ECHO::—

    徐前进编写于2016年4月1日::ECHO::::ECHO::xuqianjin@aliyun.com::ECHO::::ECHO::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::建立数据库连接DB2CONNECTTOnetdb::在线备份数据库且包含归档日志DB2BACKUPDATABASEnetdbONLINETOe:dbbackupINCLUDELOGS::自动判断脚本的执行结果并友好反馈给用户IFERRORLEVEL1(::若上一条命令执行失败返回状态码1时,则显示此错误提醒。ECHO--------------------------分割线--------------------------ECHO-ECHO您好,我无法完成NETDB数据库的自动在线备份操作(含归档日志)ECHO下面,请您检查并分析导致此错误的原因,按任意键和我说告别。ECHO-ECHO--------------------------分割线--------------------------PAUSE&EXIT)ELSE(::若上一条命令执行成功返回状态码0时,则显示此正确提醒。ECHO--------------------------分割线--------------------------ECHO-ECHO您好,我已完成NETDB数据库的自动在线备份操作(含归档日志)ECHO下面,请您确认本地已存在备份文件后,按任意键和我说告别。ECHO另外,我也需要休息一会,以便明日继续执行此周期性任务。ECHO-ECHO--------------------------分割线--------------------------PAUSE&EXIT)

保存于“C:Program Files (x86)IBMSQLLIBBIN”目录下并命名为“autobackup.bat”文件。

注意:建议与db2cmd.exe位于同一目录,避免无法初始化命令环境而导致语句执行失败。

2. 添加作业计划,具体操作如下:

运行参数:"C:Program Files (x86)IBMSQLLIBBINdb2cmd.exe" autobackup.bat

日程安排:每天,凌晨1点00分

执行权限:administrator

3. DB2数据库自动备份脚本的执行效果演示

wKioL1cLqIvCTWGEAABYd3SFETI675.png

(二)自动拷贝DB2数据库备份

DBS1

1-1. 编写网络盘符映射脚本,具体内容如下:

    ::关闭回显且不显示命令本身@ECHOOFF::定义窗口的标题TITLE本脚本用于实现DB2数据库备份目录的自动映射—

    徐前进编写于2016年4月1日::定义窗口的背景色和前景色COLOR0A::定义脚本说明ECHO::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ECHO::::ECHO::本脚本用于实现DB2数据库备份目录的自动映射::ECHO::::ECHO::—

    徐前进编写于2016年4月1日::ECHO::::ECHO::xuqianjin@aliyun.com::ECHO::::ECHO::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::建立映射前先检查并删除目标盘符NETUSEz:/DELETE::将DBS2主机的E盘符映射至DBS1主机的Z盘符且保持持久连接NETUSEz:\DBS2e$xuqianjin/USER:administrator/PERSISTENT:YES::自动判断脚本的执行结果并友好反馈给用户IFERRORLEVEL1(::若上一条命令执行失败返回状态码1时,则显示此错误提醒。ECHO--------------------------分割线--------------------------ECHO-ECHO您好,我无法完成DB2数据库备份目录的自动映射。ECHO下面,请您检查并分析导致此错误的原因,按任意键和我说告别。ECHO-ECHO--------------------------分割线--------------------------PAUSE&EXIT)ELSE(::若上一条命令执行成功返回状态码0时,则显示此正确提醒。ECHO--------------------------分割线--------------------------ECHO-ECHO您好,我已完成DB2数据库备份目录的自动映射。ECHO下面,请您确认本地Z盘符映射已存在后,按任意键和我说告别。ECHO-ECHO--------------------------分割线--------------------------PAUSE&EXIT)

保存于“C:Documents and SettingsAll Users「开始」菜单程序启动”目录下并命名为“automount.bat”文件。1-2. 网络盘符映射脚本的执行效果演示

wKiom1cMP77QiBLyAABOKZDNwoo863.png

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

    ::关闭回显且不显示命令本身@ECHOOFF::定义窗口的标题TITLE本脚本用于实现DB2数据库备份文件的自动拷贝—

    徐前进编写于2016年4月1日::定义窗口的背景色和前景色COLOR0A::定义脚本说明ECHO::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ECHO::::ECHO::本脚本用于实现DB2数据库备份文件的自动拷贝::ECHO::::ECHO::—

    徐前进编写于2016年4月1日::ECHO::::ECHO::xuqianjin@aliyun.com::ECHO::::ECHO::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::打印当前日期ECHO%date%::定义年变量给xcopy引用setyyyy=%date:~0,4%::定义月变量给xcopy引用setmm=%date:~5,2%::定义日变量给xcopy引用setdd=%date:~8,2%::将修改日期为当日的目录递归复制且保持目录结构一致xcopye:dbbackupNETDB.0DB2NODE0000CATN0000*.*z:dbbackupNETDB.0DB2NODE0000CATN0000/s/i/v/f/y/d:%mm%-%dd%-%yyyy%::自动判断脚本执行结果并友好反馈给用户IFERRORLEVEL1(ECHO--------------------------分割线--------------------------ECHO-ECHO您好,我无法完成NETDB数据库备份文件的自动拷贝操作。ECHO下面,请您检查并分析导致此错误的原因,按任意键和我说告别。ECHO-ECHO--------------------------分割线--------------------------PAUSE&EXIT)ELSE(ECHO--------------------------分割线--------------------------ECHO-ECHO您好,我已完成NETDB数据库备份文件的自动拷贝操作。ECHO下面,请确认已存在数据库备份文件后,按任意键和我说告别。ECHO另外,我也需要休息一会,以便明日继续执行此周期性任务。ECHO-ECHO--------------------------分割线--------------------------PAUSE&EXIT)

保存于“C:Program Files (x86)IBMSQLLIBBIN”目录下并命名为“autocopy.bat”文件。

2-2. 添加作业计划,具体操作如下:

运行参数:C:Program Files (x86)IBMSQLLIBBINautobackup.bat

日程安排:每天,凌晨2点00分

执行权限:administrator

2-3. DB2数据库备份自动拷贝脚本的执行效果演示

wKioL1cLqMuSI0GGAABXL0nGbuU202.pngvcHkucG5n" />

(三)自动复原及前滚DB2数据库

DBS2

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

    ::关闭回显且不显示命令本身@ECHOOFF::定义窗口的标题TITLE本脚本用于实现DB2数据库的自动复原及前滚—

    徐前进编写于2016年4月1日::定义窗口的背景色和前景色COLOR0A::定义脚本说明ECHO::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ECHO::::ECHO::本脚本用于实现DB2数据库的自动复原及前滚::ECHO::::ECHO::—

    徐前进编写于2016年4月1日::ECHO::::ECHO::xuqianjin@aliyun.com::ECHO::::ECHO::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::先从数据库备份文件中提取归档日志到指定目录DB2RESTOREDATABASEnetdbLOGSFROMe:dbbackupLOGTARGETe:logbackup::再复原数据库并从指定目录读取归档日志来前滚事务DB2RECOVERDATABASEnetdbTOENDOFLOGSANDSTOPOVERFLOWLOGPATH(e:logbackup)::建立数据库连接来验证复原及前滚结果DB2CONNECTTOnetdb::自动判断脚本执行结果并友好反馈给用户IFERRORLEVEL1(ECHO--------------------------分割线--------------------------ECHO-ECHO您好,我无法完成NETDB数据库的自动复原及前滚操作。ECHO下面,请您检查并分析导致此错误的原因,按任意键和我说告别。ECHO-ECHO--------------------------分割线--------------------------PAUSE&EXIT)ELSE(ECHO--------------------------分割线--------------------------ECHO-ECHO您好,我已完成NETDB数据库的自动复原及前滚操作。ECHO下面,请您确认前滚状态为未暂挂后,按任意键和我说告别。ECHO另外,我也需要休息一会,以便明日继续执行此周期性任务。ECHO-ECHO--------------------------分割线--------------------------PAUSE&EXIT)

保存于“C:Program Files (x86)IBMSQLLIBBIN”目录下并命名为“autorecover.bat”文件。

注意:建议与db2cmd.exe位于同一目录,避免无法初始化命令环境而导致语句执行失败。

2. 添加作业计划,具体操作如下:

运行参数:C:Program Files (x86)IBMSQLLIBBINautorecover.bat

日程安排:每天,凌晨3点00分

执行权限:administrator

3. DB2数据库自动复原及前滚脚本的执行结果演示

wKioL1cLqPnTzcMxAABn1w2c_wM860.png

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

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

    ::关闭回显且不显示命令本身@ECHOOFF::定义窗口的标题TITLE本脚本用于实现DB2数据库备份历史文件的自动清理—

    徐前进编写于2016年4月1日::定义窗口的背景色和前景色COLOR0A::定义脚本说明ECHO::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ECHO::::ECHO::本脚本用于实现DB2数据库备份历史文件的自动清理::ECHO::::ECHO::—

    徐前进编写于2016年4月1日::ECHO::::ECHO::xuqianjin@aliyun.com::ECHO::::ECHO::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::共2步::第1步是清理DBS1主机的数据库备份目录::先递归删除DBS1主机中3天前的数据库备份文件FORFILES/Pe:dbbackupNETDB.0DB2NODE0000CATN0000/M*.*/S/C"cmd/cdel@file"/D-3::再递归删除DBS1主机中3天前的空目录dir/ad/b/se:dbbackupNETDB.0DB2NODE0000CATN0000|sort/r>e:dbbackupemptydirectorylist.txtFor/f"tokens=*"%%iin(e:dbbackupemptydirectorylist.txt)DOrd"%%i"dele:dbbackupemptydirectorylist.txt::第2步是清理DBS2主机的数据库备份目录::先递归删除DBS2主机中1天前的数据库备份文件FORFILES/Pz:dbbackupNETDB.0DB2NODE0000CATN0000/M*.*/S/C"cmd/cdel@file"/D-1::再递归删除DBS2主机1天前的空目录dir/ad/b/sz:dbbackupNETDB.0DB2NODE0000CATN0000|sort/r>z:dbbackupemptydirectorylist.txtFor/f"tokens=*"%%iin(z:dbbackupemptydirectorylist.txt)DOrd"%%i"delz:dbbackupemptydirectorylist.txt::自动判断脚本执行结果并友好反馈给用户IFERRORLEVEL1(ECHO--------------------------分割线--------------------------ECHO-ECHO您好,我无法完成NETDB数据库备份历史文件的自动清理操作。ECHO下面,请您检查并分析导致此错误的原因,按任意键和我说告别。ECHO-ECHO--------------------------分割线--------------------------PAUSE&EXIT)ELSE(ECHO--------------------------分割线--------------------------ECHO-ECHO您好,我已完成NETDB数据库备份历史文件的自动清理操作。ECHO下面,请您确认历史备份文件已清理后,按任意键和我说告别。ECHO另外,我也需要休息一会,以便明日继续执行此周期性任务。ECHO-ECHO--------------------------分割线--------------------------PAUSE&EXIT)

保存于“C:WINDOWSsystem32”目录下并命名为“autocleandb.bat”文件。

注意:建议与forfiles.exe位于同一目录,避免无法初始化命令环境而导致语句执行失败。

2. 添加作业计划,具体操作如下:

运行参数:"C:WINDOWSsystem32forfiles.exe" autocleandb.bat

日程安排:每天,凌晨0点00分

执行权限:administrator

3. DB2数据库备份目录自动清理脚本的执行结果演示

wKiom1cLqGXj0HeXAABP9jjSaxY558.png

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

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

    ::关闭回显且不显示命令本身@ECHOOFF::定义窗口的标题TITLE本脚本用于实现DB2数据库归档日志的自动清理—

    徐前进编写于2016年4月1日::定义窗口的背景色和前景色COLOR0A::定义脚本说明ECHO::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ECHO::::ECHO::本脚本用于实现DB2数据库归档日志的自动清理::ECHO::::ECHO::—

    徐前进编写于2016年4月1日::ECHO::::ECHO::xuqianjin@aliyun.com::ECHO::::ECHO::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::仅清理DBS2主机日志目录中1天前的归档日志FORFILES/Pz:logbackup/M*.log/S/C"cmd/cdel@file"/D0::自动判断脚本执行结果并友好反馈给用户IFERRORLEVEL1(ECHO--------------------------分割线--------------------------ECHO-ECHO您好,我无法完成NETDB数据库归档日志的自动清理操作。ECHO下面,请您检查并分析导致此错误的原因,按任意键和我说告别。ECHO-ECHO--------------------------分割线--------------------------PAUSE&EXIT)ELSE(ECHO--------------------------分割线--------------------------ECHO-ECHO您好,我已完成NETDB数据库归档日志的自动清理操作。ECHO下面,请您确认历史归档日志已清理后,按任意键和我说告别。ECHO另外,我也需要休息一会,以便明日继续执行此周期性任务。ECHO-ECHO--------------------------分割线--------------------------PAUSE&EXIT)

保存于“C:WINDOWSsystem32”目录下并命名为“autocleanlog.bat”文件。

注意:建议与forfiles.exe应用程序位于同一目录,避免无法初始化命令环境导致语句执行失败。

2. 添加自动调度任务计划,具体操作如下:

运行参数:"C:WINDOWSsystem32forfiles.exe" autocleanlog.bat

日程安排:每天,凌晨0点00分

执行权限:administrator

3. DB2数据库归档日志备份目录自动清理脚本的执行结果演示

wKioL1cLqTWwlJLbAABPYcaAtVk830.png

附录:关于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)

相关热词搜索: 脚本编程 备份