Oracle 10g backup policy

DBA对生产库的维护主要重点在于:数据库备份,数据库监控.DBA的其他任何工作都必须基于这两点之上才具有意义.
其实这与SA(System Administrator)的工作本质上完全一致,至于数据库应用优化那是另外一种境界.

Oracle数据库的备份有如下要点
1, 备份内容是什么?
   数据文件,控制文件,归档文件,参数文件.

2, 备份策略是什么?
   每周一至两次全备,剩下其他的每天备份归档日志.

3, 备份注意事项?
   a. 开启自动备份控制文件;
      CONFIGURE CONTROLFILE AUTOBACKUP ON;
   b. 设置适当的备份保留策略,我一般将备份保留2份冗余;
      CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
   c. 开启备份优化,主要是为了能够不重复备份归档日志;
      CONFIGURE BACKUP OPTIMIZATION ON;

3, 备份如何监控?
   当备份日志中出现error或其他异常,需要发送邮件到DBA,进行及时检查.

1, Oracle单实例备份并监控
备份

对hdb数据库进行备份

1, 每天凌晨2点进行备份
[oracle@oracle backup]$ crontab -e
0 2 * * 0-6 /home/oracle/backup/backup.sh

2, 每周日,周三进行全备份,其他时间进行归档日志备份.
[oracle@oracle backup]$ cat backup.sh

#!/bin/bash
# Oracle database hdb backup BENGIN
# Jeron Peng 2012/05/18            
# 1,Set the environment variable
. /home/oracle/.bash_profile
export SH_HOME=/home/oracle/backup
DATE=`date +"%Y%m%d"`
WEEK=`date +"%w"`

# 2,Check the oracle database hdb is running or not
ps -ef|grep dbw0_$ORACLE_SID|grep -v grep >> /dev/null

# 3,Start backup
if [ $? -eq 0 ];
then if [ $WEEK = "0" ]||[ $WEEK = "3" ];
     then rman target / @$SH_HOME/fullbackup.sql log=$SH_HOME/full_$DATE.log
     else rman target / @$SH_HOME/archbackup.sql log=$SH_HOME/arch_$DATE.log
     fi
fi
3, 全备份fullbackup.sql

[oracle@oracle backup]$ less fullbackup.sql
run{
backup full tag 'FULL' database
include current controlfile format '/home/oracle/backup/hdbFULL_%d_%T_%s'
plus archivelog format '/home/oracle/backup/hdbARCH_%d_%T_%s' delete all input;或delete all input 删除归档日志.
RESTORE DATABASE VALIDATE;
CROSSCHECK BACKUP OF DATABASE;
REPORT OBSOLETE;
DELETE NOPROMPT OBSOLETE;
}

如果不使用delete all input或者加入下面删除语句亦可.

LIST BACKUP SUMMARY;该语句写在run{}脚本无法执行.
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-8';删除8天前的归档日志.

4, 归档备份archbackup.sql
[oracle@oracle backup]$ less archbackup.sql
run{
backup TAG 'ARCH' archivelog all format '/home/oracle/backup/hdbARCH_%d_%T_%s' delete all input;
}

监控

通过对备份日志的筛选,当含有ERROR,Warning,RMAN-,ORA- 等报错字眼时,发送邮件告知DBA去检查备份状况,并进行处理.
1, 定制计划任务
[oracle@oracle backup]$ crontab -e
0 2 * * 0-6 /home/oracle/backup/backup.sh
0 6 * * 0-6 /home/oracle/backup/checkbackup.sh

2, 检查筛选备份日志,并发送邮件(或者将该脚本与backup.sh合并).
[oracle@oracle backup]$ less checkbackup.sh

# !/bin/bash
# Check the database backup status, if exists errors or warnings, inform to DBA
# Jeron Peng 2012/05/18

# Check backup log and sendmail
export SH_HOME=/home/oracle/backup
DATE=`date +"%Y%m%d"`

if [ -f "$SH_HOME/full_$DATE.log" ];
then grep -E -i "warning|error|rman-|ora-" $SH_HOME/full_$DATE.log >> /dev/null
   if [ $? -eq 0 ];
   then mail -s "Error RMAN Full Backup hdb on oracle.sannet.net `date +"%m/%d/%Y"`" monitor@oraclegc.com < $SH_HOME/full_$DATE.log
   fi
fi

if [ -f "$SH_HOME/arch_$DATE.log" ];
then grep -E -i "warning|error|rman-|ora-" $SH_HOME/arch_$DATE.log >> /dev/null
   if [ $? -eq 0 ];
   then mail -s "Error RMAN Archivelog Backup hdb on oracle.sannet.net `date +"%m/%d/%Y"`" monitor@oraclegc.com < $SH_HOME/arch_$DATE.log
   fi
fi

if [ ! -f "$SH_HOME/full_$DATE.log" ]&&[ ! -f "$SH_HOME/arch_$DATE.log" ];
then mail -s "No RMAN Backup hdb on $HOSTNAME `date +"%m/%d/%Y"`" monitor@oraclegc.com << EOF
No RMAN backup hdb on $HOSTNAME `date +"%m/%d/%Y"`, please check it!!!
EOF
fi
备份维护

删除归档可以放在备份脚本,也可以单独使用脚本进行删除.
delete archivelog until time '12-APR-12';
delete archivelog until time 'sysdate-40';
delete archivelog all completed before '12-APR-12';
delete archivelog all completed before 'sysdate-40';

因为备份是按照冗余保利的,所以归档日志会全部保留在数据库,需要定时对老旧的归档日志进行删除,以保证磁盘空间充足.

