Oracle RMAN 无敌备份脚本

news2024/12/23 17:24:12

1 说明

上一篇文章:Oracle逻辑备份脚本,介绍了如何部署Oracle数据库的逻辑备份脚本,在数据迁移场景下十分好用,但是作为备份来说有点牵强。仅仅有逻辑备份时,当故障发生后,逻辑备份恢复只能恢复到某一时刻,无法做到完全恢复,会发生数据丢失。

RMAN是Oracle数据库软件自带的备份/恢复工具,它能够备份整个数据库或数据库部件,如表空间、数据文件、控制文件、归档文件以及Spfile参数文件。通过RMAN的方式无论是要备份还是要恢复,都必须先启动实例并加载数据库。

本篇文章主要介绍如何去部署一份RMAN热备脚本,采用全备+归档备份的方式:

  • 全备:每周一次;
  • 归档备份:每天一次。

为什么不采用全备+增倍?主要是由于归档备份恢复起来比较灵活,可以恢复到任意时间点。并且归档日志备份不依赖于前置的备份,这样备份链的某一部分损坏不会影响到其他备份的有效性。

2 准备工作

准备工作主要包括脚本路径创建和RMAN配置。

2.1 脚本路径创建

脚本部署在ORCLE_BASE下,使用oracle用户,创建脚本目录:

$ cd /u01/app/oracle/
$ mkdir -p rman/src
$ mkdir -p rman/log
$ mkdir -p rman/ctl

