【Oracle篇】rman工具实用指南:常用命令详解与实践(第二篇,总共八篇)

💫《博主介绍》:****✨又是一天没白过,我是奈斯,DBA一名✨

💫《擅长领域》:****✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️

💖💖💖大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注💖💖💖

今天作为rman(Recovery Manager)相关内容第二篇------rman工具实用指南:常用命令详解与实践。那么从这篇开始就进入到了rman实践部分了,所以各位小伙伴们可以打起十二分的精神了。在系统层面输入 rman target / 就可以进入到rman工具内部了,进入到工具内部后的参数如同繁星点点,所以各种参数的使用真的需要大家好好研究一番,那么带着这个问题让我们进入今天的内容。

然而,RMAN所涉及的内容之广、之深,使得难以在单篇文章中全面涵盖。所以我将理论、命令、备份策略、异机恢复、坏块处理等分成八篇文章去讲,即使分为八篇也有不少内容没有涵盖到,所以这八篇文章都是精华,看完这八篇就可以解决95%以上的RMAN相关工作内容了。八篇文章的内容分别如下:

  • 第一篇:rman物理备份工具的基础理论概述
  • 第二篇:rman工具实用指南:常用命令详解与实践**(当前篇)**
  • 第三篇:rman标准化全库备份策略:完整备份or增量备份
  • 第四篇:rman全库异机恢复:从RAC环境到单机测试环境的转移
  • 第五篇:rman全库异机恢复:从单机环境到RAC测试环境的转移
  • 第六篇:rman时间点异机恢复:从单机环境到单机测试环境的转移
  • 第七篇:Oracle数据库物理坏块处理:rman修复坏块实践与案例分析
  • 第八篇:逻辑备份工具expdp(exp)/impdp(imp)和物理备份工具rman的区别和各自的使用场景总汇

目录