比较以上两个删除的不同之处

RMAN> delete archivelog all completed before 'sysdate-20';

released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=158 devtype=DISK

List of Archived Log Copies
Key     Thrd Seq     S Low Time  Name
------- ---- ------- - --------- ----
263     1    167     A 25-APR-12 /u01/app/oracle/flash_recovery_area/HDB/archivelog/2012_05_05/o1_mf_1_167_7t9cks0z_.arc
264     1    168     A 05-MAY-12 /u01/app/oracle/flash_recovery_area/HDB/archivelog/2012_05_05/o1_mf_1_168_7t9dlcx1_.arc
265     1    169     A 05-MAY-12 /u01/app/oracle/flash_recovery_area/HDB/archivelog/2012_05_05/o1_mf_1_169_7t9fbyl6_.arc
266     1    170     A 05-MAY-12 /u01/app/oracle/flash_recovery_area/HDB/archivelog/2012_05_05/o1_mf_1_170_7t9fcyxr_.arc

Do you really want to delete the above objects (enter YES or NO)? no

RMAN> delete archivelog until time 'sysdate-20';

released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=158 devtype=DISK

List of Archived Log Copies
Key     Thrd Seq     S Low Time  Name
------- ---- ------- - --------- ----
263     1    167     A 25-APR-12 /u01/app/oracle/flash_recovery_area/HDB/archivelog/2012_05_05/o1_mf_1_167_7t9cks0z_.arc
264     1    168     A05-MAY-12/u01/app/oracle/flash_recovery_area/HDB/archivelog/2012_05_05/o1_mf_1_168_7t9dlcx1_.arc
265     1    169     A05-MAY-12/u01/app/oracle/flash_recovery_area/HDB/archivelog/2012_05_05/o1_mf_1_169_7t9fbyl6_.arc
266     1    170     A05-MAY-12/u01/app/oracle/flash_recovery_area/HDB/archivelog/2012_05_05/o1_mf_1_170_7t9fcyxr_.arc
267     1    171     A05-MAY-12/u01/app/oracle/flash_recovery_area/HDB/archivelog/2012_05_08/o1_mf_1_171_7tk2hlbl_.arc

Do you really want to delete the above objects (enter YES or NO)? no

 

2, Oracle RAC备份并监控

RAC的备份原理是:在一个节点上执行数据库备份,同时只要满足该节点可以访问到其他任意节点的归档日志即可.
这样,RAC与单实例备份有所不同,主要体现在归档日志的备份上面,分2种情况;
(1) 归档日志采用的是node-crossed归档,归档存放在各个节点自身的文件系统下.
    此时需要设置单独通道让备份节点可以访问到各个节点.
    a.建立2个通道,每个通道指定的目录或自定义的目录分别为各节点可以访问并存放数据(这里是/home/oracle/backup),每个节点会将备份集放到该目录.
    b.建议备份这2个通道指定的路径为共享,这样这2节点均可以访问该共享(下面的例子是按a情况测试的,所以备份集保留在每个节点的/home/oracle/backup).

备份
[oracle@rac1 backup]$ vi fullbackup.sql
run{
allocate channel c1 device type disk connect sys/oracle@wxxrdb1; 也可以在这里定义路径和文件格式
allocate channel c2 device type disk connect sys/oracle@wxxrdb2;
backup full tag 'FULL' database
include current controlfile format '/home/oracle/backup/FULL_%d_%T_%s'
plus archivelog format '/home/oracle/backup/ARCH_%d_%T_%s' delete all input;delete all input 删除归档日志,可以不删除归档.
RESTORE DATABASE VALIDATE;
CROSSCHECK BACKUP OF DATABASE;
REPORT OBSOLETE;
DELETE NOPROMPT OBSOLETE;
}
如果不使用delete all input或者加入下面删除语句亦可.
LIST BACKUP SUMMARY;该语句写在run{}脚本无法执行.
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-8';删除8天前的归档日志.

[oracle@rac1 backup]$ vi fullbackup.sql
run{
allocate channel c1 device type disk format '/home/oracle/backup/%T' connect sys/oracle@wxxrdb1; 也可以在这里定义路径和文件格式
allocate channel c2 device type disk format'/home/oracle/backup/%T'connect sys/oracle@wxxrdb2; 节点二会备份到它自己的统一目录.
backup full tag 'FULL' database
include current controlfile
plus archivelog delete all input;delete all input 删除归档日志,亦可以不删除归档.
RESTORE DATABASE VALIDATE;
CROSSCHECK BACKUP OF DATABASE;
REPORT OBSOLETE;
DELETE NOPROMPT OBSOLETE;
}
#如果不使用delete all input或者加入下面删除语句亦可.
LIST BACKUP SUMMARY;该语句写在run{}脚本无法执行.
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-8';删除8天前的归档日志.

所以如果是交叉归档,那么备份最好需要准备一个共享的磁盘,建立共享的目录,让各节点都像里面备份.
监控
基本和单实例没有区别.
备份维护
主要是删除归档日志,可以在备份脚本中删除,也可以单独脚本删除,交叉归档模式的归档删除可以参见<<10G RAC Cross-Instance Archivelog删除>>一文.

(2) 归档使用Cluster方式,通过共享的ASM磁盘存放归档日志.此时的备份与单实例完全一样,可以参见单实例进行备份,也考虑这3个方面的内容,备份,监控,备份维护.

备份最后的结果是:每周产生2次新的全备份FULL,并且保留着从备份开始到当前的所有归档日志文件ARCH.


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值