#TEMP表空间管理
TEMP临时表空间主要用于临时表的段分配以及与临时表相关undo空间分配,并存储临时表数据和临时表相关的undo。
临时表及其相关的undo记录被存储在数据库的临时表空间中,并且不生成redo信息,从而减少了UNDO表空间中存储的undo数量,也减少了数据库redo日志的大小;提升数据库性能。
分布式部署中,不允许手动创建新的TEMP临时表空间。
在主备部署场景中,主库创建临时表空间时,备库会同步创建临时表空间和影子状态的同名临时文件,影子文件只会记录在ctrlfile中,不会在磁盘上生成实体物理文件,可查询V$DATAFILE的SHADOW字段获取其相关信息。若备库升主后因临时文件为影子状态无法使用,需手动添加新的临时文件供使用。如需通过DROP TEMPFILE删除影子文件,需确保创建该临时文件的数据库为当前主库(若不是,需先切换为主库)并在该主库上执行DROP TEMPFILE语句,其他备库收到DROP TEMPFILE的redo后才会清理影子记录。
创建TEMP表空间
示例(单机部署)
CREATE TEMPORARY TABLESPACE temp_shared TEMPFILE '?/dbfiles/temp_shared' SIZE 4M;
示例(共享集群部署)
CREATE TEMPORARY TABLESPACE temp_shared TEMPFILE '+DG0/dbfiles/temp_shared' SIZE 4M;
创建本地TEMP表空间
示例(共享集群部署)
CREATE LOCAL TEMPORARY TABLESPACE FOR ALL temp_local TEMPFILE '?/dbfiles/temp_local' SIZE 4M;
为TEMP表空间添加数据文件
示例
ALTER TABLESPACE temp ADD TEMPFILE 'temp01' SIZE 10M AUTOEXTEND ON;
示例(共享集群部署)
ALTER TABLESPACE temp_shared ADD TEMPFILE '+DG0/dbfiles/temp_shared01' SIZE 10M AUTOEXTEND ON;
Note:
共享集群部署中,TEMP表空间与本地TEMP表空间均支持添加YFS路径的文件,但只有本地TEMP表空间可以添加本地磁盘路径的文件。
为TEMP表空间调整数据文件大小
分布式部署/共享集群部署中无法使用此功能。
示例(单机部署)
ALTER DATABASE TEMPFILE 'temp01' RESIZE 20M;
为TEMP表空间删除数据文件
示例
ALTER TABLESPACE temp DROP TEMPFILE 'temp01';
示例(共享集群部署)
ALTER TABLESPACE temp_shared DROP TEMPFILE '+DG0/dbfiles/temp_shared01';
删除TEMP表空间
示例(单机、共享集群部署)
DROP TABLESPACE temp_shared INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
查看tempfile信息
可以查询DBA_TEMP_FILES
视图获取临时表空间数据文件基本信息。
Note:
本文以单机部署为例,不同部署形态的查看方法相同但$YASDB_DATA/dbfiles/temp路径不同,具体请以实际返回结果为准。
示例
SELECT FILE_ID,FILE_NAME,STATUS,BYTES/1024/1024,AUTOEXTENSIBLE,TABLESPACE_NAME,MAXBYTES/1024/1024,INCREMENT_BY FROM DBA_TEMP_FILES;
FILE_ID FILE_NAME STATUS BYTES/1024/1024 AUTOEXTENSIBLE TABLESPACE_NAME MAXBYTES/1024/1024 INCREMENT_BY
------------ ------------------------------------------------- --------- --------------- -------------- ------------------ ------------------ ------------
3 /data/yashan/yasdb_data/db-1-1/dbfiles/temp ONLINE 64 ON TEMP 524288 8192
4 /data/yashan/yasdb_data/db-1-1/dbfiles/swap ONLINE 64 ON SWAP 524288 8192
此外,还可查询V$TEMP_EXTENT_POOL
动态视图获取当前TEMP表空间的EXTENT分配情况。
示例
SELECT TABLESPACE_NAME,FILE_ID,EXTENTS_CACHED,EXTENTS_USED,BLOCKS_CACHED,BLOCKS_USED,BYTES_CACHED,BYTES_USED,INTER_FNO
FROM V$TEMP_EXTENT_POOL
WHERE TABLESPACE_NAME='TEMP';
TABLESPACE_NAME FILE_ID EXTENTS_CACHED EXTENTS_USED BLOCKS_CACHED BLOCKS_USED BYTES_CACHED BYTES_USED INTER_FNO
---------------------------------------------------------------- ------------ -------------- ------------ ------------- ----------- ------------ ----------- ------------
TEMP 2 64 64 512 512 4194304 4194304 0
TEMP 3 0 0 0 0 0 0 1
TEMP 4 0 0 0 0 0 0 2