7 x 24 在线支持!
Oracle 当从热备份中执行恢复时显示ORA-01237: 无法扩展数据文件 或ORA-01200
如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!
诗檀软件专业数据库修复团队
服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com
ORA-01237: 无法扩展数据文件
oerr ora 1237
01237, 00000, "cannot extend datafile %s"
// *Cause: An operating system error occurred during the resize.
// *Action: Fix the cause of the operating system error and retry the command.
适用于:
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;
如果自己搞不定可以找诗檀软件专业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;