设为首页 加入收藏

TOP

Oracle临时表空间过大解决方法(一)
2018-03-13 09:06:39 】 浏览:221
Tags:Oracle 临时 空间 解决 方法

方案一:增加临时表空间的大小
--1.临时表空间的使用情况
SELECT D.tablespace_name,
      SPACE "SUM_SPACE(M)",     
      blocks "SUM_BLOCKS",     
      used_space "USED_SPACE(M)",     
      Round(Nvl(used_space, 0) / SPACE * 100, 2) "USED_RATE(%)",     
      SPACE - used_space "FREE_SPACE(M)"
  FROM (SELECT tablespace_name,             
              Round(SUM(bytes) / (1024 * 1024), 2) SPACE,             
              SUM(blocks) BLOCKS       
          FROM dba_temp_files       
        GROUP BY tablespace_name) D,     
      (SELECT tablespace,             
              Round(SUM(blocks * 8192) / (1024 * 1024), 2) USED_SPACE       
          FROM v$sort_usage       
        GROUP BY tablespace) F
 WHERE D.tablespace_name = F.tablespace(+)     
  AND D.tablespace_name like 'TEMP%';


--查看临时表空间的总大小和最大扩展大小(能看到数据文件)
select file_name,
      tablespace_name,
      bytes / 1024 / 1024 MB,
      autoextensible,
      maxbytes / 1024 / 1024 MAX_MB
  from dba_temp_files;


--增加临时表空间的大小
alter tablespace temp1 add tempfile '/data/prod/proddata/temp013.dbf' size 4G;
alter tablespace temp2 add tempfile '/data/prod/proddata/temp024.dbf' size 4G;


--方案二:重建临时表空间,解决临时表空间过大的问题。


--0.查看目前默认的临时表空间
select *
  from database_properties
 where property_name = 'DEFAULT_TEMP_TABLESPACE';


--1.创建中转临时表空间
create temporary tablespace temp3 tempfile '/data/prod/proddata/temp31.dbf' size 4G tablespace group temp;
create temporary tablespace temp4 tempfile '/data/prod/proddata/temp41.dbf' size 4G tablespace group temp;


--2.删除原临时表空间组中的临时表空间
--2.1从默认临时表空间组temp中移除temp1和temp2;
ALTER TABLESPACE temp1 TABLESPACE GROUP '';
ALTER TABLESPACE temp2 TABLESPACE GROUP '';


--2.2删除临时表空间temp1和temp2
drop tablespace temp1 including contents and datafiles;
drop tablespace temp2 including contents and datafiles;


--2.3如果删除表空间的时候,hang住的话,可以使用下列语句,先把运行在temp临时表空间的sql语句kill掉,这样的sql语句多为排序的语句
Select se.username,
      se.sid,
      se.serial#,
      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;


--2.4 kill相关进程
alter system kill session '584,23181';
alter system kill session '196,64972';
alter system kill session '262,19832';
alter system kill session '324,40273';
alter system kill session '326,38967';
alter system kill session '1266,54596';
 
or
--重启DB
--关闭应用-->关闭监听-->shutdown immediate
--startup-

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Redis数据库读写分离的实现 下一篇MySQL 8的关键新特性

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目