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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容