Oracle 临时表空间相关操作

一、临时表空间概述

临时表空间(Temporary Tablespace)是Oracle数据库中用于存储临时数据的特殊存储区域,其数据在会话结束或事务提交后自动清除,重启数据库后彻底消失。主要用途包括:

  • 存储排序操作(如ORDER BY)的中间结果
  • 支持哈希连接(Hash Join)等复杂查询
  • 索引创建时的临时数据存储
    ​​

核心特点​​:

  • 数据非永久性,关闭数据库后自动删除
  • 不能存储永久性对象(如表、视图)
  • 独立于永久表空间管理,避免影响主业务数据

二、核心操作详解

1. 查看临时表空间信息

1.1 基础查询
-- 查看所有临时表空间文件信息
SELECT tablespace_name, file_name, bytes/1024/1024 AS size_mb
FROM dba_temp_files;

-- 查看临时表空间使用详情(需SYS权限)
SELECT * FROM GV$TEMP_SPACE_HEADER;

-- 查看所有临时表空间文件信息、最大值、已使用、空闲大小
SELECT tablespace_name, file_name, bytes/1024/1024 AS used_mb, 
       maxbytes/1024/1024 AS max_mb, (bytes - maxbytes)/1024/1024 AS free_mb
FROM dba_temp_files

输出示例:

TABLESPACE_NAMEFILE_NAMESIZE_MB
TEMP/u01/temp01.dbf1024
TEMP_GRP/u01/temp_group01.dbf2048
1.2 监控使用率
SELECT 
    temp_used.tablespace_name,
    ROUND((total - used) * 100 / total, 2) AS free_percent
FROM (
    SELECT tablespace_name, SUM(bytes_used)/1024/1024 AS used
    FROM GV$TEMP_SPACE_HEADER
    GROUP BY tablespace_name
) temp_used,
(
    SELECT tablespace_name, SUM(bytes)/1024/1024 AS total
    FROM dba_temp_files
    GROUP BY tablespace_name
) temp_total
WHERE temp_used.tablespace_name = temp_total.tablespace_name;

结果解读:若free_percent持续低于20%,需考虑扩容

2. 创建临时表空间

2.1 基础语法
CREATE TEMPORARY TABLESPACE temp_new 
TEMPFILE '/u01/oradata/temp_new.dbf' 
SIZE 500M 
AUTOEXTEND ON NEXT 50M MAXSIZE 2G;

参数说明​​:

参数说明最佳实践建议
TEMPFILE定义临时表空间数据文件的物理路径和名称建议使用独立存储设备,避免与数据文件路径重叠
SIZE 500M初始分配空间大小根据业务峰值预估算(建议参考V$SORT_USAGE历史数据)
AUTOEXTEND ON启用文件自动扩展必须开启,但需配合MAXSIZE限制(避免磁盘占满)
NEXT 200M每次扩展的增量建议设置为初始大小的20%-50%(平衡扩展频率和碎片问题)
MAXSIZE 2G设置文件最大扩展限制预估未来3-6个月需求,建议预留20%-30%缓冲空间
TABLESPACE GROUP将表空间加入组管理组内建议保留2-3个成员实现负载均衡,组名需体现业务场景(如TEMP_GROUP_ANALYTICS
2.2 临时表空间组管理
-- 简单创建属于组的临时表空间
create temporary tablespace temp_grp_member 
TEMPFILE '/u01/temp_grp_member.dbf' 
SIZE 100M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;

-- 创建属于组的临时表空间
CREATE TEMPORARY TABLESPACE temp_grp_member 
TEMPFILE '/u01/temp_grp_member.dbf' 
SIZE 1G 
AUTOEXTEND ON 
TABLESPACE GROUP temp_group;
-- 将现有表空间加入组
ALTER TABLESPACE temp_old GROUP temp_group;

优势:实现负载均衡,自动分配临时段到组内成

3. 修改与维护

3.1 扩展临时表空间
方法适用场景示例
调整单文件大小快速扩容单个文件ALTER DATABASE TEMPFILE '…resize 2G;
启用自动扩展长期增长需求ALTER DATABASE TEMPFILE '…AUTOEXTEND ON;
添加新数据文件突发性空间不足ALTER TABLESPACE temp ADD TEMPFILE ‘…’;
3.2 修改默认临时表空间
-- 查看当前默认值
SELECT * FROM database_properties WHERE property_name = 'DEFAULT_TEMP_TABLESPACE';

-- 设置新默认(需SYS权限)
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp_new;

注意:修改后新用户默认使用新表空间,历史用户需手动调整


3.3 删除临时表空间
DROP TABLESPACE temp_new INCLUDING CONTENTS AND DATAFILES;

版权声明: 本文由 [dazhong2012] 创作,采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值