Oracle系列之二:设置RMAN自动备份策略

时间:2019-02-20
本文章向大家介绍Oracle系列之二:设置RMAN自动备份策略,主要包括Oracle系列之二:设置RMAN自动备份策略使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

title: Oracle系列之二:设置RMAN自动备份策略
categories: Linux
tags:
- Oracle
- RMAN
timezone: Asia/Shanghai
date: 2019-02-01

环境

[root@rehl7501 oracle]# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 7.5 (Maipo)

Oracle 11g 11.2.0.4

1.开启和关闭归档模式

1.管理员登录

sqlplus / as sysdba

2.查看是否开启归档模式

SQL> archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     2
Current log sequence           4

3.关闭数据库

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

4.启动数据库到mount状态

SQL> startup mount;
ORACLE instance started.

Total System Global Area  759943168 bytes
Fixed Size                  2257112 bytes
Variable Size             499126056 bytes
Database Buffers          255852544 bytes
Redo Buffers                2707456 bytes
Database mounted.

5.启用归档模式并查看

SQL> alter database archivelog;

Database altered.

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     2
Next log sequence to archive   4
Current log sequence           4

6.启动数据库

SQL> alter database open;

Database altered.

7.关闭归档模式

# 关闭数据库
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

# 启动数据库到mount状态
SQL> startup mount;
ORACLE instance started.
Total System Global Area  759943168 bytes
Fixed Size                  2257112 bytes
Variable Size             499126056 bytes
Database Buffers          255852544 bytes
Redo Buffers                2707456 bytes
alter database noarchivelog;Database mounted.

# 关闭归档模式
SQL> alter database noarchivelog;
Database altered.

# 查看状态
SQL> archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     2
Current log sequence           4

2.RMAN常用命令

1.连接方式

# 连接本地数据库
rman target /

# 连接远程数据库
rman target sys/oracle@orcl

2.默认配置

RMAN> SHOW ALL;

# 如果配置后面有# default,则说明此项为默认,没有被修改过。
RMAN configuration parameters for database with db_unique_name ORACLEDB are:

# 冗余策略,基于冗余数量
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default

# 是否开启备份优化(只读表空间等不备份)
CONFIGURE BACKUP OPTIMIZATION OFF; # default

# 默认向磁盘备份,可改为默认向磁带备份sbt
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default

# 是否自动备份控制文件(备份任意对象时备份控制文件)
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default

# 设置自动备份控制文件的位置和命名
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default

# 默认的并行度
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default

# 数据文件复合备份默认的份数
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default

# 归档文件复合备份默认的份数
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default

# 备份集最大尺寸(应该没人设置这个)
CONFIGURE MAXSETSIZE TO UNLIMITED; # default

# 备份加密
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default

# 备份加密算法,还有一个是 ‘AES256'
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default

# 压缩,有basic、law、medium、high选项
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default

# to applied on standby,归档删除策略,大多对DG使用,
# 因为主节点的归档备份后想要删除,可能备节点还未使用,此参数限制主节点的归档不能轻易删除
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default

# 在控制文件备份时,产生一个控制文件快照,以用来控制文件的读一致性
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/dbs/snapcf_oracledb.f'; # default

3.常用命令

  • list查看备份信息:

    list backup;
    list backup of controlfile;
    list backup of archivelog all;
    list archivelog all;
    list expired backup;

  • delete删除备份

    delete obsolete; 通过冗余策略,删除过期备份。
    delete expired backup; 需要先crosscheck,再删除无效备份
    delete backupset n,n,n;
    delete backup; 删除所有备份

  • crosscheck 用来检查备份,如果物理磁盘上存在,并且控制文件中有记录,则显示available,否则expired

    crosscheck archivelog all;
    crosscheck backup;

  • report 用来分析当前归档信息

    report need backup;
    report obsolete;

3.RMAN自动全备脚本(每次执行执行全备)

#!/bin/bash

# by 小六 20181126 1327133225@qq.com
# ######################### oracle 11.0.2.4 RMAN自动备份脚本 #########################
# by all
# su - oracle
# mkdir -p /home/oracle/log
#
# %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)

# 定义选项1:备份路径
BACKUP_PATH=/home/oracle/bak

# 取当前日期
BACKUP_DATE=`date +%Y%m%d`
# 取当前星期几,0为周日,星期一到星期六分别对应1-6
WEEK_DAILY=`date +%w`

# 判断当前用户是不是oracle账户
if [ $USER = "oracle" ]
then
    echo "当前用户是oracle,可以继续!"
else
    echo "---------------当前用户不是oracle,请使用oracle用户执行本备份脚本,程序将退出。"
    exit
fi