[1.1 rman常用命令之backup(进行备份)](#1.1 rman常用命令之backup(进行备份))

[1.2 rman常用命令之list(查看实例备份的信息)](#1.2 rman常用命令之list(查看实例备份的信息))

[1.3 rman常用命令之restore(从RMAN备份中还原文件,为恢复做准备)](#1.3 rman常用命令之restore(从RMAN备份中还原文件,为恢复做准备))

[1.4 rman常用命令之recover(用于恢复数据库)](#1.4 rman常用命令之recover(用于恢复数据库))

[1.5 rman常用命令之delete(删除备份)](#1.5 rman常用命令之delete(删除备份))

[1.6 rman常用命令之report(用于判断实例当前可恢复状态、以及已有备份的信息)](#1.6 rman常用命令之report(用于判断实例当前可恢复状态、以及已有备份的信息))

[1.7 rman常用命令之configure(设置和修改RMAN的配置参数)](#1.7 rman常用命令之configure(设置和修改RMAN的配置参数))

[1.8 rman常用命令之set(定义或更改当前RMAN会话的某些设置)](#1.8 rman常用命令之set(定义或更改当前RMAN会话的某些设置))

[1.9 rman常用命令之crosscheck(交叉效验RMAN备份)](#1.9 rman常用命令之crosscheck(交叉效验RMAN备份))

[1.10 rman常用命令之validate(查看给定的备份集和进行验证以确保这个备份集能够被还原)](#1.10 rman常用命令之validate(查看给定的备份集和进行验证以确保这个备份集能够被还原))

[1.11 rman常用命令之Switch(更新数据文件、表空间、数据库或临时文件在控制文件中的位置信息)](#1.11 rman常用命令之Switch(更新数据文件、表空间、数据库或临时文件在控制文件中的位置信息))

[1.12 rman常用命令之blockrecover(通过RMAN备份修复坏块)](#1.12 rman常用命令之blockrecover(通过RMAN备份修复坏块))

[1.13 rman常用命令之catalog(将未识别的RMAN备份集注册到控制文件)](#1.13 rman常用命令之catalog(将未识别的RMAN备份集注册到控制文件))

[1.14 rman常用命令之convert(对数据文件进行字节格式转换)](#1.14 rman常用命令之convert(对数据文件进行字节格式转换))


首先在系统层面输入rman --help,就可以查看rman工具的使用了。

|-----------|-------------------|
| 参数选项 | 描述 |
| target | 目标数据库的连接字符串 |
| catalog | catalog恢复目录的连接字符串 |
| nocatalog | 如果指定,则没有恢复目录 |
| cmdfile | 输入命令文件的名称 |
| log | 输出消息日志文件的名称 |

使用rman命令进到终端,首先连到target目标实例,然后连接到catalog/nocatalog数据库:

1)本地连接:

本地连接nocatalog数据库 (常用):

bash 复制代码
[oracle@lf ~]$ rman target /       ###target / 表示使用sys连接到目标数据库实例。

本地连接catalog数据库:

bash 复制代码
[oracle@lf ~]$ rman target /  catalog rman/123456@orcl       ###target / 表示使用sys连接到目标数据库实例。 rman用户是创建catalog数据库时,一起创建的  

2)客户端连接:

客户端连接nocatalog数据库 (常用):

bash 复制代码
C:\Users\Administrator>rman target sys/123456@orcl   ###不指定catalog/nocatalog默认使用nocatalog,也就是将rman备份信息保存在控制文件

客户端连接catalog数据库:

bash 复制代码
C:\Users\Administrator>rman target sys/123456@orcl  catalog rman/123456@orcl  ###不指定catalog/nocatalog默认使用nocatalog,也就是将rman备份信息保存在控制文件

3)进入rman命令里面连接:

[oracle@lf ~]$ rman

连接nocatalog数据库 (常用):

bash 复制代码
RMAN> connect target /     ###不指定catalog/nocatalog默认使用nocatalog,也就是将rman备份信息保存在控制文件

连接catalog数据库:

bash 复制代码
RMAN> connect catalog rman/123456@orcl  

备份文件的格式介绍:

使用format参数时可使用的各种替换变量,如下(注意大小写)所示。

|----|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| %a | Oracle数据库的activation ID即RESETLOG_ID。 |
| %c | 指定一组双重备份条目中备份条目的副本号。如果未进行备份双工,则备份集的该变量为1,代理副本的该变量为0(从1开始编号,最大不超过256)。 |
| %d | oracle数据库的名称 |
| %D | 当前时间中的日,格式为DD。 |
| %e | 指定存档的日志序列号。 |
| %f | 绝对文件编号。 |
| %F | 基于"DBID+时间"确定的唯一名称,格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中: IIIIIIIIII代表DBID。DBID以十进制格式打印,因此很容易与目标数据库关联。 YYYYMMDD是生成备份当天的公历时间戳 QQ以16进制数表示的序列,从00开始,最大值为"FF"(256) 注意:%F仅在中有效CONFIGURE CONTROLFILE AUTOBACKUP FORMAT命令。 |
| %h | 指定归档重做日志线程号。 |
| %I | Oracle数据库的DBID。 |
| %M | 当前时间中的月,格式为MM。 |
| %n | 指定数据库的名称,在右边用x字符的总长度为八个字符。例如,如果prod1是数据库名称,则填充名称是prod1xxx。 |
| %N | 指定表空间名称。此替代变量仅在将数据文件备份为映像副本时有效。 |
| %p | 指定备份集内的条目编号。该值始于1每创建一个备份条目,增量为1。 注意:如果您指定PROXY,然后是%p变量必须包含在FORMAT字符串中显式或隐式[%U](#%a Oracle数据库的activation ID即RESETLOG_ID。 %c 指定一组双重备份条目中备份条目的副本号。如果未进行备份双工,则备份集的该变量为1,代理副本的该变量为0(从1开始编号,最大不超过256)。 %d oracle数据库的名称 %D 当前时间中的日,格式为DD。 %e 指定存档的日志序列号。 %f 绝对文件编号。 %F 基于"DBID+时间"确定的唯一名称,格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中: IIIIIIIIII代表DBID。DBID以十进制格式打印,因此很容易与目标数据库关联。 YYYYMMDD是生成备份当天的公历时间戳 QQ以16进制数表示的序列,从00开始,最大值为“FF”(256) 注意:%F仅在中有效CONFIGURE CONTROLFILE AUTOBACKUP FORMAT命令。 %h 指定归档重做日志线程号。 %I Oracle数据库的DBID。 %M 当前时间中的月,格式为MM。 %n 指定数据库的名称,在右边用x字符的总长度为八个字符。例如,如果prod1是数据库名称,则填充名称是prod1xxx。 %N 指定表空间名称。此替代变量仅在将数据文件备份为映像副本时有效。 %p 指定备份集内的条目编号。该值始于1每创建一个备份条目,增量为1。 注意:如果您指定PROXY,然后是%p变量必须包含在FORMAT字符串中显式或隐式%U. %s 指定备份集编号。此数字是控制文件中的计数器,每个备份集都会递增。计数器值从1开始,在控制文件的生存期内是唯一的。如果恢复备份控制文件,则可能会产生重复的值。另外,CREATE CONTROLFILE会将计数器初始化回1。 %t 指定备份集时间戳,该时间戳是一个4字节值,是从固定参考时间起经过的秒数。您可以结合使用%s和%t以形成备份集的唯一名称。 %T 当前时间中的年月日,格式为YYYYMMDD。 %u 指定8个字符的名称,由备份集或映像副本编号的压缩表示形式以及备份集或映像副本的创建时间组成。 %U 指定系统生成的唯一文件名(默认值)。 %U的含义对于映像副本和备份件是不同的。对于备份项,%U为%U_%p_%c指定了一个方便的简写,以确保生成的备份文件名的唯一性。对于数据文件的图像副本,%U表示以下内容:data-D-%d_id-%I_TS-%N_FNO-%f_%u 对于存档重做日志的映像副本,%U表示以下内容:arch-D_%d-id-%I_S-%e_T-%h_A-%a_%u 对于控制文件的图像副本,%U表示以下内容:cf-D_%d-id-%I_%u %Y 当前时间中的年,格式为YYYY。). |
| %s | 指定备份集编号。此数字是控制文件中的计数器,每个备份集都会递增。计数器值从1开始,在控制文件的生存期内是唯一的。如果恢复备份控制文件,则可能会产生重复的值。另外,CREATE CONTROLFILE会将计数器初始化回1。 |
| %t | 指定备份集时间戳,该时间戳是一个4字节值,是从固定参考时间起经过的秒数。您可以结合使用%s和%t以形成备份集的唯一名称。 |
| %T | 当前时间中的年月日,格式为YYYYMMDD。 |
| %u | 指定8个字符的名称,由备份集或映像副本编号的压缩表示形式以及备份集或映像副本的创建时间组成。 |
| %U | 指定系统生成的唯一文件名(默认值)。 %U的含义对于映像副本和备份件是不同的。对于备份项,%U为%U_%p_%c指定了一个方便的简写,以确保生成的备份文件名的唯一性。对于数据文件的图像副本,%U表示以下内容:data-D-%d_id-%I_TS-%N_FNO-%f_%u 对于存档重做日志的映像副本,%U表示以下内容:arch-D_%d-id-%I_S-%e_T-%h_A-%a_%u 对于控制文件的图像副本,%U表示以下内容:cf-D_%d-id-%I_%u |
| %Y | 当前时间中的年,格式为YYYY。 |

注意: 1)如果在BACKUP命令中没有指定 FORMAT 选项,则 RMAN 默认使用%U为备份。

rman可用的命令:

sql 复制代码
RMAN> help;      ###rman的功能非常丰富

1.1 rman常用命令之backup(进行备份)

在Oracle的RMAN(Recovery Manager)中,BACKUP命令用于执行数据库、归档日志、控制文件等的备份。

1)验证备份

sql 复制代码
RMAN> backup validate database;    ###扫描数据库的物理/逻辑错误,并不执行实际备份,如果有坏块会报出来。验证每个数据文件,status为FAILED,Blocks Failing(坏块)有内容需要先dbv验证坏块编号,然后rman修复坏块

File  Status  Marked Corrupt  Empty Blocks  Blocks Examined  High SCN
----   ------    --------------       ------------      ---------------     ----------
4    FAILED      0             4797         26249        1620953   
  File Name: /oracle/app/oracle/oradata/orcl/users.294.1048669455
  Block Type  Blocks Failing  Blocks Processed
  ----------      --------------     ----------------
  Data          1             15587           
  Index         0              2210            
  Other         0              3646 

2)全备 (默认备份全部数据、控制、参数文件,不包括归档日志)

sql 复制代码
RMAN> backup database tag=full_bak_20200508;    ###全备实例,tag是将备份集命名
or
RMAN> backup tag orcl_full format '/backup/full/orcl_full_%s_%p_%T'  database; 

3)全备设置备份集大小,默认无限制

sql 复制代码
RMAN> backup database maxsetsize=2g tag=full_bak_20200508;     ###如果全备上T的数据库,那么一次备份的所有结果为一个备份集,会影响备份进度,所以按需设置备份集大小

4)表空间备份

sql 复制代码
RMAN> backup tablespace tablespace_name;  

5)控制文件备份

sql 复制代码
RMAN> backup current controlfile;
or
RMAN> backup tag orcl_ctl format '/backup/full/orcl_ctl_%s_%p_%T' current controlfile;

6)参数文件备份

sql 复制代码
RMAN> backup tag orcl_spfile format '/backup/full/orcl_spfile_%s_%p_%T'  spfile; 

7)归档备份

sql 复制代码
RMAN>backup tag orcl_arch format '/backup/full/orcl_arch_%s_%p_%T' archivelog all;  

1.2 rman常用命令之list(查看实例备份的信息)

在Oracle的RMAN(Recovery Manager)中,LIST命令用于查询和显示与备份和恢复相关的各种信息。这个命令在数据库控制文件或恢复目录中查询备份的历史信息。

1)查看数据库对应物

sql 复制代码
RMAN> list incarnation;         ###查看数据库对应物,和每次的resetlogs有关。 需要使用上次执行resetlogs命令打开数据库前生成的一个备份来进行还原数据库,或者可能需要还原到执行上一个resetlogs命令之前的时间点,并且日志序列号会重置(切换对应物语法:reset database to incarnation 4;)
  db_name:数据库名称(v$database.name) 
  db id:db id(v$database.dbid) 
  Status:是否为当前,如果数据库有被多次用 resetlogs 打开的话,这里会有多条记录 
  reset scn:resetlogs 的scn 
  reset time:resetlogs 的time

2)查看所有归档日志

sql 复制代码
RMAN> list archivelog all;       

3)查看备份集信息(详细)

sql 复制代码
RMAN> list backup;        

4)查看备份集信息(简洁)

