如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!
诗檀软件专业数据库修复团队
服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com
适用于:
Oracle Server - Enterprise Edition – 版本 10.1.0.2 到 11.2.0.3 - Release: 10.1 to 11.2 本文信息适用于任何平台。
症状
数据库从一个使用split mirror技术创建的热备份中被恢复。 当我们尝试执行RECOVER UNTIL TIME ,恢复过程失败显示: SQL> RECOVER DATABASE UNTIL TIME '2011-12-31:10:00:00' USING BACKUP CONTROLFILE; ORA-00283: recovery session canceled due to errors ORA-01110: data file 104: '/oradbs/oradata/ORCL/sysaux01.dbf' ORA-01122: database file 104 failed verification check ORA-01110: data file 104: '/oradbs/oradata/ORCL/sysaux01.dbf' ORA-01200: actual file size of 293120 is smaller than correct size of 298240 blocks 或 SQL> RECOVER DATABASE UNTIL TIME '2011-12-31:10:00:00' USING BACKUP CONTROLFILE; ORA-00283: recovery session canceled due to errors ORA-01237: cannot extend datafile 104 ORA-01110: data file 104: '/oradbs/oradata/pri14p/sysaux01.dbf'
原因
储存在控制文件中的数据文件大小与数据文件的物理大小不匹配。 查看在控制文件中的数据文件大小: v$datafile.blocks 在OS级别查看数据文件大小: ls -lrt /oradbs/oradata/ORCL/sysaux01.dbf
查看错误: ORA-01200: actual file size of 293120 is smaller than correct size of 298240 (a) (b) 控制文件中的数据文件大小是298240 块 但OS的数据文件有293120 块 在OS 级别的文件大小 --> (a) * db_block_size + db_block_size 在示例中 293120 *db_block_size + One block--> 293120 * 8192 + 8192=2401247232 bytes 同时输出来自: ls -lrt/oradbs/oradata/ORCL/sysaux01.dbf DB预期的数据文件大小:(b) * db_block_size + db_block_size 在示例中 298240 --> 298240* 8192 +8192=2443190272 bytes
解决方案
我们可以使用dd添加块的差异,给文件想要的大小 1. 在一切操作之前创建文件备份l 2. 查看块数的差异
blocks_in_controlfile - actual_file_size_blocks
在示例中: (b) - ( a) = 298240 - 293120=5120 (blocks)
3. 在该步骤中,一些空/零块会被添加到现有的数据文件,以匹配控制文件中的值。 dd if=/dev/zero of=<location of datafile> bs=<db_block_size in bytes> seek=<Actual block number reported + 1 > count=<Difference in number of blocks> 在示例中: 在参数seek中指定在这里应当附加(append)5120 块,因为文件包含 293120 (错误信息所表示),所以seek=293121 是附加会出现的下一个块。
dd if=/dev/zero of=/oradbs/oradata/ORCL/sysaux01.dbf bs=8192 seek=293121 count=5120 conv=notrunc
4. 现在使用ls -lrt <file_name>查看OS级别的文件大小
在示例中。应当为298240* 8192 +8192=2443190272字节
5. 一旦大小匹配,重试恢复:
sql>shutdown immediate; sql>startup mount; sql> RECOVER DATABASE UNTIL TIME '2011-12-31:10:00:00' USING BACKUP CONTROLFILE;