$ORACLE_HOME/bin/rman log=${BACKUP_PATH}/${BACKUP_DATE}.out <<EOF
connect target /
run{
# 1.冗余策略(以下3个选项只能保留一个)(默认冗余策略为只保留最后一个)
# 1.1.配置备份集保留3天,过了3天之后这个备份集就是过期的
#CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;
# 1.2.配置备份集冗余为3,如果备份集大于3,那么通过report obsolete命令就可以查看过期的备份集
CONFIGURE RETENTION POLICY TO REDUNDANCY 1;
# 1.3.表示不需要采用保留策略,设置为NONE后,所有备份都不过期
#CONFIGURE RETENTION POLICY TO NONE;

# 启用控制文件自动备份
# 触发情况:
#       1、当数据库的结构发生改变时(数据库运行在归档模式)
#       2、当完成 RMAN 备份后
# 自动备份打开时,会在把数据文件,日志文件,控制文件,SPfile等等都备份完了后
# 再自动备份一遍当前的控制文件。
# 因为你在上面的备份完成后,控制文件里面记载的信息就发生了变化的,自动备份就会把它备一遍。
# 自动备份关闭时,就不会最后再备一遍了。
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/home/oracle/bak/%d_%F'; 

CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1;

allocate channel c1 type disk FORMAT '${BACKUP_PATH}/%d_%T_%U';
allocate channel c2 type disk FORMAT '${BACKUP_PATH}/%d_%T_%U';

# 备份全库及控制文件、服务器参数文件
backup as compressed backupset database;
# 备份所有归档的重做日志,并删除已备份的归档日志
backup as compressed backupset archivelog all delete input;

# 是否删除过期备份,对应1制定的冗余策略,需要先查看,然后删除。
# report obsolete命令用于列出rman资料库中能够被删除的全备份、数据文件拷贝和归档日志记录。 
# report obsolete; 
# 删除陈旧备份(noprompt=不提示)
# delete noprompt  obsolete; 

# 核对所有备份集
crosscheck backup;

# 核对归档日志
crosscheck archivelog all;

# 删除EXPIRED备份集(noprompt=不提示)
# delete noprompt expired backup;

# 释放通道
release channel c1;
release channel c2;
}
EOF
echo
echo "Backup Complete!"
echo

4.RMAN增量备份(周日备份level=0,其他时间备份level=1)

#!/bin/bash

# by 小六 20181126 1327133225@qq.com
# ######################### oracle 11.0.2.4 RMAN自动备份脚本 #########################
# by all
# su - oracle
# mkdir -p /home/oracle/log
#
# %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)

# 定义选项1:备份路径
BACKUP_PATH=/home/oracle/bak

# 取当前日期
BACKUP_DATE=`date +%Y%m%d`
# 取当前星期几,0为周日,星期一到星期六分别对应1-6
WEEK_DAILY=`date +%w`

# 判断当前用户是不是oracle账户
if [ $USER = "oracle" ]
then
    echo "当前用户是oracle,可以继续!"
else
    echo "---------------当前用户不是oracle,请使用oracle用户执行本备份脚本,程序将退出。"
    exit
fi

################################### 备份策略1(二选一) ###############################
#                                                                                     #
# 说明:每周日做level=0备份,其他所有均做level=1备份                                  #
# 比如:如果需要恢复周五的数据,需要周日的level=0备份和周一到周五的5份level=1备份     #
#                                                                                     #
#######################################################################################

if [ ${WEEK_DAILY} -eq 0 ]
then
    BACKUP_LEVEL=0
else
    BACKUP_LEVEL=1
fi

################################### 备份策略2(二选一) ###############################
#                                                                                     #
# 说明: 
# 比如:
#                                                                                     #
#######################################################################################

#if [ ${WEEK_DAILY} -eq 0 ]
#then
#    BACKUP_LEVEL=0
#else
#    BACKUP_LEVEL=1
#fi

# 设置备份level为全局变量,使其可以在以下的的ramn脚本里引用。
export BACKUP_LEVEL=${BACKUP_LEVEL}

echo "今天是星期$BACKUP_LEVEL"

$ORACLE_HOME/bin/rman log=${BACKUP_PATH}/${BACKUP_DATE}.out <<EOF
connect target /
run{
# 1.冗余策略(以下3个选项只能保留一个)(默认冗余策略为只保留最后一个)
# 1.1.配置备份集保留3天,过了3天之后这个备份集就是过期的
#CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;
# 1.2.配置备份集冗余为3,如果备份集大于3,那么通过report obsolete命令就可以查看过期的备份集
CONFIGURE RETENTION POLICY TO REDUNDANCY 1;
# 1.3.表示不需要采用保留策略,设置为NONE后,所有备份都不过期
#CONFIGURE RETENTION POLICY TO NONE;

# 启用控制文件自动备份
# 触发情况:
#       1、当数据库的结构发生改变时(数据库运行在归档模式)
#       2、当完成 RMAN 备份后
# 自动备份打开时,会在把数据文件,日志文件,控制文件,SPfile等等都备份完了后
# 再自动备份一遍当前的控制文件。
# 因为你在上面的备份完成后,控制文件里面记载的信息就发生了变化的,自动备份就会把它备一遍。
# 自动备份关闭时,就不会最后再备一遍了。
CONFIGURE CONTROLFILE AUTOBACKUP ON;
# CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '${BACKUP_PATH}/%d_%F'; 

CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1;

allocate channel c1 type disk FORMAT '${BACKUP_PATH}/%d_%T_%U';
allocate channel c2 type disk FORMAT '${BACKUP_PATH}/%d_%T_%U';

# 备份全库及控制文件、服务器参数文件
backup as compressed backupset incremental level ${BACKUP_LEVEL} database;
# 备份所有归档的重做日志,并删除已备份的归档日志
backup as compressed backupset incremental level ${BACKUP_LEVEL} archivelog all delete input;

# 是否删除过期备份,对应1制定的冗余策略,需要先查看,然后删除。
# report obsolete命令用于列出rman资料库中能够被删除的全备份、数据文件拷贝和归档日志记录。 
# report obsolete; 
# 删除陈旧备份(noprompt=不提示)
# delete noprompt  obsolete; 

# 核对所有备份集
crosscheck backup;

# 核对归档日志
crosscheck archivelog all;

# 删除EXPIRED备份集(noprompt=不提示)
# delete noprompt expired backup;

# 释放通道
release channel c1;
release channel c2;
}
EOF
echo "执行状态:$?"
echo
echo "Backup Complete!"
echo