sql 复制代码
RMAN> list backup summary;   
   b 表示 backup 
   a 表示 archivelog、 f 表示 full backup、 0,1,2 表示 incremental level 备份 
   a 表示可用 avaliable、 x 表示 expired 

5)列出过期的备份文件

sql 复制代码
RMAN> list expired backup;   

6)列出copy的文件

sql 复制代码
RMAN> list copy;           

1.3 rman常用命令之restore(从RMAN备份中还原文件,为恢复做准备)

在Oracle的RMAN(Recovery Manager)中,RESTORE命令用于从RMAN备份中还原文件,为恢复做准备。这个命令允许你指定要还原的备份集、数据文件、归档日志、控制文件等。从RMAN备份中还原文件,为恢复做准备。restore和recover有本质区别,restore是从rman备份中还原文件(copy文件),而recover是通过归档恢复数据,追加到最新。

使用restore命令,该命令会在没有认识提示的情况下会重写已经存在的任何文件,除非使用set newname命令可以设置还原文件的新路径

1)参数文件的恢复

sql 复制代码
RMAN>restore spfile from '/backup/full/orcl_spfile_61_1_1040095433';        ###通过备份集恢复参数文件
or
RMAN>restore spfile from autobackup;        ###自动恢复参数文件,前提'CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default'为on,开启控制文件的自动备份,会同时备份参数、控制文件

