如果自己搞不定可以找诗檀软件专业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中指定在这里应当附加(append5120 块,因为文件包含 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;