rman 异机恢复及0级1级备份脚本

rman 异机恢复及0级1级备份脚本

一、创建测试环境:

[oracle@standby back]$ sqlplus scott/scott

SQL*Plus: Release 11.2.0.4.0 Production on 星期三 7月 28 16:02:08 2021

Copyright © 1982, 2013, Oracle. All rights reserved.

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create table test (id number);

表已创建。

SQL> insert into test values(1);

已创建 1 行。

SQL> insert into test values(2);

已创建 1 行。

SQL> insert into test values(3);

已创建 1 行。

SQL> insert into test values(4);

已创建 1 行。

SQL> insert into test values(5);

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from test;

    ID
    
     1
     2
     3
     4
     5

SQL> insert into test values(6);

已创建 1 行。

SQL> insert into test values(7);

已创建 1 行。

SQL> insert into test values(8);

已创建 1 行。

SQL> insert into test values(9);

已创建 1 行。

SQL> insert into test values(10);

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from test;

    ID

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10

二、备份数据库:

1、0级备份

#!/bin/bash
#inc0.sh
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/db_1
export ORACLE_SID=orcl
export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin
export NLS_LANG=AMERICAN_AMERICA.UTF8
rman target /<< EOF
report schema;
list backup summary;
list copy;
crosscheck archivelog all;
delete noprompt expired archivelog all;
crosscheck backup;
delete noprompt obsolete;
delete noprompt expired backup;
run
{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
allocate channel c3 device type disk;
allocate channel c4 device type disk;
backup incremental level=0 database format='/u01/rmanbackup/inc0_%d_%T_%s_%p';
sql 'alter system archive log current';
backup archivelog all format='/u01/rmanbackup/arch_%d_%T_%s_%p' delete all input;
backup current controlfile format='/u01/rmanbackup/ctl_%d_%T_%s_%p';
backup spfile format='/u01/rmanbackup/spfile_%d_%T_%s_%p';
release channel c1;
release channel c2;
release channel c3;
release channel c4;
}
EOF

2、1级备份

#inc1.sh
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/db_1
export ORACLE_SID=orcl              
export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin 
export NLS_LANG=AMERICAN_AMERICA.UTF8
rman target /<< EOF
run
{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
allocate channel c3 device type disk;
allocate channel c4 device type disk;
backup incremental level=1 database format='/u01/rmanbackup/inc1_%d_%T_%s_%p';
sql 'alter system archive log current';
backup archivelog all format='/u01/rmanbackup/arch_%d_%T_%s_%p' delete all input;
backup current controlfile format='/u01/rmanbackup/ctl_%d_%T_%s_%p';
backup spfile format='/u01/rmanbackup/spfile_%d_%T_%s_%p';
release channel c1;
release channel c2;
release channel c3;
release channel c4;
}
EOF

三、异机还原数据库:
还原过程中需要根据提示手动建立相应的目录

(spfile丢失后可以直接使用rman来startup nomount ,rman会先使用dutty数据库名启动,这样就可以恢复spfile了,也可以手工创建init.ora只写dbname ,但是直接使用rman启动更加简单。)

[oracle@primary fast_recovery_area]$ rman target /

恢复管理器: Release 11.2.0.4.0 - Production on 星期三 7月 28 16:16:56 2021

Copyright © 1982, 2011, Oracle and/or its affiliates. All rights reserved.

已连接到目标数据库 (未启动)

RMAN> startup nomount;

启动失败: ORA-01078: failure in processing system parameters
LRM-00109: ������������������������ ‘/u01/app/oracle/product/11.2.0.4/db_1/dbs/initorcl.ora’

在没有参数文件的情况下启动 Oracle 实例以检索 spfile
Oracle 实例已启动

系统全局区域总计 1068937216 字节

Fixed Size 2260088 字节
Variable Size 285213576 字节
Database Buffers 775946240 字节
Redo Buffers 5517312 字节

RMAN> restore spfile from ‘/u01/back/spfile_ORCL_20210728_94_1’;

启动 restore 于 2021-07-28 16:17:24
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=429 设备类型=DISK

通道 ORA_DISK_1: 正在从 AUTOBACKUP /u01/back/spfile_ORCL_20210728_94_1 还原 spfile
通道 ORA_DISK_1: 从 AUTOBACKUP 还原 SPFILE 已完成
完成 restore 于 2021-07-28 16:17:26

RMAN> startup nomount force;

Oracle 实例已启动

系统全局区域总计 2505338880 字节

Fixed Size 2255832 字节
Variable Size 620758056 字节
Database Buffers 1862270976 字节
Redo Buffers 20054016 字节

RMAN> restore controlfile from ‘/u01/back/ctl_ORCL_20210728_93_1’;

启动 restore 于 2021-07-28 16:18:01
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=63 设备类型=DISK

通道 ORA_DISK_1: 正在还原控制文件
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
输出文件名=/u01/app/oracle/oradata/orcl/control01.ctl
输出文件名=/u01/app/oracle/fast_recovery_area/orcl/control02.ctl
完成 restore 于 2021-07-28 16:18:02

