01 问题描述 某金融企业,下午4点机房突然断电,电力恢复后重启数据库,准备做日终,但是发现数据库启动报错:
02 检查分析 UNDO文件损坏,无法完成事务恢复。 DBV校验发现大量坏块,包括UNDO和普通数据文件。 没有数据库备份。
03 解决方案 修改pfile,添加参数: *._corrupted_rollback_segments=(_SYSSMU12$,_SYSSMU13$) *.event="10513 trace name context forever, level 2" 使用pfile启动数据库; 创建新的UNDO表空间; 跳过坏块数据,全表扫描: Execute DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('<schema>','<tablename>'); 导出未损坏的数据; 恢复未损坏数据,根据业务日志恢复丢失的数据。
04 坏块的各种情况
UNDO文件损坏正常关闭实例=>更换新的UNDO表空间; 无法正常关闭=>_corrupted_rollback_segments=>打开数据库=>更换undo=>删除损坏的undo=>删除参数重启数据库=>核对数据=>备份。
CURRENT REDO文件损坏正常关闭实例=>recover until cancel=>open resetlogs; 无法正常关闭=> *._allow_resetlogs_corruption=TRUE=>open resetlogs。
控制文件损坏正常关闭实例=>create database=>recover=>打开数据库; 无法正常关闭=>create database=>recover until cancel=>open resetlogs。
数据文件损坏BBED修复SYSTEM及普通数据文件; 正常关闭实例=>打开数据库=>跳过坏块导出数据; 不能正常打开数据库=> 10213 event=>open=>跳过坏块导出数据; 跳过坏块:rowid range、dbms_repair、10231、index scan。
|