Oracle 临时表空间管理(Temporary Tablespace)

2024-03-17 06:36

本文主要是介绍Oracle 临时表空间管理(Temporary Tablespace),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Oracle临时表空间(Temporary Tablespace)主要用来存储数据库运行中产生的临时对象,例如SQL排序结果集,临时表等,这些对象的生存周期只有会话。本文总结了Oralce中涉及临时表空间的管理和优化操作。

目录

  • 一、临时表空间简介
  • 二、临时表空间管理
    • 2.1 创建临时表空间
    • 2.2 修改临时表空间
    • 2.3 查看空间使用情况
    • 2.4 收缩临时表空间
    • 2.5 删除临时表空间
  • 三、使用临时表空间组

一、临时表空间简介

在执行SQL时,经常会遇到排序操作,当结果集无法放在内存中时,Oracle就会使用临时表空间来排序。临时表空间中不能创建持久性对象,用户唯一能创建的就是临时表,而且随着用户会话退出,临时表也会被删除。

当Oracle安装完成时,默认就已经创建了1个临时表空间TEMP,且所有未显式指定使用其他临时表空间的用户,都会使用这个临时表空间,使用下面的SQL可以查询数据库的默认临时表空间:

select property_name, property_value
from database_properties
where property_name='DEFAULT_TEMP_TABLESPACE';

在这里插入图片描述

临时表空间的底层使用的是临时文件(tempfile),通常采用本地管理策略(Locally Management),临时表空间不会生成redo日志,根据其服务的实例数量还可以分为:

  • 本地临时表空间,通常保存在本地磁盘,只能给一个实例访问
  • 共享临时表空间:通常保存在共享存储上,可以被多个实例同时访问

二、临时表空间管理

虽然Oracle初始已经建立了一个临时表空间,但用户也可以根据自身需求对临时表空间进行定制。

2.1 创建临时表空间

使用create temporary tablespace语句创建临时表空间,语法和创建普通表空间类似,不同点在于其需要指定temporary和tempfile关键字。

示例:创建一个临时表空间temptbs01,文件大小20M,reuse关键字指示如果文件已存在则重用:

create temporary tablespace temptbs01 
tempfile '/u01/app/oracle/oradata/PROD/temptbs01.dbf' size 20m reuse;

在这里插入图片描述

如果开启了OMF特性,可以不指定文件属性,只提供表空间名称即可:

create temporary tablespace temptbs02;

在这里插入图片描述

创建好的临时表空间及其临时文件信息可以通过dba_temp_files查看:

select tablespace_name, file_name,status, autoextensible from dba_temp_files;

在这里插入图片描述

2.2 修改临时表空间

可以用alter tablespace语句修改表空间属性,例如添加,删除临时文件,修改在线/离线状态,调整临时文件大小等。

示例:为temptbs01添加一个数据文件,大小10M,自动扩展:

alter tablespace temptbs01 
add tempfile '/u01/app/oracle/oradata/PROD/temptbs01_2.dbf' size 10M 
autoextend on next 10m; 

在这里插入图片描述

示例:将上面添加的数据文件删除:

alter tablespace temptbs01 
drop tempfile '/u01/app/oracle/oradata/PROD/temptbs01_2.dbf';

在这里插入图片描述

示例:修改temptbs01临时文件的在线/离线状态(不能修改临时表空间的在线/离线状态):

alter database tempfile '/u01/app/oracle/oradata/PROD/temptbs01.dbf' offline;
alter database tempfile '/u01/app/oracle/oradata/PROD/temptbs01.dbf' online;

在这里插入图片描述

示例:修改临时文件的大小,将temptbs01的临时文件修改为30m:

alter database tempfile '/u01/app/oracle/oradata/PROD/temptbs01.dbf' resize 30m;

在这里插入图片描述

2.3 查看空间使用情况

查询dba_temp_free_space视图可以查看当前临时表空间的使用情况,free_space字段指示了可用空间:

select * from dba_temp_free_space;

在这里插入图片描述

2.4 收缩临时表空间

