Rman 常用命令
RMAN(Recovery Manager)是一种用于备份(backup)、还原(restore)和恢复(recover)数据库的 Oracle 工具。RMAN只能用于ORACLE8或更高的版本中。

%d  --数据库的db_name
%n  --数据库的8位长度的db_name,不足部分用“x”后面填充
%N  --数据库表空间的name
%I  --数据库的dbid
%T  --年月日(YYYYMMDD) == %Y%M%D
%t  --9位字符的timestamp
%s  --备份集序号
%p  --备份片序号
%c  --备份片的多个copy的序号
%e  --archived redo file 的序列号,只能用在archived redo 上
%f  --datafile filenmuber,只能用在备份datafile、tablespace上,否则没有意义
%F  --复合format == c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII为dbid,YYYYMMDD为年月日,QQ为十六进制的备份片的多个copy的序号(00-ff)。tmd,oracle竟然提示错误!
%u  --8为字母唯一串
%U  --复合format ==
为了防止建立备份集错误匹配符%s是必顺的;如果要建立多个备份片文件,则匹配符%p是必顺的;如果要建立多个备份片副本,则匹配符%c是必顺的.

SQL> show parameter control_file_record_keep_time
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 2;

===========================================================================================================

备份

一.免除表空间:

RMAN>configure exclude for tablespace ts_name; //设定在备份数据库的时候排除ts_name;

二.表空间备份集(只适用于archivelog):

RMAN>backup tablespace ts_name format=’/opt/oracle/rmanbak/%n_%s.pdf’;
RMAN> run{
2> allocate channel d1 type disk format '/u01/app/oracle/oradata/bak/ccc_%s_%p.cccs';
3> backup tablespace lx_db02 filesperset 3;
4> }

三.备份数据文件:

