俄罗斯服务器本来有自动清理归档日志脚本的
—exdp方式、(个人认为很不严谨) 我之前也不清楚、一直没有出问题、 也没来找我、
前些天找到我、归档日志不自动备份清理了、 导致归档日志写满、数据库无法登陆、
现在只能是运维人员手工清理、 让我查下原因、解决下
大概查了下、 问题原因是因为root密码过期、 之前的脚本是挂在root下的、通过crontab定时执行、 root密码过期导致crontab失效、 我拿出的解决方案是重置下root密码、 因为甲方涉及到密码问题流程比较繁琐、 不是很乐意、问我有没有别的办法、
那只能改到oracle用户下咯、再换成rman备份、、、、
脚本如下:
#zyz
#backupscript
source /home/oracle/.bash_profile_hrt
export BACK_DATE=`date +%Y%m%d`
export BACKUP_PATH=/data/spi_bak/rman
echo `mkdir -p ${BACKUP_PATH}/${BACK_DATE}`
rman target / msglog=${BACKUP_PATH}/${BACK_DATE}/bak_0_$BACK_DATE.log << EOF
run
{
allocate channel ch1 device type disk; #分配通道
allocate channel ch2 device type disk;
sql 'alter system archive log current'; #归档当前日志
backup database format '${BACKUP_PATH}/${BACK_DATE}/data_%s.bak';
backup format '${BACKUP_PATH}/${BACK_DATE}/conbak_%s.bak' current controlfile;
backup spfile format ='${BACKUP_PATH}/${BACK_DATE}/spfile_%s.bak';
crosscheck backup;
crosscheck archivelog all;
sql 'alter system archive log current';
backup archivelog all format '${BACKUP_PATH}/${BACK_DATE}/arch_%s.bak' delete all input;
crosscheck backup;
crosscheck archivelog all;
delete noprompt expired backup;
delete noprompt obsolete;
delete noprompt backup of database completed before 'sysdate -1';
delete noprompt archivelog all;
delete noprompt backup of archivelog all completed before 'sysdate -1';
release channel ch1;
release channel ch2;
}
exit;
EOF
$ crontab -e
10 3 * * * /data/spi_bak/script/zback.sh
$ crontab -l
这里说下exdp(导入导出方式)备份和RMAN备份方式的区别、 exdp导入导出、 设置定时任务、把整个用户导出作为备份(因为我们这个项目就用一个用户)
这种方法有什么弊端呢、 定时任务设置每天早上8点备份、 当数据库在2号早上7点出问题了、 我们手里就只有1号早上8点的备份、从1号早上8点到2号早上7点这段时间的数据就是个很大的问题、
用RMAN呢、 如果出问题了、 就可以用归档日志、去把这段时间的数据找回来、 大概就是这样、
还有一个就是rman备份会压缩、相比较于exdp备出来的文件应该是小的、具体的压缩效果没有特别注意过、 但是能节省下服务器资源嘛、