今天应用服务器后台报一下错误:
java.sql.SQLException: ORA-01114: 将块写入文件 201 时出现 IO 错误 (块 # 1015305)
ORA-27069: skgfdisp: 尝试在文件范围外执行 I/O
OSD-04026: 传递的参数无效。 (OS 1015311)
ORA-01114: 将块写入文件 201 时出现 IO 错误 (块 # 1015305)
ORA-27069: skgfdisp: 尝试在文件范围外执行 I/O
OSD-04026: 传递的参数无效。 (OS 1015311)
在网上找资料说,是数据库临时表空间满了或者坏掉了。
查询临时表空间的大小
select name, bytes/1024/1024 as "大小(M)" from v$tempfile order by bytes;
看到系统中最大数据文件D:\Oracle\ORADATA\TFJS\TEMP.DBF 大小为8G,初步估计是temp表空间无法扩展的原因。
解决办法:
1、查询该用户下的默认临时表空间
select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';
2、创建新的临时表空间
create temporary tablespace temp01 tempfile 'D:\ORACLE\ORADATA\TFJS\TEMP01.DBF'
size 1000M autoextend on;
3、修改默认表空间
alter database default temporary tablespace temp01;
网上的达人都说发生这种问题是因为表空间不够或者目录数过多导致,结果登上服务器发现一切都正常。
经过半天的Google,后来在一个老外的技术文章中找到解决问题的方法:
The solution is (as proposed on this thread):
alter system set events '10046 trace name context off';
alter system set timed_statistics=false;
执行完这两条脚本,问题果然解决