使用RMAN备份与恢复数据库
一、备份信息
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;