窗口备份oracle数据,Windows平台下Oracle数据库备份脚本

以下脚本是我在项目工作中使用的备份脚本,脚本都是自己写的。但在使用过程中,感觉还有提供空间,我这个人有点懒,所以想用将脚本“开源”出来的方式督促自己完善这一套脚本。大家如果对此脚本有什么建议,随时可以提出来大家一起提高。

简介

此套脚本可以实现对oracle数据库实现全备份和增量备份。主要由rman_level0.cmd和rman_level1.cmd组成。

其中,rman_level0.cmd引用rman_level0.rcv作为rman命令输入,rman_level1.cmd引用rman_level1.rcv作为rman命令输入。

此套脚本使用的目录结构如下:

bVbN2O

其中,

archlog 存放归档日志备份

cntrfile 控制文件备份

data 数据库文件备份

log 备份日志

scripts 备份脚本相关

脚本内容

全备脚本

rman_level0.bat

rman target / CMDFILE 'D:\backup\rman_backup\scripts\rman_level0.rcv' LOG D:\backup\rman_backup\log\level0_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log

rman_level0.rcv

run {

sql 'alter system archive log current';

allocate channel c1 type disk;

backup as compressed backupset

incremental level 0

format 'D:\backup\rman_backup\data\level0_%T_%t_s%s_p%p' database

plus archivelog format 'D:\backup\rman_backup\archlog\archlog_%T_t%t_s%s_p%p' delete input;

backup format 'D:\backup\rman_backup\cntrfile\controlfile_%T_s%s_p%p' current controlfile;

release channel c1;

crosscheck backup;

delete noprompt obsolete;

crosscheck archivelog all;

}

exit;

增量备份脚本

rman_level1.cmd

rman target / CMDFILE 'D:\backup\rman_backup\scripts\rman_level1.rcv' LOG D:\backup\rman_backup\log\level1_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log

rman_level1.rcv

run {

sql 'alter system archive log current';

allocate channel c1 type disk;

backup as compressed backupset

incremental level 1

format 'D:\backup\rman_backup\data\level1_%T_%t_s%s_p%p' database

plus archivelog format 'D:\backup\rman_backup\archlog\archlog_%T_t%t_s%s_p%p' delete input;

backup format 'D:\backup\rman_backup\cntrfile\controlfile_%T_s%s_p%p' current controlfile;

release channel c1;

crosscheck backup;

delete noprompt obsolete;

crosscheck archivelog all;

}

exit;

存在的问题及解决

rman log中日期字符串的问题

目前日期字符串是使用从date和time命令的输出中截取需要的字符,组成需要的字符串。

第1种情况,当time在0-9时之间时,字符串输出如下:

C:\Users\YangJia>echo %date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%t

ime:~6,2%

20140119_ 10802

第2中情况,当time在10-23之间时,字符串输出如下:

C:\Users\YangJia>echo %date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%t

ime:~6,2%

20140119_230953

这个时候问题就出现了,当运行脚本时属于第一种情况,脚本会认为LOG参数在"_"之后就结束了,导致最终生成的日志文件名出现不完整的情况。

解决此问题有两个思路,一是将多出来的空格去掉,二是让cmd认为脚本并不是从空格处就结束 了。

以下针对两种思路给出方法:

第一种思路:

将log文件名使用%filename%变量替换,设置%filename%变量之前,对日期格式进行判断,然后设置%filename%内容:

set logfile=level0_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log

if "%time:~0,1%" == " " ^

set logfile=level0_%date:~0,4%%date:~5,2%%date:~8,2%_0%time:~1,1%%time:~3,2%%time:~6,2%.log

rman中删除无效备份和archivelog的考虑

rman中删除无效(expired)备份和archivelog的方式一般步骤是:

1. crosscheck backup &crosscheck archivelog all

2. delete expired backup;

3. delete expired archivelog;

如果将以上操作加入到脚本中,无效(expired)备份和archivelog会被自动清理掉,这样可能就会在不知情的情况下导致丢失recovery window中的片段,导致recovery window不完整。

如果不加入备份脚本,在有无效(expired)备份和归档日志的情况下,就会出现备份archivelog失败导致整个备份脚本运行失败,可能会导致归档日志不能自动清除将磁盘空间占满。

综合以上两种利弊,比较好的方式是:在出现丢失备份或archivelog的情况下,通知管理员处置,手工处理之后备份脚本运行恢复正常。即使真的有archivelog丢失,在管理员已知晓的情况下,可以规避对恢复窗口的影响。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值