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