非system表空间的数据文件损坏
1. 确定损坏的文件名字:
svrmgrl>select name from v$datafile where status=’INVALID’;
2. 将损坏的数据文件处于offline状态:
svrmgrl>alter database datafile ‘datafile_name’ offline;
3. 从相应的备份结果集中恢复关于这个数据文件的最近的备份。对于没有采用带库备份的点可以直接从磁带上恢复;对于用带库备份的点用相应的rman脚本来恢复。
4. 恢复数据文件:
svrmgrl>alter database recover datafile ‘file_name’;
5. 使数据库文件online:
svrmgrl>alter database datafile ‘datafile_name’ online;
6. 用适当的方法进行数据库全备份。
system表空间的数据文件损坏:
1. 以mount方式启动数据库
svrmgrl>startup mount;
2. 从相应的备份结果集中恢复关于这个数据文件的最近的备份。对于没有采用带库备份的点可以直接从磁带上恢复;对于用带库备份的点用相应的rman脚本来恢复。
3. 恢复system表空间:
svrmgrl>alter database recover datafile ‘datafile_name’;
4. 打开数据库:
svrmgrl>alter database open;
5. 用适当的方法进行数据库全备份。
表空间损坏:
若非system表空间已经损坏,则数据库仍然可以处于打开状态可以进行操作,只是损坏的表空间不能访问。这样在数据库打开状态下可以单独对损坏的表空间进行恢复。若是system表空间损坏则数据库系统会异常终止。这时数据库只能以Mount方式打开,然后再对表空间进行恢复。可以通过查看数据库日志文件来判断当前损坏的表空间是否是system表空间.
非system表空间损坏:
1. 将损坏的表空间处于offline状态:
svrmgrl>alter tablespace ‘tablespace_name’ offline;
2. 从相应的备份结果集中恢复关于这个表空间最近的备份。对于没有采用带库备份的点可以直接从磁带上恢复;对于用带库备份的点用相应的rman脚本来恢复。
3. 恢复表空间:
svrmgrl>alter database recover tablespace ‘tablespace_name’;
4. 使表空间online:
svrmgrl>alter tablespace ‘tablespace_name’ online;
5. 用适当的方法进行数据库全备份.
system表空间损坏:
1. 以mount方式启动数据库
svrmgrl>startup mount;
2. 从相应的备份结果集中恢复system表空间最近的备份。对于没有采用带库备份的点可以直接从磁带上恢复;对于用带库备份的点用相应的rman脚本来恢复。
3. 恢复system表空间:
svrmgrl>alter database recover tablespace system;
4. 打开数据库:
svrmgrl>alter database open;
5. 用适当的方法进行数据库全备份。
整个数据库的所有文件损坏:
整个数据库所有文件的损坏一般是在共享磁盘阵列发生无法恢复的灾难时才发生,这种情况下只能对数据库进行恢复。若数据库的归档目录也已经丢失,则数据库不可能做完全恢复,会有用户数据的丢失。
没采用带库备份的现场:
1. 将最近的备份从磁带上把各个文件解包到相应的目录下。
2. 以mount方式打开数据库:
svrmgrl>startup mount;
3. 恢复数据库:
svrmgrl>recover database until cancel;
4. 打开数据库:
svrmgrl>alter database open resetlogs;
5. 用适当的方法进行数据库全备份。
采用带库备份的现场:
1. 以nomount方式打开数据库:
svrmgrl>startup nomount;
2. 通过相应的rman脚本进行数据库软恢复。
$rman cmdfile=hot_database_restore.rcv
3. 打开数据库:
svrmgrl>alter database open resetlogs;
4. 用适当的方法进行数据库全备份。
存在最近的数据库完整冷备份前提下的一些经典紧急情况的处理:
数据文件,归档重作日志和控制文件同时丢失或损坏:
无新增archives 时的状况:
条件和假设:自上次镜像备份以来尚未生成新的archive log(s); Archivelog Mode; 有同步的datafile(s) 和control file(s) 的镜像(冷)拷贝
恢复步骤:
1. 将镜像拷贝的datafile(s) 和control file(s) 抄送回原始地点:
$ cp /backup/good_one.dbf /orig_loc/bad_one.dbf
$ cp /backup/control1.ctl /disk1/control1.ctl
2. 以mount 选项启动数据库:
$ svrmgrl
svrmgrl> connect internal
svrmgrl> startup mount
3. 以旧的control file 来恢复数据库:
svrmgrl> recover database using backup controlfile until cancel;
*** 介质恢复完成
(必须马上cancel )
4. Reset the logfiles (对启动而言不可省略):
svrmgrl> alter database open resetlogs;
5. 关闭数据库并做一次全库冷备份。
新增archives 时的状况:
条件和假设:自上次镜像备份以来已经生成新的archive log(s); Archivelog Mode; 有同步的datafile(s) 和control file(s) 的镜像(冷)拷贝;archive log(s) 可用。
恢复步骤:
1. 如果数据库尚未关闭,则首先把它关闭:
$ svrmgrl
svrmgrl> connect internal
svrmgrl> shutdown abort
2. 将备份文件抄送回原始地点:
所有Database Files
所有Control Files(没有archive(s) 或redo(s) 的情况下,control files 的更新无任何意义)
所有On-Line Redo Logs (Not archives)
init.ora file(选项)
3. 启动数据库:
$ svrmgrl
svrmgrl> connect internal
svrmgrl> startup