使用RMAN备份与恢复数据库

时间:2024-03-02 17:40:20

一、备份信息

1.1、列出备份信息

列出数据库中所有文件的备份信息:

RMAN>LIST BACKUP OF DATABASE;

列出指定表空间的备份信息:

RMAN>LIST BACKUP OF TABLESPACE SYSTEM;

列出指定数据文件的备份信息:

RMAN>LIST BACKUP OF DATAFILE 4;

列出归档日志的备份信息:

RMAN>LIST BACKUP OF ARCHIVELOG ALL;

1.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 \'/home/backup/DEMO_19.bak\';

6.删除所有备份集

RMAN> delete backup;

7.删除特定映像副本

RMAN> delete datafilecopy \'/home/backup/DEMO_19.bak\';

8.删除所有映像副本

RMAN> delete copy;

9.在备份后删除输入对象

RMAN> delete archivelog all delete input;
RMAN> delete backupset 22 format = \'/home/backup/%u.bak\' delete input;

二、指令运行方式

2.1、批处理

RMAN>run{
......
......
}

2.2、运行脚本

[oracle@node1~]$ RMAN TARGET / @backup_db.rman

运行存储在恢复目录中的脚本(需要首先为rman 创建恢复目录)

RMAN> RUN { EXECUTE SCRIPT backup_whole_db };

2.3、操作系统脚本

[oracle@node1 ~]$rman target / cmdfile=/home/backup_db.rman

三、增量备份的机制

所谓增量备份,顾名思义即是每次备份仅操作那些发生了"变化"的数据块。RMAN 中增量备份有两种:Differential 方式和Cumulative 方式。

3.1、差异备份Differential ( DEFUALT )

备份上级及同级以来所有变化的数据块

3.2、累积增量备份Cumulative

备份上级以来所有变化的数据块

所有增量备份要以0级备份为基础,0级备份指对数据库做全备。

0 级备份和全库备份的区别:

1)全库备份不能作为1 级备份的基础

2)全库备份会对unused 数据库做备份

0 级备份

RMAN>backup incremental level 0 database;

1 级差异增量

RMAN>backup incremental level 1 database;

1 级累积增量

RMAN>backup incremental level 1 cumulative database;

四、备份数据库命令

 4.1、对数据库全备

RMAN>backup database;

执行上述命令后将对目标数据库中的所有数据文件进行备份,由于没有显式指定FORMAT 参数,rman 会自动为每个备份片段命名。

当然,也可以通过显式指定format 参数来自定义备份片段的命令规则,比如:

RMAN> BACKUP DATABASE FORMAT \'/home/backup/%U\';

全备数据库的同时可以包含控制文件,比如:

RMAN> BACKUP DATABASE FORMAT \'/home/backup/%U\' include current controlfile;

4.2、备份表空间

RMAN> backup tablespace users;

4.3、备份数据文件

首先可以先通过数据字典DBA_DATA_FILES 查询出表空间对应的数据文件及其序号,例如:

select file_name,file_id,tablespace_name from dba_data_files;

然后再通过BACKUP DATAFILE 备份指定序号的数据文件,例如:

RMAN> BACKUP DATAFILE n;

注:n=指定的的数据文件序号,如果需要备份的数据文件有多个, n=多个序号,中间以逗号分隔即可。

4.4、备份控制文件

控制文件在ORACLE 中的重要性是毋庸置疑的,你看,连RMAN 都给予特殊的照顾,在RMAN 中备份控制文件的方式是最多的。

1.最简单的方式,通过CONFIGURE 命令将CONTROLFILE AUTOBACKUP 置为ON。

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;

然后你再通过rman 做任何备份操作的同时,都会自动对控制文件做备份。

2.对编号为1 的数据文件,即SYSTEM 表空间的数据文件做备份时,RMAN 也会自动对控制文件做备份。

3.手动执行备份命令。

RMAN> BACKUP CURRENT CONTROLFILE;

4.执行BACKUP 时指定INCLUDE CURRENT CONTROLFILE 参数,例如:

RMAN> BACKUP DATABASE INCLUDE CURRENT CONTROLFILE;

4.5、备份归档日志

归档日志对于数据库介质恢复相当关键,其虽然不像控制文件那样一旦损坏则数据库马上崩溃,但重要性丝毫不减。归档日志文件能确保我们将数据库恢复到备份之前的任意时刻。

在RMAN 中备份归档日志有两种方式:

1、利用BACKUP ARCHIVELOG 命令备份

RMAN> BACKUP ARCHIVELOG ALL;

2、在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 提供了DELETE ALL INPUT 参数,加在BACKUP 命令后,则会在完成备份后自动删除归档目录中已备份的归档日志。

RMAN> BACKUP DATABASE PLUS ARCHIVELOG DELETE ALL INPUT;

综述:比如查看备份基本都是LIST BACKUP OF 备份项名称,如果想自定义片段的话则在备份命令后加上FORMAT 参数。

五、恢复命令

5.1、数据库恢复

RMAN> restore/revover database;

5.2、表空间恢复

RMAN> restore/revover tablespace xx ;

5.3、只读表空间的恢复

默认情况下,即使丢失了只读的数据文件,RMAN 也不会在执行完全数据库还原操作时候还原只读的数据文件。要在完全恢复期间还原只读的数据文件,就必须在RESTORE命令中使用CHECK READONLY

RMAN> RESTORE DATABASE CHECK READONLY;

5.4、恢复SPFILE/控制文件

#使用自动备份恢复SPFILE/控制文件
RMAN> startup nomount;
RMAN> set dbid=153910023
RMAN> restore controlfile from autobackup
RMAN> restore spfile/controlfile to \'/xx/xx\' from autobackup ;
或
RMAN> restore controlfile from \'/arch/ct_c-2347671489-20060630-00\';

5.5、恢复归档日志

RMAN> RESTORE ARCHIVELOG ALL;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1 UNTIL LOGSEQ=20;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1;

也可以用SET命令来指定归档日志的还原位置,例如:

RMAN> run{
set archivelog destination to "/home/backup/";
restore archivelog all;
}

5.6、数据文件副本还原

RMAN> sql "alter datafile 5 offline";
RMAN> restore (datafile 5) from datafilecopy;
RMAN> recover datafile 5;
RMAN> sql "alter datafile 5 online";

请注意,上面的圆括号很重要

5.7、还原检查与恢复测试

与备份检查一样,还原操作也可以检查是否能正常restore 或者是否该备份集是否有效。如:

RMAN> RESTORE DATABASE VALIDATE;
RMAN> VALIDATE BACKUPSET 218;
RMAN> RESTORE DATABASE VALIDATE CHECK LOGICAL ;

5.8、从指定的tag 恢复

RMAN> RESTORE FROM tag=’xxxx’;

5.9、不完全恢复的还原:

RMAN> restore database until scn 1000;
RMAN>restore database "to_date(\'2005/08/01 13:00:00\',\'yyyy/mm/dd hh24:mi:ss\')";
RMAN> restore database until sequence 100 thread 1;

5.10、块级别的恢复

恢复块的时候,必须指定具体的块号,如:

RMAN> blockrecover datafile 6 block 3;