open resetlogs何时成了第一招? 唯一一招?
今天在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, 真是一个很坏的习惯.