2)控制文件的恢复

sql 复制代码
RMAN> restore controlfile from '/backup/full/orcl_ctl_60_1_1040095416';    ###通过备份集恢复控制文件
or
RMAN> restore controlfile to '/data/control.ctl' from '/backup/full/orcl_ctl_60_1_1040095416';   ###恢复控制文件到新路径
or
RMAN>restore controlfile  from  autobackup ;      ###自动恢复控制文件,首先'CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default'为on,开启控制文件的自动备份,会同时备份参数、控制文件

3)归档日志的恢复

方式一:还原所有归档日志

sql 复制代码
RMAN> restore archivelog all;

方式二:还原一天内的归档日志

sql 复制代码
RMAN> 
run{
ALLOCATE CHANNEL ch00 TYPE disk;
set archivelog destination to '/data/COST4/arch';
restore archivelog from time 'sysdate-1';   ###还原一天内的归档日志
release channel ch00;
}

方式三:还原线程2的归档日志序列

sql 复制代码
RMAN>
run{
ALLOCATE CHANNEL ch00 TYPE disk;
set archivelog destination to '/home/oracle';
RESTORE ARCHIVELOG sequence BETWEEN 5877 AND 5971 thread 2;   ###还原线程2的5877到5971归档日志序列
release channel ch00;
}

1.4 rman常用命令之recover(用于恢复数据库)

在Oracle的RMAN(Recovery Manager)中,RECOVER命令用于恢复数据库或数据文件的完整性和一致性。它基于RMAN备份或归档日志来恢复数据,确保在故障发生后,数据库能够恢复到某个一致的状态。recover 命令用于通过归档恢复数据库。可以再rman下运行也可以在sqlplus下运行。restore和recover有本质区别,restore是从rman备份中还原文件(copy文件),而recover是通过归档恢复数据,追加到最新。

该命令可以执行数据库的完全恢复或者时间点恢复。 Recover 命令确定需要哪些归档的重做日志,并且析取和应用他们。一旦完成重做的应用,我们就只需要使用 alter database open 命令打开数据库即可。

****原理:****recover的原理是数据库使用控制文件的scn作为恢复的终点,将数据文件block恢复到控制文件所记录的scn为止。

1)所有数据文件作为一个整体恢复

sql 复制代码
RMAN> recover database        ###通过v$recover_file确定

2)数据文件单个恢复

sql 复制代码
RMAN> recover  datafile  file_id1,file_id2  ###通过v$recover_file确定

1.5 rman常用命令之delete(删除备份)

在Oracle的RMAN(Recovery Manager)中,DELETE命令用于删除备份和副本,或者更改它们在恢复目录或控制文件中的状态。

备份集不是永远存在的。可以使用保存策略标记备份有效性和生存期的结束。但是备份策略的实施不会从RMAN 目录中删除备份,而只是将这些备份标记为丢弃状态。

delete命令对备份和副本的影响很大。通过delete命令,可以删除基于保存标准被标记为丢弃的任何备份,还可以将恢复目录或控制文件中的备份从expired 状态变为deleted状态。

1)删除某个备份集

sql 复制代码
RMAN> delete backup tag tag_name;     ###tag_name通过list backup命令确定

2)删除所有备份集

sql 复制代码
RMAN> delete backup;

3)删除过期的备份集

sql 复制代码
RMAN> delete noprompt expired backup;   

###执行delete backup命令时,rman只会删除available可以的备份集,而expired不可用的需要加上expired参数,显示expired的备份集表示没有物理存在于备份介质上。 注意: 在删除过期的备份之前需要先执行crosscheck backup验证,不然只执行删除过期的备份,就算有过期的备份,执行之后也是不会删除相关信息的

sql 复制代码
使用命令RMAN> crosscheck backup;       ###验证所有备份集中过期的备份集
  每个备份集或副本的状态码。 在不同的备份状态码中,分为两种状态: 
   (1)A(Available:可用):RMAN认定该项存在于备份介质上 
   (2)X(Expired:不可用):这个备份集片或副本上存储的 RMAN 目录(即控制文件或恢复目录)中,但是并没有物理存在于备份介质上

4)删除某个归档

sql 复制代码
RMAN> delete archivelog sequence seq_number thread 线程1 or 2;    ###seq_number通过list archivelog all命令确定

