清理temp表空間

檢查alert日誌發現近期大量ORA-1652報錯


截止上午10:00近2天報錯次數爲19次


Wed Feb 17 01:32:03 2016
ORA-1652: unable to extend temp segment by 16 in tablespace                 TEMP1 
Wed Feb 17 01:32:03 2016
ORA-1652: unable to extend temp segment by 16 in tablespace                 TEMP1 
Wed Feb 17 01:32:03 2016
ORA-1652: unable to extend temp segment by 16 in tablespace                 TEMP1 
Wed Feb 17 01:32:03 2016
ORA-1652: unable to extend temp segment by 16 in tablespace                 TEMP1 


Tue Feb 16 23:32:04 2016
ORA-1652: unable to extend temp segment by 16 in tablespace                 TEMP1 
Tue Feb 16 23:32:04 2016
ORA-1652: unable to extend temp segment by 16 in tablespace                 TEMP1 
Tue Feb 16 23:32:14 2016
ORA-1652: unable to extend temp segment by 128 in tablespace                 TEMP2 
Tue Feb 16 23:32:14 2016
ORA-1652: unable to extend temp segment by 128 in tablespace                 TEMP2 
Tue Feb 16 23:45:20 2016


2.問題點分析


1.> 默認表空間問題:


[sql] view plain copy
SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES  WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE';  
   
PROPERTY_NAME                  PROPERTY_VALUE  
------------------------------ --------------------------------------------------------------------------------  
DEFAULT_TEMP_TABLESPACE        TEMP  
   
SQL>   


經查詢默認臨時表空間是TEMP


但是erp庫中根本沒有temp表空間


[sql] view plain copy
SQL> select tablespace_name from dba_tablespaces where contents='TEMPORARY';  
   
TABLESPACE_NAME  
------------------------------  
TEMP1  
TEMP2  
PROD2_IAS_TEMP  
PROD1_IAS_TEMP  
SQL> select file_name,file_id, tablespace_name from dba_temp_files;  
   
FILE_NAME                                                                           FILE_ID TABLESPACE_NAME  
-------------------------------------------------------------------------------- ---------- ------------------------------  
+DATA_ERP/prod/tempfile/temp1.302.835913167                                               3 TEMP1  
+DATA_ERP/prod/tempfile/temp2.303.835913167                                               4 TEMP2  
+DATA_ERP/prod/tempfile/prod1_ias_temp.512.895320743                                      1 PROD1_IAS_TEMP  
+DATA_ERP/prod/tempfile/prod2_ias_temp.501.868628877                                      2 PROD2_IAS_TEMP  
   
SQL>   
2.> TEMP1和TEMP2報空間不足的問題


[sql] view plain copy
SQL> SELECT A.tablespace_name tablespace,  
  2             D.mb_total,  
  3         SUM(A.used_blocks * D.block_size) / 1024 / 1024 mb_used,  
  4         D.mb_total - SUM(A.used_blocks * D.block_size) / 1024 / 1024 mb_free  
  5  FROM v$sort_segment A,  
  6             (SELECT B.name, C.block_size, SUM(C.bytes) / 1024 / 1024 mb_total  
  7                FROM v$tablespace B, v$tempfile C  
  8           WHERE B.ts# = C.ts#  
  9           GROUP BY B.name, C.block_size) D  
 10  WHERE A.tablespace_name = D.name  
 11  GROUP by A.tablespace_name, D.mb_total;  
   
   
TABLESPACE                        MB_TOTAL    MB_USED    MB_FREE  
------------------------------- ---------- ---------- ----------  
TEMP1                                 4000      28.75    3971.25  
TEMP2                                 4000        147       3853  
   
SQL>  


3.解決方案


1.> 針對默認臨時表空間問題,建議添加默認臨時表空間temp


但是出現了奇怪的問題,居然報錯TEMP已存在


[sql] view plain copy
SQL> create temporary tablespace TEMP tempfile '+DATA_ERP/prod/tempfile/temp.dbf' size 4096M ;  
   
create temporary tablespace TEMP tempfile '+DATA_ERP/prod/tempfile/temp.dbf' size 4096M  
   
ORA-01543: tablespace 'TEMP' already exists  
   
SQL> alter tablespace TEMP add tempfile '+DATA_ERP' size 2048M;  
   
alter tablespace TEMP add tempfile '+DATA_ERP' size 2048M  
   
ORA-10917: TABLESPACE GROUP cannot be specified  
這是臨時表空間組,好吧,沒想到


[sql] view plain copy
SQL> select * from dba_tablespace_groups;  
   
GROUP_NAME                     TABLESPACE_NAME  
------------------------------ ------------------------------  
TEMP                           TEMP1  
TEMP                           TEMP2  
   
SQL>  


2.> 針對短時間內報錯問題


臨時表空間4G太小了,改爲自動擴展


[sql] view plain copy
SQL> alter database tempfile '+DATA_ERP/prod/tempfile/temp1.302.835913167' autoextend on next 100M;  
   
Database altered  
SQL>   
SQL> alter database tempfile '+DATA_ERP/prod/tempfile/temp2.303.835913167' autoextend on next 100M;  
   
Database altered  
   
SQL> select FILE_NAME, TABLESPACE_NAME,   BYTES,   AUTOEXTENSIBLE,  INCREMENT_BY from dba_temp_files;  
   
FILE_NAME                                                                        TABLESPACE_NAME                     BYTES AUTOEXTENSIBLE INCREMENT_BY  
-------------------------------------------------------------------------------- ------------------------------ ---------- -------------- ------------  
+DATA_ERP/prod/tempfile/temp1.302.835913167                                      TEMP1                          4194304000 YES                   12800  
+DATA_ERP/prod/tempfile/temp2.303.835913167                                      TEMP2                          4194304000 YES                   12800  
+DATA_ERP/prod/tempfile/prod1_ias_temp.512.895320743                             PROD1_IAS_TEMP                  104857600 YES                    6400  
+DATA_ERP/prod/tempfile/prod2_ias_temp.501.868628877                             PROD2_IAS_TEMP                  104857600 YES                    6400  
   
SQL>  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章