ORA-01114錯誤原因及解決方法(臨時表空間壞掉、或者滿了)

zhyp29發表於2016-12-20

今天應用伺服器後臺報一下錯誤:

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;

    執行完這兩條指令碼,問題果然解決

相關文章