5)删除多个归档(区间)

sql 复制代码
RMAN> delete archivelog sequence between seq_number and seq_number thread 线程1 or 2;      ###seq_number通过list archivelog all命令确定

6)删除所有归档

sql 复制代码
RMAN>delete archivelog all;   

7)删除过期的归档备份

sql 复制代码
RMAN>delete noprompt expired archivelog all;  

###执行delete archivelog all;命令时,rman只会删除validation succeed ed for archived log可以的归档,而validation failed不可用的需要加上expired参数,显示expired的备份表示没有物理存在于备份介质上。 注意: 在删除过期的归档之前需要先执行crosscheck archivelog all验证,不然只执行删除过期的归档,就算有过期的归档,执行之后也是不会删除相关信息的 (亲测)

sql 复制代码
使用命令RMAN>crosscheck archivelog all;           ###验证所有备份集中过期的归档
  每个备份集或副本的状态码。 在不同的备份状态码中,分为两种状态: 
    (1)validation succeeded for archived log:RMAN认定该项存在于备份介质上 
    (2)validation failed for archived log:这个归档或副本上存储的 RMAN 目录(即控制文件或恢复目录)中,但是并没有物理存在于备份介质上

8)删除废弃的备份集

sql 复制代码
RMAN>delete noprompt obsolete;        

###删除已废弃的备份集。configure retention policy to redundancy默认值是1,设置备份文件保留多长时间,超出备份次数的文件标识为废弃(obsolete)。命令REPORT OBSOLETE和DELETE OBSOLETE分别用来查看废弃的文件和删除废弃的文件。RMAN不自动删除废弃的备份文件。废弃与过时(expired)不同。备份是否废弃由备份保留策略确定,废弃的备份文件是在介质还原中不再需要的(not needed)。过时的文件是不再存在的文件(not found),可用CROSSCHECK命令查看过时信息。注意: 在删除废弃的备份集之前需要先执行 report obsolete; 验证,不然只执行删除废弃的备份集,就算有废弃的备份集,执行之后也是不会删除相关信息的 (亲自测试后这点和过期的备份集和过期的归档备份集不一样,前者都需要先验证;而删除废弃的备份集是不需要 report obsolete 验证的可以直接执行delete noprompt obsolete就可以删除相关信息,但是为了统一理解,在delete noprompt obsolete前也加上 report obsolete

sql 复制代码
使用命令RMAN> report obsolete;    ###报告已丢弃的备份集(配置了保留策略)
  RMAN retention policy is set to redundancy 1(RMAN保留策略设置为冗余1),因为备份了两次,那么上一次的也是就这次的就会被表示为废弃(obsolete),RMAN不自动删除废弃的备份文件

1.6 rman常用命令之report(用于判断实例当前可恢复状态、以及已有备份的信息)

在Oracle的RMAN(Recovery Manager)中,REPORT命令用于生成与备份和恢复相关的报告。这些报告提供了关于数据库备份、恢复窗口、备份冗余等方面的信息。

1)报告目标数据库实例的信息

sql 复制代码
RMAN> report schema;      

2)报告已丢弃的备份集

sql 复制代码
RMAN> report obsolete;          
###报告已丢弃的备份集(默认值是1)。configure retention policy to redundancy默认值是1,设置备份文件保留多长时间,超出备份次数的文件标识为废弃(obsolete)。命令REPORT OBSOLETE和DELETE OBSOLETE分别用来查看废弃的文件和删除废弃的文件。RMAN不自动删除废弃的备份文件。废弃与过时(expired)不同。备份是否废弃由备份保留策略确定,废弃的备份文件是在介质还原中不再需要的(not needed)。过时的文件是不再存在的文件(not found),可用CROSSCHECK命令查看过时信息。

3)报告当前数据库中不可恢复的数据文件

sql 复制代码
RMAN> report unrecoverable;     
###报告当前数据库中不可恢复的数据文件(即没有这个数据文件的备份、或者该数据文件的备份已经过期。rman恢复之前查看不可恢复的数据文件,以免在恢复时因为不可恢复的数据文件浪费时间) 

4)报告需要备份的数据文件

sql 复制代码
RMAN> report need backup;  

1.7 rman常用命令之configure( 设置和修改RMAN的配置参数****)****

在Oracle的RMAN(Recovery Manager)中,CONFIGURE命令用于设置和修改RMAN的配置参数。这些配置参数控制RMAN的行为和备份策略。

sql 复制代码
RMAN> show all;     ###备份使用中所有可调整的参数

CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default        ###备份策略的保留份数,默认保留1份。如果再次备份时,会将前面备份的数据删除,永远只有1份
CONFIGURE BACKUP OPTIMIZATION OFF; # default                 ###备份优化,默认关闭。如果开启,假如表空间为只读模式,在第一次进行备份,以后会跳过只读的备份,减少没必要的备份,提升备份速度。
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default             ###配置默认备份设备可以是sbt(磁带),disk(硬盘)。 默认是硬盘
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default              ###备份时是否自动备份控制文件,默认关闭。
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default      ###控制文件自动备份格式,此参数需要开启CONTROLFILE AUTOBACKUP参数才有效
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default         ###配置设备类型磁盘并行度1备份类型为备份集,配置磁盘备份的类型,默认是备份集方式(backupset)或镜像拷贝也叫文件拷贝(copy)。镜像拷贝值适用于磁盘备份,磁带只支持备份集。一般用备份集更多,其效率会更高
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default        ###配置生成备份集的个数,默认是1;备份集内会包括(数据文件,控制文件、参数文件) 
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default      ###配置归档备份的路径,默认备份到磁盘
CONFIGURE MAXSETSIZE TO UNLIMITED; # default           ###配置单个备份集的大小,默认无限制。1g/100m/1024k
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default       ###配置数据库加密,默认关闭
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default     ###配置加密算法'AES128'。此参数需要开启ENCRYPTION FOR DATABASE OFF参数才有效
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default     ###配置压缩算法'基本'作为释放'默认'优化负载。备份压缩时用
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default     ###配置归档的删除策略
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/oracle/app/product/11.2.0/dbhome_1/dbs/snapcf_orcl.f'; # default    ###配置RMAN 备份时的快照控制文件的位置。快照控制文件(snapshot control file)是 RMAN 在进行备份时创建的一个临时性的控制文件副本,用于记录备份操作的元数据信息。每次进行备份时,RMAN 都会生成一个新的快照控制文件,并在备份完成后自动删除。因此不需要担心每次备份都会生成新的snapcf_orcl.f'文件,因为这个文件只是一个临时的副本,其目的是为了确保备份的一致性和完整性。RMAN 会自动管理这个过程,包括创建和清理快照控制文件,只需关注备份策略和相关的配置即可。

1)保存策略 (retention policy)

sql 复制代码
configure retention policy to redundancy 2;        ###默认值是1,设置备份文件保留多长时间,超出备份次数的文件标识为废弃(obsolete)。命令REPORT OBSOLETE和DELETE OBSOLETE分别用来查看废弃的文件和删除废弃的文件。RMAN不自动删除废弃的备份文件。废弃与过时(expired)不同。备份是否废弃由备份保留策略确定,废弃的备份文件是在介质还原中不再需要的(not needed)。过时的文件是不再存在的文件(not found),可用CROSSCHECK命令查看过时信息。
   
configure retention policy clear;           ###clear将恢复默认的保持策略

configure retention policy to none;         ###none可以把使备份保持策略失效,此时REPORT OBSOLETE和DELETE OBSOLETE将不把任何备份文件视为废弃
   
configure retention policy to recovery window of 7 days;        ###recover window是保持所有足够的备份,可以将数据库系统恢复到最近七天内的任意时刻。任何超过最近七天的数据库备份将被标记为 obsolete。七天之内没有备份的话,就不可以恢复了

2)备份优化(backup optimization)

sql 复制代码
configure backup optimization on;       ###默认值为关闭,如果打开,rman 将对备份的数据文件及归档等文件进行一种优化的算法。如果开启,假如表空间为只读模式,在第一次进行备份,以后会跳过只读的备份,减少没必要的备份,提升备份速度。
     
configure backup optimization clear;     ###clear将恢复默认的保持策略

3)默认设备(default device type)

sql 复制代码
configure default device type to disk; 
   
configure default device type to stb;      ###配置默认备份设备可以是 sbt(磁带),disk(硬盘);默认是硬盘
   
configure default device type clear; 

4)控制文件(controlfile autobackup)

sql 复制代码
configure controlfile autobackup on;        ###配置在备份的时候是否将控制文件一并备份默认是 off 不备份,也可以是 on 备份
    
configure controlfile autobackup format for device type disk to '/oracle/backup/conf_%F';   ###配置 control file自动备份的路径和文件格式
     
configure controlfile autobackup clear;    ###clear将恢复默认的保持策略

5)快照控制文件( SNAPSHOT CONTROLFILE )

sql 复制代码
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/oracle/backup/scontrofile.snp';     ###配置RMAN 备份时的快照控制文件的位置。快照控制文件(snapshot control file)是 RMAN 在进行备份时创建的一个临时性的控制文件副本,用于记录备份操作的元数据信息。每次进行备份时,RMAN 都会生成一个新的快照控制文件,并在备份完成后自动删除。因此不需要担心每次备份都会生成新的snapcf_orcl.f'文件,因为这个文件只是一个临时的副本,其目的是为了确保备份的一致性和完整性。RMAN 会自动管理这个过程,包括创建和清理快照控制文件,只需关注备份策略和相关的配置即可。
   
configure snapshot controlfile name clear;      ###clear将恢复默认的保持策略

6)并行数(通道数) device type disk|stb pallelism n

sql 复制代码
configure device type disk | stb parallelism 2; 
  
configure device type disk | stb clear;                      ###clear将恢复默认的保持策略
  
configure channel device type disk format '/oracle/backup/rman_%u';
 
configure channel device type disk maxpiecesize 100m;
  
configure channel device type disk rate 1200k; 
  
configure channel 1 device type disk format '/oracle/backup/rman_%u'; 
  
