问题:临时表空间的 TEMPFILE(s) 变大后如何调整它们的大小?
大型排序操作会导致临时表空间变得非常大,因此在此类操作之后可能需要“缩小”。在 Oracle 11g 之前,没有 SQL 命令来释放未使用的已分配临时空间。此问题的一种解决方法是创建一个较小的新空临时表空间,将这个新表空间分配给用户,然后删除旧表空间。此过程的缺点是它要求在旧临时表空间被删除时不会在旧临时表空间中发生任何活动的排序操作。
在 Oracle 11g 中,添加了一个新特性,可用于收缩临时表空间。此命令可用于仅收缩本地管理的临时表空间:
ALTER TABLESPACE tablespace SHRINK SPACE | TEMPFILE tempfile_name [KEEP size];
所述SHRINK SPACE子句允许用户收缩临时表空间,而SHRINK TEMPFILE允许临时文件的收缩。
可选的KEEP子句定义了表空间可以收缩到的下限。对于自动可扩展表空间,MAXSIZE 正好相反。如果不指定,系统会尽量缩小,只要满足其他存储属性。否则,一旦表空间/临时文件已经达到通过 KEEP 选项指定的大小,收缩将停止。