今天在QQ上遇这样一件事情, 大约是这样的. 一个运行在Linux上的Oracle数据库, 在正常关闭数据库后, 将磁盘从一台机器挂到另一台机器后, 磁盘的顺序发生了变化, 比如/dev/sdb变成了/dev/sdc, /dev/sdc变成了/dev/sdb, 由于这是在正常关闭数据库的情况下做的, 因此只要准确地改变软链接的映射关系(用了磁盘分区方式的裸设备), 是完全可以正常打开的, 结果一个负责安装RAC的公司, 应当是在没有完全搞对映射关系时, 直接进行了open resetlogs操作. 当然这时是启不来的了.
接下来, 多次open resetlogs失败之后, 用了一个旧的system文件的备份(用dd备份出来的), 再dd回去了, 拷回去后才知道, 因为磁盘空间的问题, 所有的归档日志文件已经被另一队人员干掉了. 最后我让他查了一下v$datafile中的checkpoint_scn#一列, 发现有两个文件的scn号非常小, 从文件名称来看一个是索引一个是数据表空间的, 不知道他们做了什么, 是不是混乱地进行了dd in和dd out了.
于是我问他是不是有数据库的备份, 他说有, 不过没有拷Redo和Undo文件, 以为它们不重要. 如果这些文件是在错误的open resetlogs之前备份的, 那么数据库肯定是可以直接open的, 只要将undo文件offline drop掉, 并且清一下当前日志组, 结果他说他不知道是在open resetlogs之前的, 还是之后的, 遇到这种程度的人, 真不知道能不能拷对文件, dd可是比较复杂的程序. 晕啊.
在整个事件中, 我想最严重的是第一次的open resetlogs了, 不知道从哪儿学来的, 如果数据库打不开就进行open resetlogs, 真是一个很坏的习惯.
留言 (2)
我也想去做 Support 了,真好作
Posted by Fenng | Jul 24, 2007 11:51 AM
11g的Data Recovery Advisor应该能减少一些类似的错误
Posted by wanghai | Jul 24, 2007 2:18 PM