報錯現象:
通過v$RMAN_BACKUP_JOB_DETAILS查看備份狀態,一直卡着不出結果,很長一段時間之后拋出ORA-1652: unable to extend temp segment by 128 in tablespace ,此時查看臨時表空間使用情況,發現占用很少,然后重新執行查詢,在另一個窗口查看臨時表空間使用,臨時表空間共25G,使用率從1%一直不斷的漲,結果就是一直漲到100%,然后查詢備份的窗口又報出ora-1652,
查看ora 1652錯誤,還是比較簡單,就是臨時表空間占滿,不能繼續擴展,然后一個查詢就占用這么大空間,明顯不正常,不能通過簡單添加臨時表空間解決
oerr ora 1652
01652, 00000, "unable to extend temp segment by %s in tablespace %s"
// *Cause: Failed to allocate an extent of the required number of blocks for
// a temporary segment in the tablespace indicated.
// *Action: Use ALTER TABLESPACE ADD DATAFILE statement to add one or more
// files to the tablespace indicated.
解決:
准備通過set autotrace on 的方法跟蹤一下,結果也跟蹤不出來,求助萬能的google及oracle support,給出的統一解決方案是對fix_table統計信息進行搜集,
exec dbms_stats.gather_fixed_objects_stats;
執行完之后,還是沒有效果
之后,進行了其它嘗試,
exec dbms_stats.DELETE_TABLE_STATS('SYS','X$KCCRSR');
exec dbms_stats.LOCK_TABLE_STATS('SYS','X$KCCRSR');
也沒效果,繼續執行
exec dbms_stats.gather_table_stats(ownname=>'SYS',tabname=>'RECYCLEBIN$');
再對備份情況進行查詢,秒出
select SESSION_KEY, INPUT_TYPE, STATUS, TO_CHAR(START_TIME, 'yyyy-mm-dd hh24:mi') start_time, TO_CHAR(END_TIME, 'yyyy-mm-dd hh24:mi') end_time, ELAPSED_SECONDS / 3600 hours, INPUT_BYTES_PER_SEC_DISPLAY in_sec, OUTPUT_BYTES_PER_SEC_DISPLAY out_sec, INPUT_BYTES_DISPLAY in_size, OUTPUT_BYTES_DISPLAY out_size from v$RMAN_BACKUP_JOB_DETAILS ORDER BY SESSION_KEY;