有時候建立臨時表的資料量過大,就會不斷的增加 TEMPORARY 的 Tablespace 的檔案容量,
增加後就無法縮小了,就必須要刪除然後再重新建立。
在 TIPTOPGP 5.x ERP 的 4GL 程式中,CREATE TEMP TABLE xxxx AS ....,
並不是在 Oracle 資料庫的 TEMPORARY 建立臨時表,而是在 TIPTOP 的 TEMPTABS 的 Tablespace 建立。
主要原因是 Oracle 的 TEMPORARY 的 Tablespace 只能同一個 Session 才能存取的到,
所以 TIPTOP 是用一般的 Tablespace 的方式來建立,避免 Debug 或呼叫其他程式執行時,就找不到 Temp Table 的情況。
每一個 Tablesapce 是由一個或數個 Datafile 所組成的,像 DBS1 的 Tablespace 不足時就要手動增加 Datafile 讓 DBS1 的 Tablespace 加大。
再來就是如何減少 TEMPORARY 的 Tablespace 了,只能先建立新的 TEMPORARY 再轉移再刪除舊檔的方式。
建立新的 TEMPORARY Tablespace,檔案大小改為 100M,並自動增長每次加 640K。
CREATE TEMPORARY TABLESPACE TEMP1 TEMPFILE
'/u2/oracle/oradata/topprod/temp01.dbf' SIZE 100M AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
TABLESPACE GROUP ''
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
查詢目前資料庫有幾個 TEMPORARY 。
select * from dba_temp_free_space;
查詢目前資料的的主要 TEMPORARY。
select DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE from dba_users where username='SYS';
切換 TEMPORARY 到名稱為 temp1 的 Tablespace。
alter database default temporary tablespace temp1
刪除舊名稱為 temp 的 TEMPORARY Tablespace 的 Datafile 所有檔案。
drop tablespace temp including contents and datafiles;
如果刪除的時候 Hang 住的話,表示 TEMPORARY 正在使用中,查詢正在使用的狀況。
SELECT b.tablespace,b.segfile#,b.segblk#,b.blocks,a.sid,a.serial#,
a.username,a.osuser, a.status
FROM v$session a,v$sort_usage b
WHERE a.saddr = b.session_addr;
如果要減少的話,就是再增加原本的名稱為 TEMP 後,再切換回原本的 TEMP,再刪除TEMP1 的方式。
這樣硬碟可使用空間就變大了。
當然如果覺的 TIPTOP 的 TEMPTABS Tablespace 過大的話,也是可以刪除再重新建立,
有時候跑一些比較大的程式如 axcp120、axcp500…等,資料異常有時候會造成無限圈的情況。就會不斷的增加 TEMPTABS 的 Datafile 大小。
重建 TEMPTABS 的 Tablespace。
DROP TABLESPACE TEMPTABS INCLUDING CONTENTS AND DATAFILES;
CREATE TABLESPACE TEMPTABS DATAFILE
'/u2/oracle/oradata/topprod/temptabs.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
LOGGING
ONLINE
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;





