当前位置: 首页 > news >正文

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 usedFROM GV$TEMP_SPACE_HEADERGROUP BY tablespace_name
) temp_used,
(SELECT tablespace_name, SUM(bytes)/1024/1024 AS totalFROM dba_temp_filesGROUP 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 许可协议。转载请注明出处。

相关文章:

  • 高防IP通常会应用在哪些行业当中?
  • nt!MiFlushSectionInternal函数分析从nt!IoSynchronousPageWrite函数到Ntfs!NtfsFsdWrite函数
  • PHP「Not enough Memory」实战排错笔记
  • 便利的隐形代价?智能设备正在“偷听”你的生活——物联网时代的隐私深度危机
  • window显示驱动开发—DirectX 图形内核子系统(三)
  • clion与keil分别配置项目宏定义
  • 问卷调查[mqtt dht]
  • 【C/C++】单元测试实战:Stub与Mock框架解析
  • AI+实时计算如何赋能金融系统?DolphinDB 在国泰君安期货年度中期策略会的演讲
  • 安心联车辆监控管理平台应用场景分析
  • IPv6配置
  • 每天一个前端小知识 Day 14 - 前端状态管理深入实践
  • 网络安全的两大威胁:XSS与CSRF攻击实例解析
  • 【大数据】大数据产品基础篇
  • 电脑远程控制另一台电脑无法连接怎么办
  • 【github】从本地更新仓库里的文件笔记
  • 微信小程序:实现树形结构组件
  • P27:RNN实现阿尔茨海默病诊断
  • Spring,Spring MVC,Spring Boot 之间什么关系?
  • Linux信号机制:从入门到精通