configure channel 2 device type disk format '/oracle/backup/rman_%u'; 
   
configure channel 1 device type disk maxpiecesize 100m;     ###配置数据库设备类型的并行度

7)排除选项(exclude)

sql 复制代码
configure exclude for tablespace tablespace_name;          ###此命令用于将指定的表空间不备份到备份集中, 此命令对只读表空间是非常有用的。
    
configure exclude for tablespace tablespace_name clear; 

1.8 rman常用命令之set( 定义或更改当前RMAN会话的某些设置****)****

在Oracle的RMAN(Recovery Manager)中,SET命令用于定义或更改当前RMAN会话的某些设置。这些设置通常影响RMAN命令的行为或输出,但它们不是永久性的,仅在当前RMAN会话中有效。注意:set命令的这个选项需要在运行块中使用,不然会报RMAN-03031

1)定义基于时间点的恢复

sql 复制代码
RMAN> 
run{
set until time "to_date('2020-05-12 03:54:11','yyyy-mm-dd hh24:mi:ss')";
}

2)定义基于scn的恢复

sql 复制代码
RMAN> 
run{
set until scn	 1352418;
}

3)定义归档日志的新路径,并恢复10天

sql 复制代码
RMAN> 
run{
set archivelog destination to '/oracle/app/oracle/archive';
restore archivelog from time 'sysdate-10';
}

4)定义数据文件、日志组、临时文件的新路径(undo属于set newname for datafile)

sql 复制代码
RMAN> 
run
{
set newname for datafile '/oracle/system01.dbf' to '/oradata/system01.dbf';      ###设置还原数据文件的新路径
set newname for tempfile 1 to '+data';        ###设置还原临时文件的新路径
set newname for logfile 2 to '+data';         ###设置还原日志组文件的新路径(不能恢复,待研究)
restore database;        ###还原数据库
switch datafile all;     ###通知控制文件将已发出SET NEWNAME for DATAFILE命令的所有数据文件切换为其新名称
}

1.9 rman常用命令之crosscheck(交叉效验RMAN备份)

在Oracle的RMAN(Recovery Manager)中,CROSSCHECK命令用于核对磁盘和磁带上的备份文件,以确保RMAN资料库与备份文件保持同步。这个命令会检查RMAN资料库所记载的备份文件,并验证这些文件在物理存储介质上的实际状态。每个备份集或副本的状态码。 在不同的备份状态码中,分为两种状态:

(1)A(Available:可用):RMAN认定该项存在于备份介质上

(2)X(Expired:不可用):这个备份集片或副本上存储的 RMAN 目录(即控制文件或恢复目录)中,但是并没有物理存在于备份介质上

1)验证所有备份集

sql 复制代码
RMAN> crosscheck backup;     

2)验证归档备份集

sql 复制代码
RMAN> crosscheck archivelog all;  

1.10 rman常用命令之validate(查看给定的备份集和进行验证以确保这个备份集能够被还原)

在Oracle的RMAN(Recovery Manager)中,VALIDATE命令用于验证备份集、数据文件或归档日志文件的完整性和可恢复性。这个命令会检查数据文件或备份文件中的块是否有物理损坏或逻辑损坏,确保它们在需要时可以成功恢复。

1)验证备份

sql 复制代码
RMAN> backup validate database;    
###扫描数据库的物理/逻辑错误,并不执行实际备份,如果有坏块会报出来。验证每个数据文件,status为FAILED,Blocks Failing(坏块)有内容需要先dbv验证坏块编号,然后rman修复坏块

File  Status  Marked Corrupt  Empty Blocks  Blocks Examined  High SCN
----   ------    --------------       ------------      ---------------     ----------
4    FAILED      0             4797         26249        1620953   
  File Name: /oracle/app/oracle/oradata/orcl/users.294.1048669455
  Block Type  Blocks Failing  Blocks Processed
  ----------      --------------     ----------------
  Data          1             15587           
  Index         0              2210            
  Other         0              3646 

2)验证备份片,验证之前使用list backup summary查看key值 (validate 命令必须要获得主键ID。这个可以用 list backup summary命令获取)

sql 复制代码
RMAN> validate backupset 8;  

1.11 rman常用命令之Switch( 更新数据文件、表空间、数据库或临时文件在控制文件中的位置信息****)****

在Oracle的RMAN(Recovery Manager)中,SWITCH命令用于更新数据文件、表空间、数据库或临时文件在控制文件中的位置信息,以反映它们的新位置。这通常在移动或替换数据文件后使用,以确保RMAN和Oracle数据库知道数据文件的新位置。

1)通知控制文件 将已发出SET NEWNAME for DATAFILE命令的所有数据文件切换为其新名称

sql 复制代码
RMAN>switch datafile all;  

2)通知控制文件中数据文件位置的新路径

sql 复制代码
RMAN>switch database to copy; 

1.12 rman常用命令之blockrecover(通过RMAN备份修复坏块)

