- 论坛徽章:
- 0
|
一、在使用rman备份之前,首先确保数据库已经打开archivelog模式。
二、设置备份参数:
sqlplus /nolog
SQL>shutdown immediate
SQL>startup mount
SQL>alter database archivelog;
SQL>alter system set db_recovery_file_dest='/u02/backup';
SQL>alter database open;
//////////////////////////////////////////////////////////
rman>connect target
rman>CONFIGURE CONTROLFILE AUTOBACKUP ON;
rman>CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO COMPRESSED BACKUPSET;
rman>CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u02/backup/tcydb.ctl';
上面打开了压缩备份方式,默认情况下不压缩,占用的空间很大。
三、备份数据库
rman>backup full tag 'db_full' database format '/u02/backup/tcydb_full_%s.bkp' include current controlfile plus archivelog;
四、模拟数据库损坏
cd /u01/app/oracle/oradata/tcydb
rm -f *
五、从备份恢复
(1)恢复控制文件
SQL>startup nomount
RMAN>restore controlfile from autobackup;
(2)恢复数据文件
编辑SQL脚本,保存为datafile.sql:
DECLARE
devtype VARCHAR2(100);
done BOOLEAN;
BEGIN
devtype := DBMS_BACKUP_RESTORE.deviceAllocate(type=>NULL, ident=>'d1');
DBMS_BACKUP_RESTORE.restoreSetDataFile;
dbms_backup_restore.restoreDatafileTo(dfnumber=>1,toname=>'/u01/app/oracle/oradata/hdoadb/system01.dbf');
dbms_backup_restore.restoreDatafileTo(dfnumber=>2,toname=>'/u01/app/oracle/oradata/hdoadb/undotbs01.dbf');
dbms_backup_restore.restoreDatafileTo(dfnumber=>3,toname=>'/u01/app/oracle/oradata/hdoadb/sysaux01.dbf');
dbms_backup_restore.restoreDatafileTo(dfnumber=>4,toname=>'/u01/app/oracle/oradata/hdoadb/users01.dbf');
dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'/u02/backup/tcydb_full_8.bkp' , params=>null);
DBMS_BACKUP_RESTORE.deviceDeAllocate('d1');
END;
/
在sqlplus中执行:
SQL>@/u02/datafile.sql
恢复完数据文件之后:
SQL>shutdown immediate
SQL>startup mount
(3)使用rman恢复备份集
RMAN>connect target
RMAN>restore database;
RMAN>recover database;
(4)这时候redolog已经不存在,需要resetlog
SQL>alter database open RESETLOGS;
至此,数据库恢复完成。
六、注意事项
使用sql脚本恢复控制文件的前提是使用spfile启动到nomount状态。spfile记录了重要的文件路径,rman需要从这些路径寻找控制文件的自动备份集。
rman备份的东西是不完整的,它只备份spfile,controlfile,archivelog,datafile,其他的文件需要手工归档。
[ 本帖最后由 kde2000 于 2007-4-5 17:00 编辑 ] |
|