过去几天我使用了PRM-DUL软件(http://www.parnassusdata.com/)来恢复客户糟糕的oracle数据库。
其中一个用户的基于raid-5的存储阵列经历了十分严重的磁盘损坏,虽然有备份,但那备份作业从来没测试通过过。在恢复oracle数据库的过程中遇到了多起undo损坏的疑难问题,而且是发生在system表空间的system系统回滚段身上。剩下的只有10个月前的备份可用了。
我和另外一个工程师尝试从这个损坏的存储系统里恢复2个ORACLE数据库。针对其中一个数据库,PRM-DUL 可以读取它的system表空间上的数据字典,显然虽然undo有严重损坏,但数据字典本身ok。另一个数据库的system表空间有一些损坏,我们有尝试用PRM-DUL的字典模式dictionary-mode,后来转而使用非字典模式了。
由于有10个月前的一些rman备份,所以我们也可以基于10月前的system数据文件来重建数据字典。 但这个10月前的数据字典还是会有一些问题的, 最后还是不得不用非字典模式来处理,这意味着我们需要猜例如表的名字、列字段名和列字段类型这些基础信息。如果用户没法提供一个熟悉业务的人员的话,纯oracle数据库技术人员干这个绝对是力气活,因为如果有几百张表 ,每张表十几个字段,你可以想象一下这样做的工作量是多大的。
不幸的是我们并没有能100%恢复数据,虽然也差不离。 对于有数据字典的情况可以基于TAB$的NUM_ROWS去了解每张表大致的行数,这样我们就能知道大约丢失了多少行数据。
照理说 PRM-DUL 应当能恢复所有数据,但在这个case中部分数据文件中的block显然被物理上毁灭了。所以我们还是要强调,不仅要备份,还要定期测试你的备份。
Comment