利用SHELL脚本实现对ORACLE数据库的备份管理

2017-11-16 11:35朱颖琪
中国科技纵横 2017年20期

朱颖琪

摘 要:在业务系统中,Oracle数据库作为一种大型关系型数据库是世界上使用最为广泛的数据库管理工具。它具有巨大人机功能——SHELL设计语言,作它能够交互式解析和执行用户输入的命令或者自动地解析和执行预先设定好的命令符。本文通过对SHELL脚本与Oracle数据库相结合实现一种自动安全备份与管理数据库数据的高效管理方法。

关键词:SHELL脚本;Oracle数据库;备份管理

中图分类号:TP311.131 文献标识码:A 文章编号:1671-2064(2017)20-0016-02

1 引言

Oracle数据库的备份管理一直是数据库管理中的重要维护点,因此怎样对数据备份实施有效的维护管理成为重要问题。针对这一问题在Linux操作系统下引入SHELL脚本,便能简洁有效的做到对数据库的备份管理。

2 脚本实现

通过在Linux平台的Redhat 6.8操作系统上搭建Oracle 11.2.0.4数据库,使用SHELL脚本实现数据备份管理的几个重要功能点[1]。

2.1 定时自动发起全库备份脚本

通过Linux的crontab定时计划任务中添加自动发起时间和脚本可做到自动在后台发起全库备份任务。

目标:备份脚本每天0点自动执行;数据库全备份;备份保留14天,过期自动删除;保留操作日志备查。

脚本dbback.sh如下:

run{ allocate channel c1 device type disk;

crosscheck backup;

sql 'alter system archive log current';

backup database format '/opt/Oracle/backup/dbback/db_%d_%T_%U';

backup current controlfile format '/opt/Oracle/backup/controlfileback/cntrl_%s_%p_%s';

crosscheck archivelog all;

delete noprompt expired backup;

delete noprompt obsolete;

delete noprompt backup of database completed before 'sysdate - 14';

release channel c1; }

Oracle管理员身份执行crontab -e

0 0 * * 0 /opt/Oracle/backup/script/dbback.sh 2>&1 >/dev/null

设定为零点自动发起dbback.sh脚本,开始自动全库备份。

2.2 定时自动发起数据库归档备份并自动删除过期归档

Oracle数据库有联机重做日志,记录对数据库所做的修改,这些操作会记录在联机重做日志里,当数据库处于归档状态并切换日志的时候,被切换的日志会进行归档,归档的日志文件会存放在归档目录。数据库运行过程会不断切换联机重做日志,归档目录会逐渐被占满,如果不做删除归档日志,联机重做日志将不能切换,会造成数据库挂起,从而导致上层应用不可用。因此需要及时对过期归档日志做删除处理[2]。

目标:备份脚本每隔4小时自动执行一次;备份数据库归档日志;归档备份保留7天,过期自动删除;保留操作日志备查。加载环境变量脚本delet_archive.sh

RMAN=$ORACLE_HOME/bin/rman

WEEK=$((`date +%w`))

date=`date +%Y-%m-%d`

Date >>$LOGFILE

Sh /data/rman/script/archive_delete.rman $RMAN $LOGFILE

删除归档脚本 archivelog_delete.sh

Crosscheck archivelog all;

Delete noprompt expired archivelog all;

Delete noprompt archivelog until time' sysdate-7';

Oracle用户使用crontab -e进行编辑,设定执行的时间:240 * * * * sh/data/rman/script/delet_archive.sh

2.3 定时自动发起数据库增量备份

增量备份是指在上一次备份后,备份与前一次相比增加被修改的文件。第一次增量备份的对象是进行全备后所产生的增加和修改的文件;第二次增量备份的对象是进行第一次增量备份后所产生的增加和修改的文件,如此类推。这种备份方式优点是:没有重复的备份数据,数据量不大,时间很短。但增量備份的数据恢复较麻烦。必须具有上一次全备份和所有增量备份磁盘(一旦丢失或损坏其中的一盘磁盘,就会造成恢复的失败),并且它们必须依次沿着全备份到增量备份的时间逐个反推恢复,这就极大地延长了恢复时间[3]。

备份策略:每周日凌晨做0级备份;每周一,四做一级备份;每周二,三,五,六做二级备份:

00 4 * * 0 /u01/app/Oracle/rman_bak/scripts/rman_bak.sh 0 (0级备份脚本)

00 4 * * 1,4 /u01/app/Oracle/rman_bak/scripts/rman_bak.sh 1 (1级备份脚本)endprint

00 4 * * 2,3,5,6 /u01/app/Oracle/rman_bak/scripts/rman_bak.sh 2 (2级备份脚本)

备份脚本:

run{allocate channel c1 type disk;

crosscheck backupset of archivelog all;

backup filesperset 3 format '$BACKUP_PATH/data/$DATE/arch.%d.live.$LEVEL.%t'(archivelog from time 'sysdate-7' all delete input);

delete noprompt expired backupset of archivelog all;

release channel c1;}

run{allocate channel c1 type disk;

crosscheck backupset of archivelog all;

backup filesperset 3 format '$BACKUP_PATH/data/$DATE/arch.%d.live.$LEVEL.%t' (archivelog from time 'sysdate-1' all);

delete noprompt expired backupset of archivelog all;

release channel c1;}

2.4 使用脚本自动验证备份数据有效性

数据备份过程中可能由于操作系统层面或者硬件层面的故障导致数据丢失,可使用脚本调用RMAN工具检查数据备份过程中数据块的完整性,以此保证备份数据有效性。

目标:脚本每天3点自动校验全库备份或者单一数据文件一次;保留操作日志备查。

全库备份SHELL脚本validate.sh

run{ allocate channel c1 device type disk;

crosscheck backup;

validate database;

release channel c1; }

最后以Oracle身份执行crontab -e

0 3 * * * /opt/Oracle/backup/script/validate.sh 2>&1 >/dev/null

3 结语

Oracle的自动化SHELL脚本简单高效的解决日常备份管理的各种问题,便捷的可移植性也能在其它操作系统平台的Oracle备份管理中发挥同样作用。熟练使用Oracle后,还可根据数据库相关维护操作命令融合脚本,扩展自动化腳本适用范围。

参考文献

[1]SHELL.脚本学习指南[M].机械工业出版社,2009.

[2]黄镭罡.通过UNIX Shell脚本实现对Oracle数据库集中监控管理[D].上海交通大学,2010.

[3]Oracle.11g数据库最佳入门教程[M].清华大学出版社,2014.endprint