对于文件可以自动扩展的临时表空间,当空间不够时,Oracle会自动扩展文件大小,一个很大的任务,就可以导致临时表空间消耗很多磁盘。如果日常用不到这么大的表空间,可以手动收缩以回收磁盘空间。

回收表空间是一个在线操作,正在使用的会话可以正常分配空间,不受影响。

示例:用alter tablespace … shrink space …; 可以回收可用空间,keep子句指示尽量收缩到25m:

alter tablespace temptbs01 shrink space keep 25m;

在这里插入图片描述

或:用alter tablespace … shrink tempfile …; 指定收缩某个临时文件:

alter tablespace temptbs01 shrink tempfile '/u01/app/oracle/oradata/PROD/temptbs01.dbf' keep 20m;

在这里插入图片描述

2.5 删除临时表空间

使用alter tablespace … drop…;语句可以删除临时表空间,你可以选择是否保留临时文件,如果保留临时文件,下次再次指定同名文件时需要用reuse关键字重用文件。

示例:删除临时表空间temptbs01及其临时文件,省略including contents and datafiles子句则会保留临时文件:

drop tablespace temptbs01 including contents and datafiles;

在这里插入图片描述

三、使用临时表空间组

临时表空间组是一个逻辑概念,它由1或多个临时表空间组成,可以作为一个整体分配给数据库或用户使用。在高并发环境,多个临时表空间可以更好的减少争用现象,并且Oracle的并行执行特性也可以利用多个临时表空间提升执行性能。

临时表空间组不需要显式创建,只需要使用alter tablespace … tablespace group …; 将某个临时表空间加入组即可(创建表空间时也可加入)。

第一步,将temptbs01加入组group1,这会隐式创建group1:

alter tablespace temptbs01 tablespace group group1;

在这里插入图片描述

第二步(可选),可以继续将其他临时表空间加入组,组成员的数量没有限制:

alter tablespace temptbs02 tablespace group group1;

在这里插入图片描述

通过dba_tablespace_groups可以看到目前group1中已经有2个表空间:

select * from dba_tablespace_groups;

在这里插入图片描述

第三步:将组指定为数据库默认临时表空间(alter database)或指定给用户(alter user):

alter database default temporary tablespace group1;
alter user hr temporary tablespace group1;

在这里插入图片描述

使用alter database指定空的组名可以将临时表空间移出组,当最后一个表空间移出组时,组自动删除(先取消引用):

alter tablespace temptbs01 tablespace group '';

在这里插入图片描述

这篇关于Oracle 临时表空间管理(Temporary Tablespace)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/818117

相关文章

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

PLsql Oracle 下载安装图文过程详解

《PLsqlOracle下载安装图文过程详解》PL/SQLDeveloper是一款用于开发Oracle数据库的集成开发环境,可以通过官网下载安装配置,并通过配置tnsnames.ora文件及环境变... 目录一、PL/SQL Developer 简介二、PL/SQL Developer 安装及配置详解1.下

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

oracle如何连接登陆SYS账号

《oracle如何连接登陆SYS账号》在Navicat12中连接Oracle11g的SYS用户时,如果设置了新密码但连接失败,可能是因为需要以SYSDBA或SYSOPER角色连接,解决方法是确保在连接... 目录oracle连接登陆NmOtMSYS账号工具问题解决SYS用户总结oracle连接登陆SYS账号

Oracle数据库如何切换登录用户(system和sys)

《Oracle数据库如何切换登录用户(system和sys)》文章介绍了如何使用SQL*Plus工具登录Oracle数据库的system用户,包括打开登录入口、输入用户名和口令、以及切换到sys用户的... 目录打开登录入口登录system用户总结打开登录入口win+R打开运行对话框,输php入:sqlp

查询Oracle数据库表是否被锁的实现方式

《查询Oracle数据库表是否被锁的实现方式》本文介绍了查询Oracle数据库表是否被锁的方法,包括查询锁表的会话、人员信息,根据object_id查询表名,以及根据会话ID查询和停止本地进程,同时,... 目录查询oracle数据库表是否被锁1、查询锁表的会话、人员等信息2、根据 object_id查询被

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用