共计 2640 个字符,预计需要花费 7 分钟才能阅读完成。
这篇文章主要介绍“Oracle Temp 表空间切换方法是什么”,在日常操作中,相信很多人在 Oracle Temp 表空间切换方法是什么问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle Temp 表空间切换方法是什么”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!
一.TEMP 表空间作用
临时表空间主要用途是在数据库进行排序运算、管理索引、访问视图等操作时提供临时的运算空间,当运算完成之后系统会自动清理。当 oracle 里需要用到 sort 的时候,PGA 中 sort_area_size 大小不够时,将会把数据放入临时表空间里进行排序,同时如果有异常情况的话,也会被放入临时表空间 , 正常来说,在完成 Select 语句、create index 等一些使用 TEMP 表空间的排序操作后,Oracle 是会自动释放掉临时段的。注意这里的释放,仅仅是将这些空间标记为空闲,并可重用,真正占用的磁盘空间并没有释放。所以 Temp 表空间可能会越来越大。
排序是很耗资源的,Temp 表空间满了 , 关键是优化你的语句,尽量使排序减少才是上策 .
总结为:
临时表空间的主要作用:
索引 create 或 rebuild;
Order by 或 group by;
Distinct 操作;
Union 或 intersect 或 minus;
Sort-merge joins;
analyze.
二、oracle temp 表空间切换
2.1 查询 TEMP 表空间使用情况:
SELECT temp_used.tablespace_name,
total – used AS Free ,
total AS Total ,
ROUND (NVL (total – used, 0) * 100 / total, 3) Free percent
FROM ( SELECT tablespace_name, SUM (bytes_used) / 1024 / 1024 used
FROM GV$TEMP_SPACE_HEADER
GROUP BY tablespace_name) temp_used,
( SELECT tablespace_name, SUM (bytes) / 1024 / 1024 total
FROM dba_temp_files
GROUP BY tablespace_name) temp_total
WHERE temp_used.tablespace_name = temp_total.tablespace_name;
数据库默认表空间:
SQL SELECT PROPERTY_NAME, PROPERTY_VALUE
2 FROM DATABASE_PROPERTIES
3 WHERE PROPERTY_NAME = DEFAULT_TEMP_TABLESPACE
2.2 新建 Temp2 表空间
create temporary tablespace temp1 tempfile D:\APP\ADMINISTRATOR\ORADATA\SDXJ\TEMP2.dbf size 20M autoextend on next 1M maxsize unlimited
tablespace group
extent management local uniform size 1M;
2.3 修改数据库默认表空间为 Temp1
SQL alter database default temporary tablespace temp1;
数据库已更改。
2.4 删除原来表空间
退出 session,删除原表空间
DROP TABLESPACE TEMP INCLUDING CONTENTS AND DATAFILES;
删除完成。
三、Temp 表空间一些常用查询
3.1、更改系统的默认临时表空间:
– 查询默认临时表空间
select * from database_properties where property_name= DEFAULT_TEMP_TABLESPACE
– 修改默认临时表空间
alter database default temporary tablespace temp1;
– 所有用户的默认临时表空间都将切换为新的临时表空间:
select username,temporary_tablespace,default_ from dba_users;
– 更改某一用户的临时表空间:
alter user scott temporary tablespace temp;
3.2 查找消耗资源比较的 sql 语句
/* Formatted on 2015/7/14 21:58:17 (QP5 v5.163.1008.3004) */
SELECT se.username,
se.sid,
su.extents,
su.blocks * TO_NUMBER (RTRIM (p.VALUE)) AS Space,
tablespace,
segtype,
sql_text
FROM v$sort_usage su,
v$parameter p,
v$session se,
v$sql s
WHERE p.name = db_block_size
AND su.session_addr = se.saddr
AND s.hash_value = su.sqlhash
AND s.address = su.sqladdr
ORDER BY se.username, se.sid
3.3、查看当前临时表空间使用大小与正在占用临时表空间的 sql 语句
select sess.SID, segtype, blocks * 8 / 1000 MB , sql_text
from v$sort_usage sort, v$session sess, v$sql sql
where sort.SESSION_ADDR = sess.SADDR
and sql.ADDRESS = sess.SQL_ADDRESS
order by blocks desc;
4.4 对临时表空间进行 shrink(11g 新增的功能)
– 将 temp 表空间收缩为 20M
alter tablespace temp1 shrink space keep 20M;
– 自动将表空间的临时文件缩小到最小可能的大小
ALTER TABLESPACE temp1 SHRINK TEMPFILE’…/temp01.dbf’
到此,关于“Oracle Temp 表空间切换方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!