Oracle RMAN备份与恢复补充知识

RMAN恢复注意事项

  1. 提前计划和实践方案,制定各种场景的恢复指导文档;
  2. RMAN恢复前,必须要做好现场保护避免二次伤害情况发生;

RMAN恢复方法说明

RMAN数据恢复有两个过程:

  1. RESTORE
    将数据文件从磁带、磁盘或其它介质上的备份位置恢复到指定位置(磁盘、ASM等),并使其可供数据库服务器访问使用。

  2. RECOVER
    将在归档日志ArchiveLog和联机重做日志RedoLog中进行备份以来的更改重新应用于该文件,以使数据库恢复到所需的时间点或SCN位置。

※ SCN => 系统变化编号(system change number)

RMAN恢复分类说明

  1. 完全数据库恢复是恢复到故障发生前的状态,所有已经提交的操作都进行恢复,确保数据库不丢失任何数据,完全恢复只用于归档模式。

  2. 不完全数据库恢复是将数据库恢复到备份点与介质失败点之间某个时刻的状态,并不是恢复所有提交的操作,不完全恢复可能丢失部分数据

任何类型的恢复包括两个阶段:前滚阶段和回滚(回退)阶段。

  • 在前滚恢复阶段(roll-forward recovery),恢复管理器应用必要的事务日志组“重做”(REDO)所有提交的不在数据库数据文件中的事务。

  • 回滚阶段,在前滚恢复后,Oracle必须执行回滚恢复(roll-back recovery)。由于一些未完成的事务对数据库的修改信息已经提交到数据库,为保证数据库的一致性,需要清除这些事务对数据库的修改,数据库应执行回滚操作(UNDO),强制撤销这些未完成事务。
    在这里插入图片描述

RMAN不完全恢复后,如何再次恢复?

在RMAN恢复时,有时候发现恢复完毕的状态不是我们所期望的数据。这时候再次执行恢复会发现Archivelog与redo已经无法利用的。此时,我们必须要设置正确的incarnation值,参考如下:
RMAN> list incarnation;

DB 关键字  Inc 关键字 DB 名  DB ID            STATUS  重置 SCN  重置时间
------- --------------- ---------------- ------------- ----------
1       1       ORCL     1295249725       PARENT  6401206    19-2月 -12
2       2       ORCL     1295249725       PARENT  6403536    19-2月 -12
3       3       ORCL     1295249725       PARENT  6404158    19-2月 -12
4       4       ORCL     1295249725       CURRENT 6406181    19-2月 -12

操作步骤:
(1)启动但不加载实例,这是因为我们要先得到一个与恢复数据库对应物关联的控制文件
(2)使用reset database to incarnation 命令为RMAN 指示对应物的备份集。
(3)Restore controlfile,使rman还原最新的控制文件
(4)加载数据库
(5)Restore 数据库
(6)Recover 数据库
(7)使用resetlogs 打开数据库

参考命令:

run {
    
    
reset database to incarnation 3;
set until scn SCNNumber
restore database;
recover database;
alter database open resetlogs;
}

RMAN的CATALOG与NOCATALOG区别

  • catalog方式必须要首先要创建目录备份数据库,建立恢复目录。

  • nocatalog方式就是用control file作为catalog,每一次备份都要往控制文件里面写好多备份信息,控制文件里面会有越来越多的备份信息。默认情况之下,控制文件保存最近7天的记录信息,参考如下:

alter system set control_file_record_keep_time=21 scope=both;

如果超过时间的RMAN文件,那么将需要重新注册到CATALOG信息。
catalog start with ‘D:\RMANBACKUP’;

RMAN备份优化方法

  • LARGE_POOL_SIZE区域增大
# 查询LARGE_POOL_SIZE容量
SELECT nvl(name, 'large_pool') name,
       round(SUM(bytes) / 1024 / 1024, 2) size_mb
  FROM V$SGASTAT
 WHERE pool = 'large pool'
 GROUP BY ROLLUP(name);
# 设置LARGE_POOL_SIZE容量
alter system set large_pool_size = 400M scope=both;
  • RMAN参数优化