$ tree rman/
rman/
|-- ctl
|-- log
`-- src
3 directories, 0 files

src目录用于存放脚本,log目录用于存放备份日志,ctl目录用于存放自动备份的控制文件。

2.2 RMAN配置保留策略

保留策略有两种类型:recovery window(恢复窗口)和redundancy(冗余)。

通常使用冗余保留策略,保留2份备份。

RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 2;

new RMAN configuration parameters:
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
new RMAN configuration parameters are successfully stored


RMAN> show RETENTION POLICY;

RMAN configuration parameters for database with db_unique_name ORCL are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;

3 全备脚本部署

3.1 脚本说明

3.2 编辑脚本

oracle用户进入脚本目录,创建并编辑脚本:

$ cd /u01/app/oracle/rman/src
$ vi rman_orcl_full_weekly.sh

脚本内容如下:

#!/bin/bash

if [ -f $HOME/.bash_profile ];
then
    export ORAENV_ASK=NO
    . $HOME/.bash_profile
fi

# ---------------------------------------------------------------
# environment variables
# ---------------------------------------------------------------
export ORACLE_HOME=/u01/app/oracle/product/11.2/db_1
export ORACLE_SID=orcl
DATE=`date +'%Y%m%d%H'`

RMANBASE=/u01/app/oracle/rman
SCRIPTDIR=${RMANBASE}/src
LOGDIR=${RMANBASE}/log
CTLDIR=${RMANBASE}/ctl

RMAN_LOG_FILE=${LOGDIR}/${DATE}_${ORACLE_SID}_RMAN_FULL.log

# ---------------------------------------------------------------
# begin
# ---------------------------------------------------------------

echo 'Run Script' $0 >> ${RMAN_LOG_FILE}
echo -e "\n****** Rman Full Backup started on `date +'%F %T'` ******\n" >> ${RMAN_LOG_FILE}

# ---------------------------------------------------------------
# rman full backup
# ---------------------------------------------------------------

rman target / msglog ${RMAN_LOG_FILE} append << EOF
run {
allocate channel ch00 type disk;
allocate channel ch01 type disk;
allocate channel ch02 type disk;
allocate channel ch03 type disk;

sql 'alter system archive log current';

backup database
 filesperset 1
 tag 'BK_WEEKLY_FULL.${DATE}'
 format 'BK_WEEKLY_FULL_%d_%T_%U_%s'
 include current controlfile;

sql 'alter system archive log current';

backup archivelog all
 filesperset 1
 tag 'BK_WEEKLY_ARCH.${DATE}'
 format 'BK_WEEKLY_ARCH_%d_%T_%U_%s';

backup spfile
 tag 'BK_WEEKLY_SPFILE.${DATE}'
 format 'BK_WEEKLY_SPFILE_%d_%T_%U_%s';

backup current controlfile
 tag 'BK_WEEKLY_CTRL.${DATE}'
 format 'BK_WEEKLY_CTRL_%d_%T_%U_%s';

crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;

release channel ch00;
release channel ch01;
release channel ch02;
release channel ch03;
}

list backup summary;

EOF

# ---------------------------------------------------------------
# end
# ---------------------------------------------------------------

echo -e "\n****** Rman Full Backup Finished On `date +'%F %T'` ******\n" >> ${RMAN_LOG_FILE}

exit 0

脚本赋予执行权限

$ chmod +x rman_orcl_full_weekly.sh

3.3 脚本试运行

oracle用户进入脚本目录执行:

$ cd /u01/app/oracle/rman/src
$ ./rman_orcl_full_weekly.sh

image.png

4 归档备份脚本部署

4.1 脚本说明

4.2 编辑脚本

oracle用户进入脚本目录,创建并编辑脚本:

$ cd /u01/app/oracle/rman/src
$ vi rman_orcl_arch_daily.sh

脚本内容如下:

#!/bin/bash

if [ -f $HOME/.bash_profile ];
then
    export ORAENV_ASK=NO
    . $HOME/.bash_profile
fi

# ---------------------------------------------------------------
# environment variables
# ---------------------------------------------------------------
export ORACLE_HOME=/u01/app/oracle/product/11.2/db_1
export ORACLE_SID=orcl
DATE=`date +'%Y%m%d%H'`

RMANBASE=/u01/app/oracle/rman
SCRIPTDIR=${RMANBASE}/src
LOGDIR=${RMANBASE}/log
CTLDIR=${RMANBASE}/ctl

RMAN_LOG_FILE=${LOGDIR}/${DATE}_${ORACLE_SID}_RMAN_ARCH.log

# ---------------------------------------------------------------
# begin
# ---------------------------------------------------------------

echo 'Run Script' $0 >> ${RMAN_LOG_FILE}
echo -e "\n****** Rman Archive Log Backup started on `date +'%F %T'` ******\n" >> ${RMAN_LOG_FILE}

# ---------------------------------------------------------------
# rman archive log backup
# ---------------------------------------------------------------

rman target / msglog ${RMAN_LOG_FILE} append << EOF
run {
allocate channel ch00 type disk;
allocate channel ch01 type disk;
allocate channel ch02 type disk;
allocate channel ch03 type disk;

sql 'alter system archive log current';

backup archivelog all
 filesperset 1
 tag 'BK_DAILY_ARCH.${DATE}'
 format 'BK_DAILY_ARCH_%d_%T_%U_%s';

crosscheck archivelog all;
delete noprompt archivelog all completed before 'sysdate-1';

backup spfile
 tag 'BK_DAILY_SPFILE.${DATE}'
 format 'BK_DAILY_SPFILE_%d_%T_%U_%s';

backup current controlfile
 tag 'BK_DAILY_CTRL.${DATE}'
 format 'BK_DAILY_CTRL_%d_%T_%U_%s';

crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;

release channel ch00;
release channel ch01;
release channel ch02;
release channel ch03;
}

list backup summary;

EOF

# ---------------------------------------------------------------
# end
# ---------------------------------------------------------------

echo -e "\n****** Rman Archive Log Backup Finished On `date +'%F %T'` ******\n" >> ${RMAN_LOG_FILE}

exit 0

脚本赋予执行权限:

$ chmod +x rman_orcl_arch_daily.sh

4.3 脚本试运行

oracle用户进入脚本目录执行:

$ cd /u01/app/oracle/rman/src
$ ./rman_orcl_arch_daily.sh

image.png

5 备份检查

5.1 备份日志检查

查看日志时,如何判断备份是成功的?

方法是,检查日志文件最后 List of Backups 部分,如果控制文件备份成功了,那么可以确定此次备份就是成功的。

因为在备份脚本中,备份操作都放在run{}里,只有当前的操作成功了,才可以继续执行后续的操作。而控制文件又是最后备份的,因此,控制文件备份成功,则说明前面的备份也是成功的,反之亦然。

一、查看全备日志

进入日志目录,查看最新的全备日志文件:

$ cd /u01/app/oracle/rman/log
$ ls -lth ^C
$ tail -50 2024092609_orcl_RMAN_FULL.log

image.png

二、查看归档备份日志

进入日志目录,查看最新的归档备份日志文件:

$ cd /u01/app/oracle/rman/log
$ ls -lth ^C
$ tail -50 2024092609_orcl_RMAN_ARCH.log

image.png

5.2 备份集检查

判断备份完整行的结果也是和看日志的方法一样,检查有没有控制文件备份集。

登录rman工具,命令查看备份集:

$ rman target /
RMAN> list backup summary;

image.png

5.3 查看视图

也可以通过数据库自带的视图v$rman_status查看备份情况,比较直观。

oracle用户登录数据库实例:

# su - oracle
$ sqlplus / as sysdba

输入下列sql脚本查看备份情况:

set lines 200
col Type_LV for a15
select *
  from (SELECT A.RECID BACKUP_SET,
               --A.SET_STAMP,
               DECODE(B.INCREMENTAL_LEVEL,
                      '',
                      DECODE(BACKUP_TYPE, 'L', 'Archivelog', 'Full'),
                      1,
                      'Incr-1级',
                      0,
                      'Incr-0级',
                      B.INCREMENTAL_LEVEL) Type_LV,
               B.CONTROLFILE_INCLUDED INCLUDED_CTL,
               DECODE(A.STATUS,
                      'A',
                      'AVAILABLE',
                      'D',
                      'DELETED',
                      'X',
                      'EXPIRED',
                      'ERROR') STATUS,
               A.DEVICE_TYPE Device_Type,
               to_char(A.START_TIME, 'yyyy-mm-dd hh24:mi:ss') Start_Time,
               to_char(A.COMPLETION_TIME, 'yyyy-mm-dd hh24:mi:ss') Completion_Time,
               A.ELAPSED_SECONDS Elapsed_Seconds,
               A.BYTES / 1024 / 1024 / 1024 "Size(GB)",
               A.COMPRESSED,
               A.TAG Tag
        --,A.HANDLE Path
          FROM GV$BACKUP_PIECE A, GV$BACKUP_SET B
         WHERE A.SET_STAMP = B.SET_STAMP
           AND A.DELETED = 'NO'
         ORDER BY A.COMPLETION_TIME DESC)
 where rownum <= 20;

image.png

6 配置定时任务

通常来说全备一周一次,归档每天一次。如果是核心系统,可以频繁一点,比如全备一周两次,归档每天几次。

本文就按照常规情况制定备份计划:

  • 全备:每周一次,周六执行,时间为2点;
  • 归档备份:每天一次,周一、二、三、四、五、七执行,时间为2点。

根据以上要求,使用oracle用户配置定时任务:

$ su - oracle
$ crontab -e

添加以下内容:

# --------------------------------------------------------------------
# Rman Backup
# --------------------------------------------------------------------
0 2 * * 6     sh /u01/app/oracle/rman/src/rman_orcl_full_weekly.sh >/dev/null 2>&1
0 2 * * 1-5,7 sh /u01/app/oracle/rman/src/rman_orcl_arch_daily.sh >/dev/null 2>&1

7 结语

至此,一套完善的RMAN备份脚本部署完成,能够应付绝大部分的备份恢复场景,可以确保在发生故障后,备份恢复数据不会丢失。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2168837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络资源模板--Android Studio 飞机大战游戏

目录 一、项目演示 二、项目测试环境 三、项目详情 四、完整的项目源码 一、项目演示 网络资源模板--飞机大战 二、项目测试环境 三、项目详情 首页 1. **继承 Activity**: - SecondActivity 类继承自 Activity&#xff0c;表示一个新的屏幕或界面。 2. **重写 onCrea…

FLUX.1图像生成模型:AI工程师的实践与探索

文章目录 1 FLUX.1系列模型2 AI工程师的视角3 ComfyUI部署4 FLUX.1部署5 工作流6 面向未来 黑森林实验室&#xff08;Black Forest Labs&#xff09;研发的FLUX.1图像生成模型&#xff0c;以其120亿参数的庞大规模&#xff0c;正在重新定义图像生成技术的新标准。FLUX.1系列模型…

服务器数据恢复—SAN环境下LUN映射出错导致文件系统一致性出错的数据恢复案例

服务器数据恢复环境&#xff1a; SAN环境下一台存储设备中有一组由6块硬盘组建的RAID6磁盘阵列&#xff0c;划分若干LUN&#xff0c;MAP到不同业务的SOLARIS操作系统服务器上。 服务器故障&#xff1a; 用户新增了一台服务器&#xff0c;将存储中的某个LUN映射到新增加的这台服…

yolo自动化项目实例解析(六)自建UI(主窗口、预览窗口)

前面我们大致把各个代码块梳理出来了&#xff0c;但是还是不知道从那块开始&#xff0c;我们这里主要先通过ui页面的元素去推理整个执行过程&#xff0c;我们首先需要知道ui功能里面有那些组件 qt设计师基础控件 Qt Designer 是一个图形界面设计工具&#xff0c;用于创建 Qt 应…

遇到慢SQL、SQL报错,应如何快速定位问题 | OceanBase优化实践

在数据库的使用中&#xff0c;大家时常会遇到慢SQL&#xff0c;或执行出错的SQL。对于某些SQL问题&#xff0c;其错误原因显而易见&#xff0c;但也有不少情况难以直观判断。面对这类问题&#xff0c;我们应当如何应对&#xff1f;如何准确识别SQL错误的根源&#xff1f;是否需…

电脑usb接口封禁如何实现?5种禁用USB接口的方法分享!(第一种你GET了吗?)

“防患于未然&#xff0c;安全始于细节。”在信息技术飞速发展的今天&#xff0c;企业的信息安全问题日益凸显。 USB接口作为数据传输的重要通道&#xff0c;在带来便利的同时&#xff0c;也成为了数据泄露和安全风险的高发地。 因此&#xff0c;对电脑USB接口进行封闭管理&a…

WPF项目中使用Caliburn.Micro框架实现日志和主题切换

目录 一、添加Caliburn.Micro框架 二、配置Serilog日志 三、实现主题切换 Caliburn.Micro是MVVM模式的轻量级WPF框架&#xff0c;简化了WPF中的不少用法。这个框架中所有的页面控制都是通过ViewModel去实现的。 以下内容是自己在进行项目实战的同时进行记录的&#xff0c;对于…

【08】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Scroll容器与Tabs组件

序言&#xff1a; 本文详细讲解了关于我们在页面上经常看到的可滚动页面和导航栏在鸿蒙开发中如何用Scroll和Tabs组件实现&#xff0c;介绍了Scroll和Tabs的基本用法与属性。 笔者也是跟着B站黑马的课程一步步学习&#xff0c;学习的过程中添加部分自己的想法整理为笔记分享出…

晶圆厂如何突破多网隔离实现安全稳定又快速的跨网域文件传输?

在当今数字化时代&#xff0c;晶圆厂作为高科技产业的核心&#xff0c;其生产效率和数据安全性直接影响到整个半导体行业的竞争力。晶圆厂内部网络通常被划分为多个安全域&#xff0c;如生产网络、研发网络、办公网络等&#xff0c;以确保数据安全和防止敏感信息泄露。然而&…

【RabbitMQ 项目】服务端:服务器模块

文章目录 一.编写思路二.代码实践三.服务端模块关系总结 一.编写思路 成员变量&#xff1a; muduo 库中的 TCP 服务器EventLoop 对象&#xff1a;用于主线程循环监控连接事件协议处理句柄分发器&#xff1a;用于初始化协议处理器&#xff0c;便于把不同请求派发给不同的业务处理…

大语言模型在构建UNSPSC 分类数据中的应用

UNSPSC 是联合国标准产品和服务代码。UNSPSC由联合国开发计划署&#xff08;UNDP&#xff09;和Dun & Bradstreet公司&#xff08;D & B&#xff09;于1998年联合制定&#xff0c;自2003年以来一直由GS1 US管理。GS1 US 将在 2024 年底前将 UNSPSC 的管理权移交给 UNDP…

【HarmonyOS】TaskPool非阻塞UI

TaskPool方法不会阻塞UI&#xff0c;如果做上传图片的功能加载Loading记得使用TaskPool&#xff0c;Promise、Async/Await都会阻塞UI 【引言】 发现Promise可能会阻塞UI&#xff0c;尝试使用async或await&#xff0c;但发现它们仍然会导致阻塞。后来看到chaoxiaoshu回复的Tas…

数字孪生平台,助力制造设备迈入超感知与智控新时代!

痛点剖析 当前&#xff0c;制造业面临系统分散导致的数据孤岛问题&#xff0c;严重阻碍了有效监管与统计分析&#xff1b;同时&#xff0c;设备多样化且兼容性不足&#xff0c;增加了管理难度&#xff1b;台账记录方式混乱&#xff0c;工单审批流程繁琐且效率低下&#xff1b;…

electron使用npm install出现下载失败的问题

我在使用electron进行下载时&#xff0c;经常出现一个错误。 HTTPError: Response code 404 (Not Found) for https://registry.npmmirror.com/v21.4.4/electron-v21.4.4-win32-x64.zip 这个时候需要修改一些npm的配置。使用命令npm config list -ls 滑到下面&#xff0c;找到一…

第一个maven web工程(eclipse)

1、点击file--》new--》Maven Project&#xff0c;如下&#xff1a; 2、直接next&#xff0c;如下 3、搜索web原型&#xff0c;如下 4、填写项目的坐标&#xff0c;如下 5、创建完成后&#xff0c;需要自己补一个文件夹&#xff0c;名称为java&#xff0c;如下&#xff1a; …

class 023 随机快速排序

这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。 这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐. https://space.bilibili.com/8888480?spm_id_f…

云中红队系列 | 使用 AWS API 配置Fireprox进行 IP轮换

在渗透测试评估期间&#xff0c;某些活动需要一定程度的自动化&#xff0c;例如从 LinkedIn 等网站抓取网页以收集可用于社会工程活动、密码喷洒登录门户或测试时盲注的有效员工姓名列表网络应用程序。但是&#xff0c;从单个源 IP 地址执行这些活动可能会导致在测试期间被拦截…

【TabBar嵌套Navigation案例-新特性页面-代码位置 Objective-C语言】

一、接下来,我们来说这个新特性页面 1.首先,看一下我们的示例程序,这里改一下,加一个叹号, command + R, 好,首先啊,这里边有一个新特性页面,当我这个程序是第一次安装、第一次运行、还有呢、就是当这个应用程序更新的时候,我应该去加载这个新特性页面, 然后呢,这…

JPEG图像的DCT(Discrete Cosine Transform)变换公式代码详解

引 言 网络上图像在传输过程中为节省内存空间主要采用jpeg格式。jpeg图属于有损压缩图像的一种。在图像篡改检测过程中&#xff0c;可以利用jpeg图像的单双压缩伪影的不同而判别图像为伪造图并可以定位伪造区域。RGB图像变成jpeg图像过程中涉及从RGB图变成YCbCr图像&#xff0c…

使用离火插件yoloV8数据标注,模型训练

1. 启动 2.相关配置 2.1 data.yaml path: D:/yolo-tool/yaunshen-yolov8/YOLOv8ys/YOLOv8-CUDA10.2/1/datasets/ceshi001 train: images val: images names: [蔡徐坤,篮球] 2.2 cfg.yaml # Ultralytics YOLOv8, GPL-3.0 license # Default training settings and hyp…