

在客户的测试机器上对备份进行恢复演练,其中灾难性演练是指存储故障或其他原因导致数据库相关所有的数据文件丢失或损坏无法修复,必须通过备份还原的方式进行还原。以下是在测试机器上模拟丢失所有数据文件后通过备份还原的操作。

1、查看数据库的版本及数据库文件信息

2、配置备份策略,设置自动备份控制文件和参数文件及备份的格式。控制文件名格式须包含%F,%F格式中包含了数据库的ID信息。

3、手工输入或者提前准备好全备的脚本,通过备份日志可以看到哪些数据文件被备份,备份是否成功。
RMAN> run {
2> allocatechannel ch1 device type disk;
3> backup ascompressed backupset
4>incremental level 0
5> databaseplus archivelog delete input
6>format='/home/oracle/backup/Full_%d_%U.bak' tag='Full_bak';
7> releasechannel ch1;
8> }
allocatedchannel: ch1
channel ch1:SID=16 device type=DISK
Starting backupat 18-JAN-16
current logarchived
channel ch1:starting compressed archived log backup set
channel ch1:specifying archived log(s) in backup set
input archivedlog thread=1 sequence=5 RECID=1 STAMP=901445176
channel ch1:starting piece 1 at 18-JAN-16
channel ch1:finished piece 1 at 18-JAN-16
piecehandle=/home/oracle/backup/Full_SOURCE_01qrltho_1_1.bak tag=FULL_BAK comment=NONE
channel ch1:backup set complete, elapsed time: 00:00:01
channel ch1:deleting archived log(s)
archived logfile name=/u01/app/oracle/product/11.2.0/db_1/dbs/arch1_5_896186889.dbf RECID=1STAMP=901445176
Finished backupat 18-JAN-16
Starting backupat 18-JAN-16
channel ch1:starting compressed incremental level 0 datafile backup set
channel ch1:specifying datafile(s) in backup set
input datafilefile number=00005 name=/u01/app/oracle/oradata/source/rosan01.dbf
input datafilefile number=00001 name=/u01/app/oracle/oradata/source/system01.dbf
input datafilefile number=00002 name=/u01/app/oracle/oradata/source/sysaux01.dbf
input datafilefile number=00003 name=/u01/app/oracle/oradata/source/undotbs01.dbf
input datafilefile number=00004 name=/u01/app/oracle/oradata/source/users01.dbf
channel ch1:starting piece 1 at 18-JAN-16
channel ch1:finished piece 1 at 18-JAN-16
piecehandle=/u01/app/oracle/product/11.2.0/db_1/dbs/02qrlthq_1_1tag=TAG20160118T092617 comment=NONE
channel ch1:backup set complete, elapsed time: 00:00:35
Finished backupat 18-JAN-16
Starting backupat 18-JAN-16
current logarchived
channel ch1:starting compressed archived log backup set
channel ch1:specifying archived log(s) in backup set
input archivedlog thread=1 sequence=6 RECID=2 STAMP=901445213
channel ch1:starting piece 1 at 18-JAN-16
channel ch1:finished piece 1 at 18-JAN-16
piecehandle=/home/oracle/backup/Full_SOURCE_03qrltit_1_1.bak tag=FULL_BAKcomment=NONE
channel ch1:backup set complete, elapsed time: 00:00:01
channel ch1:deleting archived log(s)
archived logfile name=/u01/app/oracle/product/11.2.0/db_1/dbs/arch1_6_896186889.dbf RECID=2STAMP=901445213
Finished backupat 18-JAN-16
StartingControl File and SPFILE Autobackup at 18-JAN-16
piecehandle=/home/oracle/backup/ctl_c-3014547526-20160118-00_SOURCE.bak comment=NONE
FinishedControl File and SPFILE Autobackup at 18-JAN-16
releasedchannel: ch1
4、模拟数据库相关文件的丢失,删除所有数据库相关文件
[oracle@sourcesource]$ rm -fr control0*.ctl
[oracle@sourcesource]$ rm -fr redo0*.log
[oracle@sourcesource]$ rm -fr sys*.dbf
[oracle@sourcesource]$ rm -fr temp01.dbf
[oracle@sourcesource]$ rm -fr undotbs01.dbf
[oracle@sourcesource]$ rm -fr users01.dbf
[oracle@sourcesource]$ rm -fr rosan01.dbf
[oracle@sourcesource]$ rm u01/app/oracle/product/11.2.0/db_1/dbs/spfilesource.ora
[oracle@sourcesource]$ ls
5、在模拟数据库相关文件丢失后,试着去打开数据库,发现数据库只能到nomount状态,并且提示找不到控制文件信息。通过rman恢复管理器,根据数据启动时会先找spfile文件,首先对spfile文件进行还原,其次再对控制文件进行还原。还原成功后,试着将库启动到mount状态下。


6、查看备份文件和归档日志文件的备份信息,确定可以恢复到最大的归档序列号。


7、通过上面可以看到最大可恢复到序列号为6,通过设置until sequence的方式应用所有归档日志来恢复数据库。

8、恢复完成后,查看下数据库相关文件的信息以及状态,通过alter database open resetlogs方式开启数据库。查看之前创建的rosan用户下的表的数据情况。此时数据库已经恢复成功



数据库备份恢复演练是日常工作中非常重要的一部分,可以及时的发现自己备份的情况以及备份的有效性,避免了灾难发生时抓瞎的情况发生。还有就是不同恢复因环境和错误不同采用的恢复方式不同。在完成了恢复后,一定要及时的对数据库进行备份。