# 默认值为关闭,如果打开,rman将对备份的数据文件及归档等文件进行一种优化的算法。
CONFIGURE BACKUP OPTIMIZATION ON;
# 配置数据库设备类型的并行度。
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
# 配置备份集压缩的方式,默认是BZIP2。压缩模式参考V$RMAN_COMPRESSION_ALGORITHM
# 此参数需要注意不同版本,支持的方式可能不一样必须要先确认再设置
configure compression algorithm 'MEDIUM';
  • 启用块修改跟踪功能
    在系统中,BCT(Block Change Tracking)功能默认关闭。当启用该共功能后,每当数据块发生改变时,相关信息就会记录在该文件中这样当RMAN进行增量备份时,就不用完全遍历整个数据文件,查找需要备份的数据块从而极大地提高了备份的效率。
# 检查状态
select * from v$block_change_tracking;
# 启用命令
alter database enable block change tracking using file 'e:\RMANBackup\BlockChangeTracking.trc';
# 关闭命令
alter database disable block change tracking;

RMAN文件格式参数

参数 说明
%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)

RMAN备份与恢复进度查询

set line 9999
set pages 500
col opname for a30
col start_time for a19
SELECT SID, SERIAL#,opname, to_char(start_time,'yyyy-mm-dd HH24:MI:SS')  start_time, SOFAR, TOTALWORK,
       ROUND(SOFAR/TOTALWORK*100,2) "%COMPLETE",ceil(ELAPSED_SECONDS/60) ELAPSED_MI
FROM V$SESSION_LONGOPS
where opname like 'RMAN%' and totalwork!=0 and sofar!=totalwork order by start_time asc;

RMAN常用恢复命令

  • SPFILE参数文件
SHUTDOWN IMMEDIATE;
STARTUP NOMOUNT;
RUN{
    
    
SET DBID=1540861503;
SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'D:\RMANBACKUP\%F';
ALLOCATE CHANNEL CH1 TYPE  DISK;
RESTORE SPFILE FROM AUTOBACKUP;
RELEASE CHANNEL CH1 ;
}
  • CONTROL控制文件
SHUTDOWN IMMEDIATE;
STARTUP NOMOUNT;
RUN{
    
    
SET DBID=1540861503;
SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'D:\RMANBACKUP\%F';
ALLOCATE CHANNEL CH1 TYPE  DISK;
RESTORE CONTROLFILE FROM AUTOBACKUP;
RELEASE CHANNEL CH1 ;
}
  • 完全数据恢复
STARTUP MOUNT; 
RUN{
    
    
RESTORE DATABASE;
RECOVER DATABASE;
}
sql 'alter database open read only'; # 检查恢复数据状态
# SQL 'ALTER DATABASE OPEN RESETLOGS';
  • 基于时间恢复
STARTUP MOUNT; 
RUN{
    
    
set until time "to_date('2018-08-15 15:45:00','yyyy-mm-dd hh24:mi:ss')";
RESTORE DATABASE;
RECOVER DATABASE;
}
sql 'alter database open read only'; # 检查恢复数据状态
# SQL 'ALTER DATABASE OPEN RESETLOGS';
  • 基于SCN恢复
STARTUP MOUNT;
RUN{
    
    
ALLOCATE CHANNEL D1 TYPE DISK;
RESTORE DATABASE UNTIL SCN 1317011;
RECOVER DATABASE UNTIL SCN 1317011;
RELEASE CHANNEL D1;
sql 'alter database open read only'; # 检查恢复数据状态
# SQL 'ALTER DATABASE OPEN RESETLOGS';
}
  • 基于日志恢复
STARTUP MOUNT; 
RUN {
    
    
SET UNTIL SEQUENCE 120 THREAD 1;
RESTORE DATABASE;
RECOVER DATABASE; --recovers through log 119 not include 120
sql 'alter database open read only'; # 检查恢复数据状态
# SQL 'ALTER DATABASE OPEN RESETLOGS';
}
  • 基于取消的恢复
STARTUP MOUNT; 
RUN {
    
    
RESTORE DATABASE;
RECOVER DATABASE UNTIL CANCEL;  # 它将恢复数据库直到找不到日志文件
sql 'alter database open read only'; # 检查恢复数据状态
# SQL 'ALTER DATABASE OPEN RESETLOGS';
}

猜你喜欢

转载自blog.csdn.net/weixin_38623994/article/details/105970897