东来东往

博客园 首页 新随笔 联系 订阅 管理

通过动态视图查看system系统表空间的位置;

关闭数据重新启动 数据库报错 DBWR进程把错误跟踪到文件 一般就是找不到数据文件

如何不确认什么问题可以先ls /opt/11g/oracle/oradata/ORCL/datafile/ol_mf_system* 查看文件是否还存在 ,在这里要注意 system表空间是数据库中最重要的表空间 ,他在运行期间不允许丢失或者损坏 ,如果丢失或者损坏 数据库将马上停止服务宕机。也不可以被offline离线。System表空间存储着数据库的最重要的系统文件。包括包,视图,存储过程,等等都在system表空间中 。

下面我们用我们的备份文件直接用cp命令拷贝到数据文件的原目录位置 重新启动数据库试试、(先shutdown immediate 正常关闭 然后start启动数据库 );

(先shutdown immediate 数据库一致性关闭 然后starup启动数据库 )

数据库提示要进行介质恢复 下面我们用recover database 命令来恢复数据库试试;

 

介质恢复完毕 并且成功。这说明我们的数据库已经恢复完毕 打开数据库到 open状态 查看数据没有丢失 呵呵 大功告成 !!(其实对于非归档模式的数据库恢复 根本没有设么意义在生产库中 我们现在只是做实验 ,在数据库发生表空间丢失期间我们的数据库没有任何或者是少量的 数据变动 所以我们可以用备份来恢复 ,如果是生产库 数据库出故障与备份期间会有大量数据的改变 ,因为我们是非归档模式。所以所有的日志组 用完一次就被覆盖掉。

不可能进行完整的恢复。下面我们举个例子来验证这一个理论是否成立。

 

我们首先建立一个empl的表 然后手工去切换当前的日志;

大家可以看到我的数据库现在有四个日志组每个组有一个成员 ,当前用的联机日志文件是第一组里的成员 我现在用手工命令 alter system  switch logfile 连续切换4次日志组那么我现在的所有的logfile里面的数据应该是空的了 (主要我们的数据库如果是在非归档模式下进行日志切换 是要覆盖掉以前做过的记录的 所以我现在的数据库logfile里面的数据应该是空的 ,如果system表空间丢失 要进行恢复 只能进行非一致性恢复。

下面我们手工删除我们的system表空间的数据文件;

注意 这次我们跟上次一样把原来的 system系统表空间下的数据文件拷贝到数据库数据文件原来的位置 ,同样提示我们需要介质恢复。我们再用recover database命令 看看还可以么。如果没有错的话 我想是不行了 。因为我们的日志组文件经过了几次切换。里面已经没有任何内容了 不太可能进行完全恢复了。

 

 

我们来看一下 现在数据库已经找不到要恢复的日志了 。原因是我们的日志文件已经被重写了。而我们的数据库又没有进行任何的归档 所以即便是能打开数据库 ,我们在备份文件到数据库出故障的这阶段的数据已经丢失了。我们没有办法了只能用不一致恢复了。这是我们唯一能用的办法了 还记得么resetlog 命令 如果oracle 版本数据库是9i恢复数据库的时候还要加上一个隐藏参数 “allow_resetlogs_corruption”=ture scope=spfile 恢复完再改回来 。要不然数据库会报一些不明不白的错误 。那我们用resetlogs命令打开数据库。数据库提示要用resetlogs命令必须在非一致性恢复才可以。

同样我们还是用一个欺骗的命令 告诉数据库 我们要对数据库非一致性恢复;

在这我们继续回车 回车 不用去管 因为我们没有归档日志文件 。。。

 

然后我们shutdown immediate 一致性的关闭数据库,然后启动数据库到mount  阶段 实例已经正常加载。但是我们在 alter database open resetlogs 时 oracle server 服务提示我们当前的会话终端发生异常错误数据库被关闭 (在这里我们不用管它)我们用另外一个窗口打开数据登陆 正常的startup数据库 可以看到效果 数据库可以正常打开 但是我们的数据 确确实实的丢失了。

看到了吧 数据库可以正常打开 主要是我们忽略调了数据库的一致性验证。

所以数据才可以open

数据库能启动与否主要靠  控制文件中对应数据文件中的scn号是否与 数据文件头重的的 scn相等。如果相等 则进行 控制文件中得stop scn号与数据文件头的scn号是否一致 如果两者一致 则数据库认为当前数据是可靠的 数据是没有丢失的 所以可以打开数据库。

恢复的时候是用的联机日志文件中的日志戳 log_sequence号来判断 如何恢复数据到最新数据 或者是某一个时间戳 (注意 我们在这里用resetlogs打开数据库 是没有办法的办法 如果以前是 归档模式 ,那么用完这个命令 以前的所有的归档日志则全部作废。建议对数据库进行全部备份 。然后把数据库打开到归档模式 好 我们在下一次做实验时 数据库就在归档模式下进行了 呵呵 很期待。

 

 

posted on 2012-02-24 21:56  东来东往123  阅读(1455)  评论(0编辑  收藏  举报