基于Linux下 Oracle 备份策略(RMAN)

--**********************************

-- 基于Linux下 Oracle 备份策略(RMAN)

--**********************************

对于 Oracle 数据库的备份与恢复,尽管存在热备,冷备以及逻辑备份之外,使用最多的莫过于使用RMAN进行备份与恢复。而制定RMAN备份策

略则是基于数据库丢失的容忍程度,即恢复策略来制定。在下面的备份策略中,给出的是一个通用的备份策略。在该备份策略中,使用了catalog方

式来保持备份脚本以及备份信息。在实际环境中应根据具体的情况对此进行相应的调整。

一、步骤

1.确认备份可用空间以及备份路径,根据需要创建相应文件夹

1.对于账户的连接创建一个connect.rcv,该文件包含连接到target 和catalog信息

2.创建通用的脚本用于删除过旧的备份和备份控制文件以及备份归档日志

global_del_obso --删除过旧的备份

global_bkctl --备份控制文件

global_arch --备份归档日志

3.创建0,1,2级增量备份

这三个脚本中均包含第2步的3个脚本,先调用global_del,然后做增量备份,最后备份归档日志global_arch和控制文件global_bkctl

4.创建inc0.rcv,inc1.rcv,inc2.rcv

文件内容包含调用 @@/<dir>/connect.rcv以及run{execute global script scriptname;}exit;

5.编辑第4步的三个文件分别为inc0.sh,inc1.sh,inc2.sh

nohup $ORACLE_HOME/bin/rman cmdfile=/u03/bk/scripts/inc1.rcv log=/u03/bk/scripts/inc0.log append &

6.使用crontab制定备份计划

二、具体实现

演示环境:

系统: CentOS release 4.6 (Final) + Oracle 10g

目标数据库: austin

恢复目录数据库: david

备份目录: /u03/bk

连接脚本所在路径:/u03/bk/scripts

注:监听需要配置好且已启动

1.连接脚本

connect.rcv文件内容

connect catalog rman/rman@david;

connect target sys/oracle@austin;

catalog的通用脚本

rman cmdfile=/u03/bk/scripts/connect.rcv --(在rman中使用外部脚本)

rman catalog rman/rman@david target sys/oracle@austin --使用该脚本连接后创建通用脚本

2.建立通用脚本

--删除不必要的备份

RMAN> create global script global_del_obso comment 'A script for obsolete backup and delete it' {

2> crosscheck archivelog all;

3> delete noprompt expired archivelog all;

4> allocate channel ch1 device type disk;

5> delete noprompt obsolete recovery window of 7 days;

6> release channel ch1;

7> }

--备份控制文件脚本

RMAN> create global script global_bkctl comment 'A script for backup control file'{

2> allocate channel ch1 device type disk;

3> backup as compressed backupset

4> current controlfile reuse

5> format='/u03/bk/backupctl.ctl'

6> tag='bkctl';

7> release channel ch1;

8> }

--备份归档日志脚本

RMAN> create global script global_arch comment "backup archivelog and then delete it" {

2> allocate channel ch1 device type disk;

3> allocate channel ch2 device type disk;

4> sql "alter system archive log current"; --归档当前的联机日志

5> set limit channel ch1 readrate=10240; --(读取速率10M)

6> set limit channel ch1 kbytes=4096000; --(备份片的大小)

7> backup as compressed backupset

8> format='/u03/bk/arch_%d_%U'

9> tag='bkarch'

10> archivelog all delete input;

11> release channel ch1;

12> release channel ch2;

13> }

--使用list查看所有的已建立的全局脚本

list global script names; --(列出所有的脚本)

delete globals script script_name; --(删除脚本)

RMAN> list global script names;

List of Stored Scripts in Recovery Catalog

Global Scripts

Script Name

Description

-----------------------------------------------------------------------

global_arch

backup archivelog and then delete it

global_bkctl

A script for backup control file