在Oracle的RMAN(Recovery Manager)中,BLOCKRECOVER命令用于恢复单个或多个数据块,而不需要恢复整个数据文件或数据库。这在某些情况下非常有用,特别是当只有少量数据块受到损坏时。那么出现数据块错误时,都会有错误消息:ORA-01578: ORACLE data block corrupted (file #18,block #88) 。

如果没有BMR时,我们必须从一个备份中恢复这个数据文件,在恢复过程中,用户不能使用该数据块文件中的所有数据。用BMR恢复就很简单,只需要执行blockrecover命令即可。

如果在备份时提示ORA-19566: exceeded limit of 0 corrupt blocks for file +DATA01/orcl/datafile/system.256.1038007655那么表示有坏块,需要修复

bash 复制代码
[oracle@lf01 backup]$ dbv userid=sys/123456 file=+DATA01/orcl/file/system.256.1038007655
Total Pages Marked Corrupt   : 2          已标记为损坏的页面总数。文件中有两个坏块
sql 复制代码
RMAN>blockrecover datafile 1 block 45574,45575;      ###从备份中恢复多个数据文件坏掉的块

1.13 rman常用命令之catalog(将未识别的RMAN备份集注册到控制文件)

在Oracle的RMAN(Recovery Manager)中,CATALOG命令用于将备份文件、归档日志、数据文件副本等添加到RMAN的资料库(repository)中,以便RMAN可以识别、跟踪和管理这些备份。当备份文件或归档日志被存放在RMAN不直接监控的位置(例如,通过操作系统命令手动备份或第三方备份工具创建的备份)时,CATALOG命令就显得尤为重要。

1)注册备份片:

sql 复制代码
RMAN>catalog backuppiece '/home/oracle/orcl_arch_89_1_1050358444';

2)注册归档:

sql 复制代码
RMAN> CATALOG ARCHIVELOG '/oracle/arch/1_6_105038.dbf', '/oracle/arch/1_25_104867.dbf';

3)注册目录 (多用于批量注册归档,也可以用于注册备份片):

sql 复制代码
RMAN> CATALOG START WITH '/oracle/app/oracle/arch';

4)注册文件:

sql 复制代码
RMAN> catalog datafilecopy '/oracle/app/oracle/oradata/orcl/system.272.1048669455';  
RMAN> switch datafile 1 to copy;

5)注册整个恢复区:

sql 复制代码
RMAN> CATALOG RECOVERY AREA NOPROMPT;

1.14 rman常用命令之convert(对数据文件进行字节格式转换)

在Oracle的RMAN(Recovery Manager)中,CONVERT命令用于跨平台迁移整个数据库或数据库的一部分(如表空间、数据文件等)。这个命令特别有用,当你想将一个Oracle数据库从一个操作系统或硬件平台迁移到另一个平台时,而这两个平台可能具有不同的字节顺序、文件系统格式或其他特性。使用CONVERT命令进行跨平台迁移时,你需要确保源平台和目标平台之间的Oracle版本是兼容的。此外,如果两个平台具有不同的字节顺序(例如,一个大端字节序平台到一个小端字节序平台),RMAN将自动处理数据转换。

1) ****使用convert datafile完成ASM和本地文件系统间的拷贝 (只做拷贝,不会通知控制文件设置为新的路径):

虽然convert这个命令主要用于跨平台传输表空间,但它也可以完成ASM和本地文件系统间拷贝文件,并且是不会通知控制文件设置为新的路径,只做拷贝。

convert datafile完成ASM和本地文件系统间的拷贝的案例可以参考我之前文章,这里就不再介绍啦!!!(直通车👉Oracle篇---数据文件在ASM磁盘和本地系统之间的互相拷贝_asm转换成本地文件-CSDN博客👈)


呼,目前已经14869个字了,用时2小时+,在此过程中,涉及了RMAN的14个主要命令类别,旨在为广大小伙伴提供一份详尽的rman工具命令参考指南。然而,必须承认的是,RMAN的命令远不止于此,它的广度远超过我的这篇文章所能涵盖的范围。因此,尽管我已经尽力将所知的内容呈现给大家,但难免会有所遗漏或不足。

在此,诚挚地邀请各位经常使用RMAN工具,并熟悉其他未在本文中提及的命令的小伙伴们,不吝赐教,各位的每一个建议、每一个补充,都将为我们这篇文章的完善提供极大的帮助。那么各位我们下篇全库备份策略见!

相关推荐
热爱嵌入式的小许5 小时前
Linux基础项目开发1:量产工具——显示系统
linux·运维·服务器·韦东山量产工具
vvvae12348 小时前
分布式数据库
数据库
雪域迷影8 小时前
PostgreSQL Docker Error – 5432: 地址已被占用
数据库·docker·postgresql
bug菌¹9 小时前
滚雪球学Oracle[4.2讲]:PL/SQL基础语法
数据库·oracle
逸巽散人9 小时前
SQL基础教程
数据库·sql·oracle
月空MoonSky9 小时前
Oracle中TRUNC()函数详解
数据库·sql·oracle
momo小菜pa9 小时前
【MySQL 06】表的增删查改
数据库·mysql
Pythonliu710 小时前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
你疯了抱抱我10 小时前
【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)
linux·运维·centos
向上的车轮10 小时前
Django学习笔记二:数据库操作详解
数据库·django