第一次參加鐵人賽,難免忐忑不安,也不知道自己有沒有辦法堅持30天,所以選擇自我挑戰組來初試。內容也不確定要寫些什麼?也許會用AI幫忙撰文也不一定,單純就是分享一下我自己曾經遇到過的問題。
因為有管理過Database、作業系統、網路、硬體,也有寫過程式,所以分享的種類可能比較多元,其實也是給自己更多的空間來完成這30天的挑戰。
第一天先來發表幾天前才發生過的Oracle Database問題,有一個剛上線沒多久的人事系統DB,出現了ORA-1652: unable to extend temp segment by 6400 in tablespace
就是說Temporary Tablespace空間滿了,因為當時我人在國外,所以其他人有聯絡廠商幫忙解決這個問題,因為之前我也有遇過相同的問題,我的做法是如下:
首先執行下列的SQL,檢查是哪一個SQL佔用過多的Temporary,如果這個SQL只是使用者下錯條件造成的,那只要刪除該Session即可
select
vs.sid,vs.serial#,vs.status,
vtu.segtype, vtu.blocks,(vtu.blocks * 8192 /1024/1024) as "Use MB",
vs.process,vs.machine,
vs.terminal,vs.program,vs.module,vs.action,
vs.logon_time,
vtu.sql_id,vtu.tablespace,vtu.contents
from V$TEMPSEG_USAGE vtu, V$SESSION vs
where vtu.session_addr = vs.saddr;
但是如果這段SQL之後還是一樣需要執行,那就表示空間真的是太小了。另外執行下列的SQL,確認Temporary的Datafile
select a.name,b.name, (a.bytes/1024/1024) "MB" from v$tempfile a, v$tablespace b where a.ts#=b.ts#;
從上述的SQL找到Datafile,例如找的是D:\ORACLE\ORADATA\TEMP01.DBF
用sys as sysdba登入DB,執行下列的語法將Temporary Datafile的容量擴大成12GB
ALTER DATABASE TEMPFILE 'D:\ORACLE\ORADATA\TEMP01.DBF' RESIZE 12G
今天就到這裡,感謝