global_del_obso

A script for obsolete backup and delete it

3.创建0,1,2级增量备份脚本(注:每个脚本备份前会执行删除过旧的备份,脚本尾部会调用另外两个脚本来备份归档日志及控制文件)

--创建0级增量备份

RMAN> create global script global_inc0 comment "backup database as incrmental level 0"{

2> execute global script global_del_obso;

3> allocate channel ch1 device type disk;

4> allocate channel ch2 device type disk;

5> set limit channel ch1 readrate=10240;

6> set limit channel ch1 kbytes=4096000;

7> set limit channel ch2 readrate=10240;

8> set limit channel ch2 kbytes=4096000;

9> backup as compressed backupset

10> incremental level 0 database

11> format='/u03/bk/inc0_%d_%U'

12> tag='inc0';

13> release channel ch1;

14> release channel ch2;

15> execute global script global_arch;

16> execute global script global_bkctl;

17> }

--创建1级增量备份

RMAN> create global script global_inc1 comment "backup database as incrmental level 1"{

2> execute global script global_del_obso;

3> allocate channel ch1 device type disk;

4> allocate channel ch2 device type disk;

5> set limit channel ch1 readrate=10240;

6> set limit channel ch1 kbytes=4096000;

7> set limit channel ch2 readrate=10240;

8> set limit channel ch2 kbytes=4096000;

9> backup as compressed backupset

10> incremental level 1 database

11> format='/u03/bk/inc1_%d_%U'

12> tag='inc1';

13> release channel ch1;

14> release channel ch2;

15> execute global script global_arch;

16> execute global script global_bkctl;

17> }

--创建2级增量备份

RMAN> create global script global_inc2 comment "backup database as incrmental level 2"{

2> execute global script global_del_obso;

3> allocate channel ch1 device type disk;

4> allocate channel ch2 device type disk;

5> set limit channel ch1 readrate=10240;

6> set limit channel ch1 kbytes=4096000;

7> set limit channel ch2 readrate=10240;

8> set limit channel ch2 kbytes=4096000;

9> backup as compressed backupset

10> incremental level 2 database

11> format='/u03/bk/inc2_%d_%U'

12> tag='inc2';

13> release channel ch1;

14> release channel ch2;

15> execute global script global_arch;

16> execute global script global_bkctl;

17> }

--在rman中检验在rman中写的脚本global_inc0、global_inc1、global_inc2,因为RMAN不会自动检查,下面的语句用来执行脚本(检验)

RMAN> run{

2> execute global script global_inc0;

3> execute global script global_inc1;

4> execute global script global_inc2;

5> }

--查看备份完成情况

list backupset summary;

4.建立shell脚本,让linux自动执行脚本

a. vi inc0.rcv,inc1.rcv ,inc2.rcv --注意不同的文件执行不同的备份脚本

@@/u03/bk/scripts/connect.rcv --(rman下的脚本去调用其他脚本用@@符号)(调用脚本不需要分号)

run{

execute global script gloal_inc0;

}

exit;

b. 编辑shell文件

vi inc0.sh

nohup $ORACLE_HOME/bin/rman cmdfile=/u03/bk/scripts/inc0.rcv log=/u03/bk/scripts/inc0.log append &

vi inc1.sh

nohup $ORACLE_HOME/bin/rman cmdfile=/u03/bk/scripts/inc1.rcv log=/u03/bk/scripts/inc0.log append &

vi inc2.sh

nohup $ORACLE_HOME/bin/rman cmdfile=/u03/bk/scripts/inc2.rcv log=/u03/bk/scripts/inc0.log append &

--注意:nohup与&表示将脚本放入后台执行

c.使用crontab建立一个备份计划

crontab -e

#min hour date mon day(星期) command

30 1 * * 0 /u03/bk/scripts/inc0.sh

30 1 * * 1 /u03/bk/scripts/inc2.sh

