1、首先我们创建一个事务级临时表
1 2 3 4 5 | CREATE GLOBAL TEMPORARY TABLE "SYSDBA"."TEMP_TRANSACTION" ( "ID" INT, "NAME" VARCHAR(20)) ON COMMIT DELETE ROWS STORAGE(ON TEMP); |
2、向表中插入1千万行数据,把临时表空间撑大
1 2 3 4 5 6 | begin for i in 1..10000000 loop insert into temp_transaction values(i,'abcdefg'); end loop; end; |
3、最后我们提交事务来清除数据,发现实际临时表空间占用的磁盘空间不变
1 | commit; |


4、这个时候我们可以通过函数,在线缩小临时表空间文件大小
SP_TRUNC_TS_FILE函数说明

获取ts_id,file_id
1 | select * from v$datafile; |

1 | SP_TRUNC_TS_FILE(3,0,64) |

5、设置临时表空间使用上限大小
dm.ini中参数TEMP_SPACE_LIMIT设置临时表空间使用上限,防止出现临时表空间暴涨导致服务器空间不足数据库宕机。