清理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>
截止上午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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.