RMAN> alter database mount;

数据库已装载
释放的通道: ORA_DISK_1

RMAN> restore database;

启动 restore 于 2021-07-28 16:18:40
启动 implicit crosscheck backup 于 2021-07-28 16:18:40
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=63 设备类型=DISK
已交叉检验的 12 对象
完成 implicit crosscheck backup 于 2021-07-28 16:18:41

启动 implicit crosscheck copy 于 2021-07-28 16:18:41
使用通道 ORA_DISK_1
完成 implicit crosscheck copy 于 2021-07-28 16:18:41

搜索恢复区中的所有文件
正在编制文件目录…
没有为文件编制目录

使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00001 还原到 /u01/app/oracle/oradata/orcl/system01.dbf
通道 ORA_DISK_1: 将数据文件 00004 还原到 /u01/app/oracle/oradata/orcl/users01.dbf
通道 ORA_DISK_1: 将数据文件 00005 还原到 /u01/app/oracle/oradata/orcl/example01.dbf
通道 ORA_DISK_1: 将数据文件 00006 还原到 /u01/app/oracle/oradata/orcl/lxnews_d01.dbf
通道 ORA_DISK_1: 正在读取备份片段 /u01/back/inc0_ORCL_20210728_77_1
通道 ORA_DISK_1: 段句柄 = /u01/back/inc0_ORCL_20210728_77_1 标记 = TAG20210728T160354
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:07
通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00002 还原到 /u01/app/oracle/oradata/orcl/sysaux01.dbf
通道 ORA_DISK_1: 将数据文件 00003 还原到 /u01/app/oracle/oradata/orcl/undotbs01.dbf
通道 ORA_DISK_1: 将数据文件 00007 还原到 /u01/app/oracle/oradata/orcl/lxnews_index01.dbf
通道 ORA_DISK_1: 正在读取备份片段 /u01/back/inc0_ORCL_20210728_78_1
通道 ORA_DISK_1: 段句柄 = /u01/back/inc0_ORCL_20210728_78_1 标记 = TAG20210728T160354
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:07
完成 restore 于 2021-07-28 16:18:55

RMAN> recover database;

启动 recover 于 2021-07-28 16:19:17
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在开始还原增量数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
数据文件 00001 的还原目标: /u01/app/oracle/oradata/orcl/system01.dbf
数据文件 00004 的还原目标: /u01/app/oracle/oradata/orcl/users01.dbf
数据文件 00005 的还原目标: /u01/app/oracle/oradata/orcl/example01.dbf
数据文件 00006 的还原目标: /u01/app/oracle/oradata/orcl/lxnews_d01.dbf
通道 ORA_DISK_1: 正在读取备份片段 /u01/back/inc1_ORCL_20210728_86_1
通道 ORA_DISK_1: 段句柄 = /u01/back/inc1_ORCL_20210728_86_1 标记 = TAG20210728T160520
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
通道 ORA_DISK_1: 正在开始还原增量数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
数据文件 00002 的还原目标: /u01/app/oracle/oradata/orcl/sysaux01.dbf
数据文件 00003 的还原目标: /u01/app/oracle/oradata/orcl/undotbs01.dbf
数据文件 00007 的还原目标: /u01/app/oracle/oradata/orcl/lxnews_index01.dbf
通道 ORA_DISK_1: 正在读取备份片段 /u01/back/inc1_ORCL_20210728_87_1
通道 ORA_DISK_1: 段句柄 = /u01/back/inc1_ORCL_20210728_87_1 标记 = TAG20210728T160520
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01

正在开始介质的恢复

通道 ORA_DISK_1: 正在开始将归档日志还原到默认目标
通道 ORA_DISK_1: 正在还原归档日志
归档日志线程=1 序列=108
通道 ORA_DISK_1: 正在还原归档日志
归档日志线程=1 序列=109
通道 ORA_DISK_1: 正在读取备份片段 /u01/back/arch_ORCL_20210728_92_1
通道 ORA_DISK_1: 段句柄 = /u01/back/arch_ORCL_20210728_92_1 标记 = TAG20210728T160523
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
归档日志文件名=/u01/app/oracle/fast_recovery_area/PRODSTD/archivelog/2021_07_28/o1_mf_1_108_jj24r7n6_.arc 线程=1 序列=108
通道 default: 正在删除归档日志
归档日志文件名=/u01/app/oracle/fast_recovery_area/PRODSTD/archivelog/2021_07_28/o1_mf_1_108_jj24r7n6_.arc RECID=181 STAMP=1079108359
归档日志文件名=/u01/app/oracle/fast_recovery_area/PRODSTD/archivelog/2021_07_28/o1_mf_1_109_jj24r7nr_.arc 线程=1 序列=109
通道 default: 正在删除归档日志
归档日志文件名=/u01/app/oracle/fast_recovery_area/PRODSTD/archivelog/2021_07_28/o1_mf_1_109_jj24r7nr_.arc RECID=182 STAMP=1079108359
无法找到归档日志
归档日志线程=1 序列=110
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover 命令 (在 07/28/2021 16:19:20 上) 失败
RMAN-06054: 介质恢复正在请求未知的线程 1 序列 110 的归档日志以及起始 SCN 2581187