30 1 * * 2 /u03/bk/scripts/inc2.sh

30 1 * * 3 /u03/bk/scripts/inc2.sh

30 1 * * 4 /u03/bk/scripts/inc1.sh

30 1 * * 5 /u03/bk/scripts/inc2.sh

30 1 * * 6 /u03/bk/scripts/inc2.sh

d.重启crontab服务(如果没有启动)

# /sbin/service crond status --用于检查crontab 服务状态

# /sbin/service crond stop //关闭服务

# /sbin/service crond restart //重启服务

# /sbin/service crond reload //重新载入配置

使crontab服务在系统启动的时候自动启动:

在/etc/rc.d/rc.local这个脚本的末尾加上:

/sbin/service crond start

e.从上面的备份策略来看,即

周日执行0级增量备份,相当于全备

周一,周二,周三执行2级增量备份

周四执行1级增量备份

周五,周六执行2级增量备份

f.编辑好的shell 脚本测试

chmod 755 *.sh --给shell脚本加权限

测试脚本 例如./inc0.sh

三、总结

1.backup controlfile in each scripts tail (在脚本的尾部备份控制文件)

2.Delete obsolete backupset in each scripts threshold (删除旧的备份)

3.Switch logfile before backup database; (在数据库备份以前切换日志,备份联机重做日志)

4.Chmod u+x*.sh

本文根据德哥RMAN:Oracle数据库一周备份方案的设计 整理完成

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT笔记

JavaWeb项目架构之NFS文件服务器

当用户A通过互联网上传文件时,经过负载均衡,随机或者定向分配到某个节点。但是当用户B去下载这个文件的时候,并不确定会向哪个节点发送请求,这样会导致用户存在一定几...

57890
来自专栏北京马哥教育

Google招聘Linux工程师的20个面试问题及答案

? 作者 | Pradeep Kumar 来源 | linux中国 豌豆贴心提醒,本文阅读时间5分钟,文末有秘密! 1.如何查看当前的Linux服务器的...

39670
来自专栏机器学习算法工程师

Windows下如何安装xgboost

最近有童鞋在后台询问windows下如何安装xgboost的问题,然后燕哥在团队中一问,哎!还真的有小伙伴会。然后一篇xgboost安装教程就热乎乎地出炉喽~ ...

29450
来自专栏Java学习123

Linux NFS服务器的安装与配置

64670
来自专栏IT派

看完这篇文章还能不懂Flask这种Web框架吗?

Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于...

9520
来自专栏同步博客

虚拟主机配置

注意:这个文件需要提供管理员身份才可以进行修改。因此,我们需要以管理员的身份打开编辑器(例如记事本、Sublime等等),在该编辑器中打开hosts文件进行修改...

26930
来自专栏维C果糖

详述 IntelliJ IDEA 远程调试 Tomcat 的方法

博主说:在调试代码的过程中,为了更好的定位及解决问题,有时候需要我们使用远程调试的方法。在本文中,就让我们一起来看看,如何利用 IntelliJ IDEA 进...

47180
来自专栏Seebug漏洞平台

GitLab 任意文件读取漏洞 (CVE-2016-9086) 和任意用户 token 泄露漏洞

Author:dawu,LG(知道创宇404安全实验室) Data:2016-10-09 0x00 漏洞概述 1.漏洞简介 GitLab 是一个利用Ruby o...

49270
来自专栏张戈的专栏

Linux服务器的进程查看命令详解

Linux 服务器正常启动后,提供服务时会调用程序,占用进程。这时候我们如何查看系统中有哪些进程在被调用呢?我们可以通过以下命令来查看。 一、ps 命令 ps ...

4.4K90
来自专栏Java3y

Linux进程管理

每个用户均可同时运行多个程序。为了区分每一个运行的程序,Linux给每个进程都做了标识,称为进程号(process ID),每个进程的进程号是唯一的。

51300

扫码关注云+社区

领取腾讯云代金券