該篇文章大部分就抄錄網上博客,具體出處已忘,但是實測可以解決該問題
操作數據庫出現錯誤,ORA-00604: 8192
解釋說明:
由於Oracle的Rowid使用22位來代表數據塊號,因此Oracle表空間數據文件每個數據文件最多只能包含2^22個數據塊。
也因此數據庫表空間的數據文件不是無限增長的,例如:
在數據塊為8k的情況下,單個數據文件的最大容量為8K*2^22 = 32G
同理,
數據塊為2K,數據文件最大約8G
數據塊為32,數據文件最大約16*8G
故若達到這個最大容量之后,則即便是設置了自增長,也不是無限自增長,此時則需要為這個表空間添加數據文件
處理步驟:
1、連上數據庫后查看表空間情況
SELECT UPPER(F.TABLESPACE_NAME) "表空間名", D.TOT_GROOTTE_MB "表空間大小(M)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空間(M)", TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100, 2), '990.99') "使用比", F.TOTAL_BYTES "空閑空間(M)", F.MAX_BYTES "最大塊(M)" FROM (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES, ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F, (SELECT DD.TABLESPACE_NAME, ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB FROM SYS.DBA_DATA_FILES DD GROUP BY DD.TABLESPACE_NAME) D WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME ORDER BY 4 DESC;
2. SYSTEM表空間不足,查看表空間文件名稱和是否自動增長
SELECT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM dba_data_files;
3、當表空間不足時
-
擴展表空間
當表空間文件本身較小時,可以選擇擴大表空間文件的大小,sql語句:
alter database datafile 'D:\ORACLE\PRODUCT\ORADATA\TEST\USERS01.DBF' resize 50m;
-
設置文件的自動增長
首先選擇設置自增長,sql語句:
ALTER DATABASE DATAFILE 'E:\APP\ZHUANGB1\ORADATA\WHU\USERS01.DBF' AUTOEXTEND ON NEXT 400M MAXSIZE UNLIMITED;
-
增加數據文件
在自增長失靈了之后,需要增加數據文件,sql語句:
Alter tablespace 表空間名 add datafile ‘數據文件存放的路徑’ size 數據文件大小M autoextend on next 每次自增長大小M Maxsize UNLIMITED;
示例:
alter tablespace USER add datafile 'E:\app\EmmaXu\product\11.1.0\db_1\database\SDE_1.dbf' size 400M autoextend off
4、 刪除表空間文件
有時表空間文件添加錯誤,需要刪除重新添加,sql語句:
alter tablespace WEBS_TABLESPACE drop datafile 'F:\temp\USERS02.DBF';