TEMP:临时表空间,存放临时表数据、临时结果集等。
和临时表空间相关的参数:
SQL> select name, value, type from v$parameter t where name like 'TEMP%';
行号 NAME VALUE TYPE
---------- ---------------- ------------ ---------
1 TEMP_PATH /data/DAMENG READ ONLY
2 TEMP_SIZE 10 IN FILE
3 TEMP_SPACE_LIMIT 0 SYS
已用时间: 15.510(毫秒). 执行号:601.
TEMP_PATH 临时表空间路径。
TEMP_SIZE 临时表空间初始大小。
TEMP_SPACE_LIMIT 临时表空间的空间限制,0 表示不限制。
临时表空间的自动扩展不可以关闭。
SQL> alter tablespace TEMP datafile 'TEMP.DBF' autoextend off;
alter tablespace TEMP datafile 'TEMP.DBF' autoextend off;
第1 行附近出现错误[-3411]:试图设置表空间[TEMP]中文件的autoextend属性.
已用时间: 0.396(毫秒). 执行号:0.
查看、更改临时表空间的大小:
SQL> select name,type,value,sys_value,file_value from v$parameter where name='TEMP_SIZE';
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- --------- ------- ----- --------- ----------
1 TEMP_SIZE IN FILE 10 10 10
SQL> alter system set 'TEMP_SIZE' = 80 spfile;
DMSQL 过程已成功完成
已用时间: 4.293(毫秒). 执行号:610.
SQL> select name,type,value,sys_value,file_value from v$parameter where name='TEMP_SIZE';
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- --------- ------- ----- --------- ----------
1 TEMP_SIZE IN FILE 10 10 80
已用时间: 3.850(毫秒). 执行号:611.
TEMP表空间增大原因:
排序、多表关联查询、索引创建等操作,在对应内存空间不够情况下需要使用temp存放结果集。
创建的临时表及数据存储均使用temp表空间。
使用SQL扩展临时表空间:
SQL> select count(*) from test;
行号 COUNT(*)
---------- --------------------
1 7020544
已用时间: 0.123(毫秒). 执行号:524.
select name,id,type$,pid from test order by 1,2,3,4;
查看:
SELECt a.tablespace_name , round(b.max_total/(1024*1024),2) Max_Total_M, round(total/ (1024 * 1024),2) System_Allocated_Total_M, round(free/ (1024 * 1024),2) System_Allocated_Free_M, round((total- free)/(1024 * 1024),2) System_Allocated_Used_M , round((total - free) / total, 4) * 100 "System_Allocated_Used_%", round(((total- free)/max_total),6)*100 "Max_Used_%" FROM ( SELECt tablespace_name, SUM(bytes) free FROM dba_free_space GROUP BY tablespace_name ) a, ( SELECt tablespace_name, SUM(bytes) total, sum(decode(AUTOEXTENSIBLE,'NO',bytes,MAXBYTES)) max_total FROM dba_data_files GROUP BY tablespace_name ) b WHERe a.tablespace_name = b.tablespace_name;
行号 TABLESPACE_NAME MAX_TOTAL_M SYSTEM_ALLOCATED_TOTAL_M SYSTEM_ALLOCATED_FREE_M SYSTEM_ALLOCATED_USED_M System_Allocated_Used_% Max_Used_%
---------- --------------- ----------- ------------------------ ----------------------- ----------------------- ----------------------- ----------
1 SYSTEM 67108863 182 163.66 18.34 10.08 0
2 ROLL 67108863 154 83.53 70.47 45.76 0.0001
3 TEMP 67108863 184 183.75 0.25 0.3 0
4 MAIN 67108863 128 127.66 0.34 0.27 0
收缩 TEMP 表空间的方法:
1、 重启数据库,TEMP 表空间数据文件会重建。
2、 在线收缩临时表空间使用 SP_TRUNC_TS_FILE 函数。
我们先缩小到100M:
sp_trunc_ts_file(3,0,100);
SQL> sp_trunc_ts_file(3,0,100);
DMSQL 过程已成功完成
已用时间: 0.464(毫秒). 执行号:616.
SQL> SELECt
ts.NAME "表空间" ,
ts.ID "表空间编号" ,
df.id "文件编号" ,
df.max_size "文件最大大小(MB)" ,
df.total_size*df.PAGE_SIZE/1024/1024 "当前文件大小(MB)",
df.free_size *df.PAGE_SIZE/1024/1024 "文件空闲大小(MB)",
df.path "文件路径"
FROM
V$TABLESPACE AS ts,
V$DATAFILE AS df
2 3 4 5 6 7 8 9 10 11 12 WHERe
ts.type$=2
and ts.ID = df.GROUP_ID;13 14
行号 表空间 表空间编号 文件编号 文件最大大小(MB) 当前文件大小(MB) 文件空闲大小(MB) 文件路径
---------- --------- --------------- ------------ ---------------------- ---------------------- ---------------------- ---------------------
1 TEMP 3 0 67108863 128 127 /data/DAMENG/TEMP.DBF
缩小到了 128的样子。
我们再尝试重启数据库看看:
dmdba@localhost ~]$ DmServiceDMSERVER stop
Stopping DmServiceDMSERVER: [ OK ]
[dmdba@localhost ~]$ DmServiceDMSERVER start
Starting DmServiceDMSERVER: [ OK ]
[dmdba@localhost ~]$ disql SYSDBA/SYSDBA@localhost:15236
服务器[localhost:15236]:处于普通打开状态
登录使用时间 : 3.442(ms)
disql V8
SQL> SELECt
ts.NAME "表空间" ,
ts.ID "表空间编号" ,
df.id "文件编号" ,
df.max_size "文件最大大小(MB)" 2 3 4 5 ,
df.total_size*df.PAGE_SIZE/1024/1024 "当前文件大小(MB)",
df.free_size *df.PAGE_SIZE/1024/1024 "文件空闲大小(MB)",
df.path "文件路径"
FROM
V$TABLESPACE AS ts,
V$DATAFILE AS df
6 7 8 9 10 11 12 WHERe
ts.type$=2
and ts.ID = df.GROUP_ID;13 14
行号 表空间 表空间编号 文件编号 文件最大大小(MB) 当前文件大小(MB) 文件空闲大小(MB) 文件路径
---------- --------- --------------- ------------ ---------------------- ---------------------- ---------------------- ---------------------
1 TEMP 3 0 67108863 84 83 /data/DAMENG/TEMP.DBF
已用时间: 9.366(毫秒). 执行号:500.
重启释放的更彻底。
社区地址:https://eco.dameng.com