最近新交接了一个项目,对项目的备份机制不太了解,所以找到备份脚本研究了下,初学者,凭自己的理解加了注释避免遗忘,贴出来如有不足的请多多指教
$crontab -l ##先查看执行计划
00 01 20 * * /u02/rman/scripts/bakdbfull.sh > /dev/null
00 02 * * * /u02/rman/scripts/baklog.sh > /dev/null
00 03 * * * /u02/rman/scripts/bak_to_dis_rec.sh > /dev/null
##当crontab调用时,错误和标准输出会写成mail通知你不需要记录额外信息的话,把标准输出和错误重定向到/dev/null(可以理解为空文件,输到这里就找不回来了)
rman备份脚本
#####################baklog.sh
export ORACLE_HOME=/u01/orcl/product/10.2.0/db
export ORACLE_SID=CDBRWA1
/u01/orcl/product/10.2.0/db/bin/rman target / log=/u02/rman/backup/rwa/rman_arc_daily.log <<-EOF ##写日志rman_arc_daily.log
run{
##备份归档日志删除所有输入压缩备份集,格式:%U%s.logbak
backup as compressed backupset archivelog all delete all input format '/u02/rman/backup/rwa/%U%s.logbak';
}
exit;
EOF
more /u02/rman/backup/rwa/rman_arc_daily.log >>/u02/rman/backup/rwa/rman_arc.log
exit
######################bak_to_dis_rec.sh
export ORACLE_HOME=/u01/orcl/product/10.2.0/db
export ORACLE_SID=CDBRWA1
/u01/orcl/product/10.2.0/db/bin/rman target / log=/u02/rman/backup/rwa/rman_full_monthly.log <<-EOF
run{
##备份数据库压缩备份集,格式:%U%s.logbak
backup as compressed backupset database format '/u02/rman/backup/rwa/%U%s.bak';
}
exit;
EOF
more /u02/rman/backup/rwa/rman_full_monthly.log >>/u02/rman/backup/rwa/rman_full.log
exit
#######################bakdbfull.sh
back_time=`date+%Y%m%d%H%M`
back_file_path=/u02/rman/backup/rwa
#创建压缩:查找24小时(1天)以内文件名含有"*bak"的到目标文件夹
tar -cvf $back_file_path/$back_time.tar $(find $back_file_path/ -name "*bak" -mtime -1)
[ -f $back_file_path/$back_time.tar ]
if [ $? = 0] ; then
echo "$back_time backup informaion!" >> $back_file_path/bak_to_dis_rec.log
ftp -n<
> $back_file_path/bak_to_dis_rec.log ##-n限制FTP自动登录,<>为输入重定向,表示前面的ftp把后面的指令作为输入的指令,直到遇到EOF
open 10.68.xx.xx
user rwa rwaadmin
binary ##使用二进制的文件传输方式(需要用这种方式传输的类型有:ISO文件,可执行文件,压缩文件,图片等)
lcd $back_time.tar ##相当于cd ,命令定位本地机器目录
prompt ##关闭传输确认提示
mput $back_time.tar
close
bye
EOF
rm $back_file_path/$back_time.tar
else
echo "There is something wrong with FTP of $back_time.\nPlease check the the ShellScript /u02/rman/scripts/bak_to_dis_rec.sh" >>$back_file_path/bak_to_dis_rec.log
fi
注:linux crontab命令基本格式 :
* * * * * command
分 时 日 月 周 命令
注意,上述都是空格隔开的
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
注:格式化代表的意思
%c 备份片的拷贝数
%d 数据库名称
%D 位于该月中的第几天 (DD)
%M 位于该年中的第几月 (MM)
%F 一个基于DBID唯一的名称,这个格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII为该数据库的DBID,YYYYMMDD为日期,QQ是一个1-256的序列
%n 数据库名称,向右填补到最大八个字符
%u 一个八个字符的名称代表备份集与创建时间
%p 该备份集中的备份片号,从1开始到创建的文件数
%U 一个唯一的文件名,代表%u_%p_%c
%s 备份集的号
%t 备份集时间戳
%T 年月日格式(YYYYMMDD)
写日志:
在使用rman的时候经常会碰到以下两种场景,需要把rman的日志输出到文件中;
1、显示的日志太多,导致一个屏幕显示不完,影响了问题的诊断,这时候需要把rman的log输出到文本中,整个的诊断过程就相对容易了许多。
2、在使用自动备份的时候,需要把日志输出到文本中,便于第二天进行备份任务的检查;
一、简单的日志数据的脚本
rman target / log /u01/rman.log
该脚本直接把rman的日志写到/u01/,并命名为rman.log,但是使用这种方法的时候,屏幕不会显示日志的。
二、输出日志的同时也在屏幕上打印日志
rman target / | tee /u01/rman.log
该脚本把rman日志出到文件/u01/rman.log,并打印到屏幕中;
三、在进行自动备份的时候,往往需要需要产生的日志自动增加备份的日期
以linux系统为例,通过如下脚本实现
export Today=`date +%Y%m%d`
rman target / log /home/oracle/${Today}.log