ORA 01114 - 将块写入文件的 IO 错误

Posted

技术标签:

【中文标题】ORA 01114 - 将块写入文件的 IO 错误【英文标题】:ORA 01114 - IO Error writing block to file 【发布时间】:2014-01-07 00:23:43 【问题描述】:

我正在 Oracle 11g 中处理一些复杂的 sql 查询,这些查询具有 SUM 等聚合函数并连接多个表和视图。当我尝试查询大跨度数据时,出现 IO 错误和 Tablespace 空间不足错误。

错误 1 ​​是 ORA-01114: IO 错误将块写入文件(块 #) ORA-01114: 将块写入文件 201 的 IO 错误(块 #1343798) ORA-27063: 读取/写入的字节数不正确

错误 2 有时 加载日期 > 12 个月时数据库用尽临时空间

这是我的 DBA 必须解决的特定于 Oracle 的错误,还是我的查询有问题?如何微调查询的性能以避免表空间不足提示?我正在写一个我的查询是什么样子的虚拟样本

SELECT Sum(s.stock + s.accept + s.new)    AS result, 
       Floor(( s.sales / s.stock ) * 100) AS sales_per,, 
       f.load_date,, 
       u.user_id, 
       Sum(s.falsepos + s.realvio)        AS closed_ale, 
       Sum(f.nbrecords)                   AS nb_records 
FROM   stocks s, 
       facts f, 
       zones z, 
       users u 
WHERE  s.sid = f.fid 
       AND z.zoneid = f.zoneid 
       AND u.userid = z.userid 
       AND f.load_date BETWEEN '20081010' AND '20121030' 

【问题讨论】:

这很有可能与文件系统/磁盘有关(至少是 IO 错误) 【参考方案1】:

是的,您可能需要让您的 DBA 来修复某些问题。

根据this page,

当您尝试写入文件和设备时发生 ORA-01114 文件是:

1) 离线或

2) 空间已用完,可能是因为它是临时的 创建时未分配的文件。

要解决 ORA-01114, 你应该:

1) 恢复对设备的访问权限或

2) 取出不需要的文件以获得更多空间

并提供此调试建议(我已插入您的块号):

您可以通过将 file_id 和 block_id 插入到 dba_extents 上的此查询中来查明 ORA-01444 错误的表空间和段:

select 
   owner,
   tablespace_name, 
   segment_type, 
   segment_name 
from 
   dba_extents
where 
   file_id = 201
and 
   block_id = 1343798;

【讨论】:

遗憾的是这对我不起作用。顺便说一句,您在原始网站上打错字了,上面写着 ORA-01444,应该写着 ORA-01114【参考方案2】:

这个命令可能会救你们。

alter tablespace temp shrink space keep 40m;

也许您的系统为 temp 预留的空间过多。所以我们只是释放这个空间,我们可能会取回可用资源以正常运行。

【讨论】:

好!但是对于一个真正完整的解释,人们可能想检查这个***.com/a/1878732/3856754

以上是关于ORA 01114 - 将块写入文件的 IO 错误的主要内容,如果未能解决你的问题,请参考以下文章

ORA-00942: 写入数据库中的表时表或视图不存在错误

写入控制文件时出错 ORA-00221 oracle

诊断:ORA-00376 & ORA-01110

使用 rest api 将块 blob 列表放在 azure 存储上时,指定的 XML 不是语法上有效的错误

仅使用 Java.IO 在文件中读取/写入字节

由于删除DBF文件报错 —— ORA-01033: ORACLE initialization or shutdown in progress