RMAN>backup datafile 5 format=’/opt/oracle/rmanbak/%n_%f_%s.dbf’;
run{
allocate channel d1 type disk;
backup datafile 4 format '/u01/app/oracle/oradata/bak/db02_%s_%p.chen';
backup datafile 5 format '/u01/app/oracle/oradata/bak/db02_%s_%p.chen';
backup datafile 6 format '/u01/app/oracle/oradata/bak/db02_%s_%p.chen';
上一条命令可以简写:
run{
allocate channel d1 type disk format '/u01/app/oracle/oradata/bak/db02_%s_%p.chen';
backup datafile 4;
backup datafile 5;
backup datafile 6;

四.备份当前控制文件:

RMAN>backup current controlfile format=’/opt/oracle/rmanbak/%d_%s.ctl’

在备份其它数据文件时,同时备份控制文件
RMAN>backup datafile 5 format=’/opt/oracle/rmanbak/%n_%f_%s.dbf’ include current controlfile;
RMAN> run{
2> allocate channel d1 type disk format '/u01/app/oracle/oradata/bak/db_%s_%p.qqq';
3> backup current controlfile;
4> }

五.备份参数文件:

RMAN>backup spfile format=’/opt/oracle/rmanbak/%d_%s.par’;

六.备份归档文件:

RMAN> backup archivelog all;
RMAN> backup …… plus archivelog; // 在备份其他时同时备份归档日志
RMAN> backup database plus archivelog
在备份数据库的同时自动对所有归档文件进行备份。
这种方式与上种有什么区别呢,区别太明显了,
BACKUP.....PLUS ARCHIVELOG命令在备份过程中会依次执行下列步骤:
1>.运行ALTER SYSTEM ARCHIVE LOG CURRENT语句对当前redolog进行归档。
2>.执行BACKUP ARCHIVELOG ALL命令备份所有已归档日志。
3>.执行BACKUP命令对指定项进行备份。
4>.再次运行ALTER SYSTEM ARCHIVE LOG CURRENT对当前redolog归档。
5>.对新生成的尚未备份的归档文件进行备份。

RMAN备份归档日志的注意要点
backup incremental level 1 database format '/backup/osedb_osedb01/data/%d_DF_%T_%s_%p.bak'
plus archivelog format '/backup/osedb_osedb01/arch/%d_AF_%T_%s_%p.log' all delete all input;

delete input和delete all input的区别
(1)如果归档日志目录只是一个时,即归档时只有一份归档日志时,上面的两种写法是没有区别的;
(2)如果归档日志目录有多个时,即归档时保存有多份归档日志时,那么:
delete input当备份了归档日志后,会删除第一个归档目录(如:log_archive_dest_1)下的所有归档日志;
delete all input则在备份了归档日志后,所有所有log_archive_dest_n中的备份的archivelog都会被删除。

backup database plus archivelog delete all input;

而使用all delete all input是直接专门对数据库归档日志进行备份时使用,如:
backup archivelog all delete all input;

可以用 RMAN的 plus archvielog 选项简化数据库备份:
backup database format '/xxfull%d_%T_%s' plus archivelog format '/xx/arch_%d_%T_%s' delete all input;

七.copy 备份:

RMAN> run{
2> allocate channel d1 type disk;
3> copy datafile 5 to '/u01/app/oracle/oradata/bak/lx_dd01.dbf';
4> }

RMAN> run
2> {
3> allocate channel d1 type disk;
4> copy archivelog '/home/oracle/db02_archive1/db02_1851001130_11.arc' to '/u01/app/oracle/oradata/db_archive01.arc';
5> }

RMAN> run{
2> allocate channel d1 type disk;
3> copy current controlfile to '/u01/app/oracle/oradata/bak/control01.ctl';
4> }

RMAN> run{
2> allocate channel d1 type disk;
3> allocate channel d2 type disk;
4> copy datafile 5 to '/u01/app/oracle/oradata/bak/lx_02.dbf';
5> copy current controlfile to '/u01/app/oracle/oradata/bak/control2.ctl';
6> }

八.级别备份:

run{
allocate channel d1 type disk format '/u01/app/oracle/oradata/bak/db_%s_%p.bus01';
backup incremental level 0 database filesperset 3;
}

run{
allocate channel d1 type disk format '/u01/app/oracle/oradata/bak/db_%s_%p.bus01';
backup incremental level 1 database filesperset 3;
}

rman target / nocatalog log=$LOGDIR/rman$DD.log <
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
backup full database format '$BAKDIR/db_full_%T_%u.bak' tag='full' include current controlfile;
sql 'alter system archive log current';
backup archivelog all format '$BAKDIR/arc_%T_%u.bak' delete all input;
release channel c1;
release channel c2;
}
crosscheck backup;
crosscheck copy;
delete noprompt expired backup;
delete noprompt expired copy;
delete noprompt obsolete;
DELETE NOPROMPT OBSOLETE RECOVERY WINDOW OF 7 DAYS;
EOF

修改备份集的保存策略:
将备份设置为永久有效
RMAN> backup database keep forever logs|nologs;

设置为有效期180天
RMAN> backup database keep until time='sysdate+180';
重写configure exclude / noexclude通过 configure exclude 可以配置 RMAN 不备份上次备份以来没有发生变化的数据文件。

如果要确保 RMAN备份这些数据文件,可以在 backup命令中添加 noexclude 选项。
例如:RMAN> backup database noexclude;
跳过脱机的、不可存取的或者只读的数据文件
RMAN> backup database skip offline skipinaccessible skipreadonly;

强制备份只读的数据文件
RMAN> backup database force;

备份指定周期内没有备份的数据文件
RMAN> backup database not backed up;
RMAN> backup database not backed up since time='sysdate-2';

在备份操作期间检查逻辑讹误
RMAN> backup check logical database;

在检查逻辑错误的同时进行备份
RMAN> backup validate check logical database;

只检查建立压缩备份集
RMAN> backup as compressed backupset tablespace users FORMAT='D:BACKUP%d_%s.dbf';

备份两天来的归档:
RMAN> backup archivelog from time='sysdate-2' [to time=‘xxx’] ;
备份从 sequence 1 开始的归档:
RMAN> backup archivelog from sequence 1[to sequence =‘n];
备份没有三次备份的归档:
RMAN> backup archivelog not backed up 3 times;

==================================

恢复

一 数据文件

RMAN>run{
allocate channel d1 type disk;
restore datafile 4;
recover datafile 4;
}

二 表空间

RMAN>run{
allocate channel d1 type disk;
restore tablespace app_data;
recover tablespace app_data;
}

三 控制文件,参数文件

使用自动备份进行恢复:
RMAN> restore spfile/controlfile to '/xx/xx' from autobackup;
RMAN> restore spfile/controlfile to '/xx/xx' from '///';

四 基于时间恢复

RMAN> run{
2> allocate channel t1 type disk;
3> set until time "to_date('2015-07-08 11:12:00','yyyy-mm-dd hh24:mi:ss')";
4> restore database;
5> recover database;
6> }
或者
restore database "to_date('2005/08/01 13:00:00','yyyy/mm/dd hh24:mi:ss')";
recover database "to_date('2005/08/01 13:00:00','yyyy/mm/dd hh24:mi:ss')";

五 基于取消恢复

[oracle@ogg1 ~]$ rman target / nocatalog
RMAN> restore controlfile from autobackup;
RMAN> recover database using backup controlfile until cancel;
cancel
RMAN> list incarnation;

六 基于SCN

确定恢复的SCN
SQL>SELECT CURRENT_SCN FROM V$DATABASE;
RMAN>run{
2>startup force mount;
3>set until scn=n; //设置还原点SCN
4>restore database;
5>recover database;
6>sql ‘alter database open resetlogs’;
7>}

七 基于日志序列的恢复

RMAN 允许用户将数据库恢复到指定的归档重做日志序列号。
如果归档的重做日志中有间隙(某个归档日志文件或备份损坏或丢失) ,使用这种方法就很方便。
间隙通常意味着我们只能将数据库还原到间隙开始的地方。
SQL> startup mount;
RMAN> restore database until sequence 100 thread 1;——not include 100
RMAN> recover database until sequence 100 thread 1;
SQL> alter database open resetlogs;

RMAN> RUN {
2> SET UNTIL SEQUENCE 120 THREAD 1;
4> RESTORE DATABASE;
5> RECOVER DATABASE;——recovers through log 119 not include 120
6> ALTER DATABASE OPEN RESESTLOGS;
7> }

八 基于日志号

当不能定位日志号的归档日志时会出现以下错误:
Rman-06025:no backup of log thread 1 seq 6 lowscn 531976 found to restore
RMAN>run{
2>startup force mount;
3>set until sequence=n; //日志号通常为不能定位的日志号
4>restore database;
5>recover database;
6>sql ‘alter database open resetlogs’;
7>}

九 基于更改恢复目录的恢复

RMAN> run{
2> allocate channel d1 type disk;
3> set newname for datafile 5 to '/u01/app/oracle/oradata/tbs/lx_dbccc.dbf';
4> restore tablespace lx_db02;
5> switch datafile 5; --------更改控制文件的结构
6> recover tablespace lx_db02;
7> }

如果有多个文件可以写成switch datafile all;

不完全恢复后建议删除早期的所有备份并重新备份
RMAN>run{
2>delete noprompt backup;
3>delete noprompt copy;
4>backup database format=’/opt/ora_bak/%d_%s.pdf’;
5>sql ‘alter system archive log current’;}

=========================================================================

SELECT 查询备份信息

select * from v$archived_log;
select * from v$backup_datafile;
select * from v$backup_piece;
select * from v$backup_datafile_details;
select * from v$backup_piece_details;
select * from v$backup_redolog;
---V$BACKUP_CORRUPTION:显示在执行BACKUP命令时所检测到的损坏数据块信息。
select file#,block#,blocks,marked_corrupt from v$backup_corruption;
V$RECOVER_FILE可以确定需要恢复的数据文件
SQL>SELECT file#,error from v$recover_file;
查看坏块的信息
SQL> desc v$copy_corruption 映像集
SQL> desc v$backup_corruption 备份集

List

List 命令是一种在数据库控制文件 或者恢复目录中查询备份的历史信息的方法。 List提供了一组信息,可以提供各种备份的信息,如对应物、备份集、归档日志备份、控 制文件备份等等。
列出对应物:RMAN> list incarnation;
列出备份概要信息:RMAN> list backup summary;
按备份类型列出备份:RMAN> list backup by file;
获得备份的详细信息,包括备份片的物理文件名:RMAN> list backup; RMAN> list backupset bs#;
或者按照TAG 来查:RMAN> list backup tag=tab_number;
列出过期的备份:RMAN> list expired backup;
按照表空间和数据文件来列出备份:列出USERS 表空间的备份:RMAN> list backup of tablespace USERS;
列出文件5的备份:RMAN> list backup of datafile 5;
列出文件 E:ORACLEUSERS.DB 的备份:RMAN> list backup of datafile ' E:ORAC LEUSERS.DB ';
列出控制文件的备份:RMAN> list backup of controlfile;
列出归档日志的备份:RMAN> list archivelog all;RMAN> list backup of archivelog all;
列出副本:
RMAN> list copy 列出所有的副本。
RMAN> list copy of controlfile 列出控制文件副本
RMAN> list copy of archivelog all 列出所有归档日志副本
RMAN> list copy of database 列出数据库所有数据文件的副本

Report

Report 命令被用于判断数据库的当前可恢复状态和提供数据库备份的特定信息,可以检测哪些文件需要备份,哪些备份能被删除以及那些文件能不能获得的信息。可以报 告数据库的所有能备份数据文件对象,包括数据文件名、文件号、表空间、文件大小、 是否含有回滚段等。
RMAN> report schema
或者
RMAN> REPORT SCHEMA AT TIME 'SYSDATE-14';
RMAN> REPORT SCHEMA AT SCN 1000;
RMAN> REPORT SCHEMA AT SEQUENCE 100 THREAD 1;
报告需要备份的数据文件
RMAN> report need backup [ redundancy | days | incremental n];
RMAN> report need backup redundancy 1;
报告过期了的数据文件或者不可用的备份与拷贝
RMAN> Report obsolete [orphan]
报告最近没有备份的数据文件
RMAN> report need backup days=10;// 恢复需要超过 10天的归档日志
RMAN> report need backup incremental=3; // 恢复时需要超过 3 增量的文件报表文件,增量名称8 15 E:ORACLEORADATAMING_RECOVERMINGDICT.DB 9 15 E:ORACLEORADATAMING_RECOVERMINGLOB.DB
这个报告中,列出的数据文件,在进行恢复的时候,需要从 3 个以上的增量备份文件中恢复。我们知道如果需要从很多文件中恢复,会影响恢复速度,可以根据情况来重新备份这些文件。
报告备份冗余或恢复窗口我们可以执行 report need backup redundancy 来确定为满足冗余备份策略而需要备份的 文件。
例如:RMAN> report need backup redundancy=2;// 文件冗余备份少于2个我们也可以按照恢复窗口来查找需要备份的文件。
比如我们要求恢复窗口小于2天,那么用下面的命令:
RMAN> report need backup recovery window of 2 days;//文件报表的恢复需要超过 2天的归档日志
这个命令等同于:report need backup days=2;

删除备份

1、删除陈旧备份
当使用RMAN执行备份操作时,RMAN会根据备份冗余策略确定陈旧备份。
RMAN> delete obsolete;

2、删除EXPIRED备份
执行crosscheck命令核对备份集,那么会将该备份集标记为EXPIRED状态。为了删除相应的备份记录,可以执行delete expired backup命令。
RMAN> delete expired backup;

3、删除EXPIRED副本
RMAN> delete expired copy;

4、删除特定备份集
RMAN> delete backupset 19;

5、删除特定备份片
RMAN> delete backuppiece 'd:backupDEMO_19.bak';

6、删除所有备份集
RMAN> delete backup;

7、删除特定映像副本
RMAN> delete datafilecopy 'd:backupDEMO_19.bak';

8、删除所有映像副本
RMAN> delete copy;

9、在备份后删除输入对象
RMAN> delete archivelog all delete input;
RMAN> delete backupset 22 format = ''d:backup%u.bak'' delete input;

转载自chenoracle

最后修改:2022 年 02 月 27 日
如果觉得我的文章对你有用,请随意赞赏