您的位置:首页 > 数据库 > Oracle

Oracle 10g backup policy

2012-07-14 11:01 302 查看
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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: