临时表空间保存了会话中临时的数据信息, 临时表空间能提高不适合于在内存里进行的并发的排序操作,和提高排序时的空间管理操作.
临时表空间用于存储:临时表空间的空间分配:V$SORT_SEGMENT:查看临时表空间排序段里已分配(allocated)和未分配/释放(deallocated)的空间情况.
当排序操作完成后,被分配的空间并不会被释放,而是被标记为free并且可重新利用.
DBA_TEMP_FREE_SPACE:该视图显示临时表空间里已分配的和未分配的空间情况.
SQL> SELECT * from DBA_TEMP_FREE_SPACE;
TABLESPACE_NAME TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE
----------------------------------- --------------- --------------- ----------
TEMP 250609664 250609664 249561088
创建临时表空间:SQL>create temporary tablespace lmtemp
tempfile '/data/oradata/orcl/lmtemp.dbf' size 10M
EXTENT MANAGEMENT LOCAL UNIFORM. SIZE 2M;
以上实例创建了一个临时表空间,每个extent盘区大小为2M(2M表示数据文件bitmap里的一个bit)
Each 2M extent (which is the equivalent of 1000 blocks when the
standard block size is 2K) is represented by a bit in the bitmap for
the file.
创建临时表空间组:并没有哪个命令显式地创建临时表空间组,而是在第一次给组添加成员时自动创建,在删除最后一个成员是自动删除.
1. 可以在CREATE TEMPORARY TABLESPACE里创建组或给组添加成员
SQL> CREATE TEMPORARY TABLESPACE lmtemp2 TEMPFILE '/u02/oracle/data/lmtemp201.dbf'
SIZE 50M
TABLESPACE GROUP group1;
2. 可以用ALTER TABLESPACE创建组或添加成员.
SQL> ALTER TABLESPACE lmtemp TABLESPACE GROUP group2;
3. 删除组成员
SQL>
ALTER TABLESPACE lmtemp3 TABLESPACE GROUP '';
4. 设置临时表空间组为数据块默认的临时表空间
SQL> alter database default temporary tablespace group1;
5. 查看临时表空间组
SQL> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------
GROUP1 TEMP
GROUP1 LMTEMP
压缩临时表空间:正如前面所说,当排序操作完成后,分配的空间并不会立即被释放,而是被标记为free可被重新使用. 因此,一个大的排序操作可能会产生大量的unused空间.可以利用shrink来释放那些空间.
可以在数据库打开的状态下shrink临时表空间或临时数据文件,并不会影响正在排序的操作,也可以执行新的排序操作.
例如:
SQL>
ALTER TABLESPACE lmtemp1 SHRINK SPACE KEEP 20M;
(optional KEEP clause defines a minimum size for the tablespace or tempfile.)
SQL>
ALTER TABLESPACE lmtemp2 SHRINK TEMPFILE '/u02/oracle/data/lmtemp02.dbf';
由于这个SQL语句中没有指定KEEP选项,则压缩到最小.
注: 1.每个组至少要一个成员,理论上可以有无限个成员. 2. 当删除组里的最后一个成员后,该组自动删除(除了第三点提到的情况) 3. 当表空间组设为数据库默认的临时表空间时,不能删除该组的仍一成员.如需删除则必须先把该成员从该组删除,再删除表空间.但要保证该组至少有一个成员.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9466564/viewspace-608911/
,如需转载,请注明出处,否则将追究法律责任。