RMAN> alter database open resetlogs;

数据库已打开

(这里由于恢复了控制文件,所以只能resetlogs打开数据库。)

Rman>backup full database;

(resetlogs之后必须做全备份)

四、测试结果:

SQL> select * from test;

    ID

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10

已选择10行。

五、RMAN相关注意点

1、增量备份还原数据文件(restore)是通过0级备份实现,而recover是通过N个1级备份实现。

假设在T0时间点做了0级和1级备份,T1时间点RMAN恢复数据并打开数据库(alter database open resetlogs)。此时如果有需求需要恢复T0时间点(resetlog之前)完整备份,就需要还原T0时间点控制文件,再进行restore,recover。(此场景

也可通过list incarnation尝试https://blog.csdn.net/henrybai/article/details/38037255)
在nomount状态下RMAN可覆盖还原控制文件。
可使用代码块完成恢复

run {
set until time “to_date(‘T0时间点’,‘yyyy-mm-dd hh24:mi:ss’)”;
restore database;
recover database;
}

六、拓展研究

N个增量备份丢失情景
假设有T0时间点0级备份,T1时间点1级备份,T2时间点1级备份。如果T2的1级备份丢失,只能恢复到T1备份。

此时如果需要恢复到T1时间点,restore以及recover都要执行until time。

RMAN> recover database until time “to_date(‘2018-06-22 14:00:00’,‘yyyy-mm-dd hh24:mi:ss’)”;

Starting recover at 2018/06/22 16:43:08
using channel ORA_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 06/22/2018 16:43:08
RMAN-06555: datafile 1 must be restored from backup created before 2018/06/22 14:00:00
此时只有recover执行了until time,无法还原

在2018-06-22 14:07:00分完成了1级备份,可还原稍早时间点。restore,recover一并使用until time。

RMAN> restore database until time “to_date(‘2018-06-22 14:06:00’,‘yyyy-mm-dd hh24:mi:ss’)”;

Starting restore at 2018/06/22 16:44:24
using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to /u01/app/oracle/oradata/orcl/system01.dbf
channel ORA_DISK_1: restoring datafile 00002 to /u01/app/oracle/oradata/orcl/sysaux01.dbf
channel ORA_DISK_1: restoring datafile 00003 to /u01/app/oracle/oradata/orcl/undotbs01.dbf
channel ORA_DISK_1: restoring datafile 00004 to /u01/app/oracle/oradata/orcl/users01.dbf
channel ORA_DISK_1: restoring datafile 00005 to /u01/app/oracle/oradata/orcl/secure.dbf
channel ORA_DISK_1: restoring datafile 00006 to /u01/app/oracle/oradata/orcl/cs.dbf
channel ORA_DISK_1: reading from backup piece /u01/rman/db0_20180622.bak
channel ORA_DISK_1: piece handle=/u01/rman/db0_20180622.bak tag=DB0
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:07
Finished restore at 2018/06/22 16:44:31

RMAN> recover database until time “to_date(‘2018-06-22 14:06:00’,‘yyyy-mm-dd hh24:mi:ss’)”;

Starting recover at 2018/06/22 16:44:50
using channel ORA_DISK_1

starting media recovery

archived log for thread 1 with sequence 7 is already on disk as file /u01/arch/1_7_979475128.dbf
archived log for thread 1 with sequence 8 is already on disk as file /u01/arch/1_8_979475128.dbf
archived log for thread 1 with sequence 9 is already on disk as file /u01/arch/1_9_979475128.dbf
archived log for thread 1 with sequence 10 is already on disk as file /u01/arch/1_10_979475128.dbf
archived log for thread 1 with sequence 11 is already on disk as file /u01/arch/1_11_979475128.dbf
archived log for thread 1 with sequence 12 is already on disk as file /u01/arch/1_12_979475128.dbf
archived log file name=/u01/arch/1_7_979475128.dbf thread=1 sequence=7
archived log file name=/u01/arch/1_8_979475128.dbf thread=1 sequence=8
archived log file name=/u01/arch/1_9_979475128.dbf thread=1 sequence=9
archived log file name=/u01/arch/1_10_979475128.dbf thread=1 sequence=10
archived log file name=/u01/arch/1_11_979475128.dbf thread=1 sequence=11
archived log file name=/u01/arch/1_12_979475128.dbf thread=1 sequence=12
media recovery complete, elapsed time: 00:00:01
Finished recover at 2018/06/22 16:44:51

RMAN> alter database open resetlogs;

database opened

恢复完毕

查看数据已恢复到T1时间点

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值