元旦期间帮一朋友恢复了套数据库, 情景是这样的,25号0时有做RMAN 0级备份含datafile和当时的archivelog,25号白天删除了一个非常重要的表空间, 现在需要恢复那个表空间,是一套单实例的11.1.0.6 的WINDOWS平台的数据库, 接手时只有上面的6个备份集文件(只有DATAFILE AND ARCHIVELOG)和软件,和当前的control file
no autobackup anywhere
no older controlfile available
no snapshot controlfile available
no redo log available
no backup logfiles
no “backup controlfile to trace” information
no DBID
no alert.log
因当前的控制文件不可用,online log不可用,处理思路如下
nomount 启动;
用DBMS_BACKUP_RESTORE抽数据文件;
编辑创建控制文件脚本;
创建控制文件;
catalog 备份集信息;
基于时间点恢复;
open resetlogs;
用当用的控制文件catalog 备份集后生成的备份文件列表(datafile number下面有用)
NOTE: 错误提示很明显,因为是nomount启动,需要指定输出路径,因为路径在control file中,当前没有加载control file. 猜测了6号文件就是我们要恢复的数据文件
上面我是新建的目录,把数据文件生成到了一个新目录,下面重建控制文件,注意增加了我们要恢复的表空间数据文件
重建控制文件成功,数据库可以mount, 下面就可以恢复数据库了
注册了备份信息到新的控制文件中,列出最大的arch 编号,恢复数据库成功,恢复控制文件也可以使用上面的SYS.DBMS_BACKUP_RESTORE包里提供的方法,最后因为当前online redo不可用,所以open resetlogs.成功打开数据库.
Summary:
备份非常的重要,前提是备份文件尽可能的保留完整有效,除了datafile和archivelog的备份文件,还有如备份时的logfile, 控制文件和spfile的自动备份文件同样应该保管好。
no autobackup anywhere
no older controlfile available
no snapshot controlfile available
no redo log available
no backup logfiles
no “backup controlfile to trace” information
no DBID
no alert.log
因当前的控制文件不可用,online log不可用,处理思路如下
nomount 启动;
用DBMS_BACKUP_RESTORE抽数据文件;
编辑创建控制文件脚本;
创建控制文件;
catalog 备份集信息;
基于时间点恢复;
open resetlogs;
用当用的控制文件catalog 备份集后生成的备份文件列表(datafile number下面有用)
BS 关键字 类型 LV 大小
------- ---- -- ----------
6 Full 1.06G
备份集 6 中的数据文件列表
文件 LV 类型 Ckp SCN Ckp 时间 名称
---- -- ---- ---------- ---------- ----
1 Full 10168874776976 25-12月-15 E:\\APP\\SYS-ADMIN\\ORADATA\\ORCL\\SYSTEM01.DBF
2 Full 10168874776976 25-12月-15 E:\\APP\\SYS-ADMIN\\ORADATA\\ORCL\\SYSAUX01.DBF
3 Full 10168874776976 25-12月-15
4 Full 10168874776976 25-12月-15 E:\\APP\\SYS-ADMIN\\ORADATA\\ORCL\\USERS01.DBF
5 Full 10168874776976 25-12月-15 E:\\APP\\SYS-ADMIN\\PRODUCT\\11.1.0\\DB_1\\ORADATA\\VSM.ORA
6 Full 10168874776976 25-12月-15
8 Full 10168874776976 25-12月-15 E:\\APP\\SYS-ADMIN\\PRODUCT\\11.1.0\\DB_1\\ORADATA\\GGS.ORA
备份集 副本号 1 属于备份集 6
设备类型 经过时间 完成时间 压缩标记
----------- ------------ ---------- ---------- ---
DISK 00:00:00 03-1月 -16 YES TAG20151225T000021
备份集 6 副本号 1的备份片段列表
BP 关键字 Pc# 状态 段名称
------- --- ----------- ----------
6 1 AVAILABLE D:\\RMAN_R\\RMAN_DB_ORCL_20151225_LCQPLJCL_1_1.RMAN
SQL>starup nomount
SQL>DECLARE
V_DEVICE VARCHAR2(100);
V_FINISH BOOLEAN;
TYPE T_FILENAMETABLE IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER;
V_FILENAMETABLE T_FILENAMETABLE;
V_MAXPIECES NUMBER :=1;
BEGIN
V_FILENAMETABLE(1) :='d:\\rman_r\\RMAN_DB_ORCL_20151225_LCQPLJCL_1_1.RMAN';
V_DEVICE := SYS.DBMS_BACKUP_RESTORE.DEVICEALLOCATE();
SYS.DBMS_BACKUP_RESTORE.RESTORESETDATAFILE;
SYS.DBMS_BACKUP_RESTORE.RESTOREDATAFILETO(1);
SYS.DBMS_BACKUP_RESTORE.RESTOREDATAFILETO(2);
SYS.DBMS_BACKUP_RESTORE.RESTOREDATAFILETO(3);
SYS.DBMS_BACKUP_RESTORE.RESTOREDATAFILETO(4);
SYS.DBMS_BACKUP_RESTORE.RESTOREDATAFILETO(5);
SYS.DBMS_BACKUP_RESTORE.RESTOREDATAFILETO(6);
SYS.DBMS_BACKUP_RESTORE.RESTOREDATAFILETO(8);
FOR I IN 1..V_MAXPIECES LOOP
SYS.DBMS_BACKUP_RESTORE.RESTOREBACKUPPIECE(V_FILENAMETABLE(I), V_FINISH);
IF V_FINISH THEN
SYS.DBMS_BACKUP_RESTORE.DEVICEDEALLOCATE;
RETURN;
END IF;
END LOOP;
SYS.DBMS_BACKUP_RESTORE.DEVICEDEALLOCATE;
END;
/
*
ERROR at line 1:
ORA-19624: operation failed, retry possible
ORA-19616: output file name must be specified if database not mounted
ORA-06512: at "SYS.X$DBMS_BACKUP_RESTORE", line 2071
ORA-06512: at "SYS.X$DBMS_BACKUP_RESTORE", line 2055
ORA-06512: at "SYS.X$DBMS_BACKUP_RESTORE", line 2047
ORA-06512: at line 11
NOTE: 错误提示很明显,因为是nomount启动,需要指定输出路径,因为路径在control file中,当前没有加载control file. 猜测了6号文件就是我们要恢复的数据文件
DECLARE
V_DEVICE VARCHAR2(100);
V_FINISH BOOLEAN;
TYPE T_FILENAMETABLE IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER;
V_FILENAMETABLE T_FILENAMETABLE;
V_MAXPIECES NUMBER :=1;
BEGIN
V_FILENAMETABLE(1) :='d:\\rman_r\\RMAN_DB_ORCL_20151225_LCQPLJCL_1_1.RMAN';
V_DEVICE := SYS.DBMS_BACKUP_RESTORE.DEVICEALLOCATE();
SYS.DBMS_BACKUP_RESTORE.RESTORESETDATAFILE;
SYS.DBMS_BACKUP_RESTORE.RESTOREDATAFILETO(1,'d:\\oranewdata\\SYSTEM01.DBF');
SYS.DBMS_BACKUP_RESTORE.RESTOREDATAFILETO(2,'d:\\oranewdata\\SYSAUX01.dbf');
SYS.DBMS_BACKUP_RESTORE.RESTOREDATAFILETO(3,'d:\\oranewdata\\undotbs01.dbf');
SYS.DBMS_BACKUP_RESTORE.RESTOREDATAFILETO(4,'d:\\oranewdata\\USERS01.dbf');
SYS.DBMS_BACKUP_RESTORE.RESTOREDATAFILETO(5,'d:\\oranewdata\\VSM.ora');
SYS.DBMS_BACKUP_RESTORE.RESTOREDATAFILETO(6,'d:\\oranewdata\\dms.ora');
SYS.DBMS_BACKUP_RESTORE.RESTOREDATAFILETO(8,'d:\\oranewdata\\GGS.ora');
FOR I IN 1..V_MAXPIECES LOOP
SYS.DBMS_BACKUP_RESTORE.RESTOREBACKUPPIECE(V_FILENAMETABLE(I), V_FINISH);
IF V_FINISH THEN
SYS.DBMS_BACKUP_RESTORE.DEVICEDEALLOCATE;
RETURN;
END IF;
END LOOP;
SYS.DBMS_BACKUP_RESTORE.DEVICEDEALLOCATE;
END;
/
-- done.
上面我是新建的目录,把数据文件生成到了一个新目录,下面重建控制文件,注意增加了我们要恢复的表空间数据文件
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS FORCE LOGGING ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 11685
LOGFILE
GROUP 1 'E:\\APP\\SYS-ADMIN\\ORADATA\\ORCL\\REDO01.LOG' SIZE 50M,
GROUP 2 'E:\\APP\\SYS-ADMIN\\ORADATA\\ORCL\\REDO02.LOG' SIZE 50M,
GROUP 3 'E:\\APP\\SYS-ADMIN\\ORADATA\\ORCL\\REDO03.LOG' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'd:\\oranewdata\\SYSTEM01.DBF',
'd:\\oranewdata\\SYSAUX01.dbf',
'd:\\oranewdata\\undotbs01.dbf',
'd:\\oranewdata\\USERS01.dbf',
'd:\\oranewdata\\VSM.ora',
'd:\\oranewdata\\dms.ora', -- droped tablespace
'd:\\oranewdata\\GGS.ora'
CHARACTER SET ZHS16GBK
;
重建控制文件成功,数据库可以mount, 下面就可以恢复数据库了
rman> catalog start with '<backupset path>'
rman> list backup summary;
rman> restore archivelog all;
run {
set until sequence <max seq# available archivelog above output>;
recover database;
}
注册了备份信息到新的控制文件中,列出最大的arch 编号,恢复数据库成功,恢复控制文件也可以使用上面的SYS.DBMS_BACKUP_RESTORE包里提供的方法,最后因为当前online redo不可用,所以open resetlogs.成功打开数据库.
rman> alter database open resetlogs;
Summary:
备份非常的重要,前提是备份文件尽可能的保留完整有效,除了datafile和archivelog的备份文件,还有如备份时的logfile, 控制文件和spfile的自动备份文件同样应该保管好。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




