临时表空间过大解决方法

解决临时表空间过大有两种方法,方法一增加临时表空间的大小,方法二重建临时表空间,解决临时表空间过大的问题。

方案一:增加临时表空间的大小
--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-->启动监听-->执行以下操作后打开应用

--2.5 创建临时表空间,并加入临时表空间组temp
create temporary tablespace temp1 tempfile '/data/prod/proddata/temp11.dbf' size 4G tablespace group temp;
create temporary tablespace temp2 tempfile '/data/prod/proddata/temp21.dbf' size 4G tablespace group temp;

--2.6 给临时表空间组temp的成员temp1,temp2,temp3,temp4 各增加一个成员。
alter tablespace temp1 add tempfile '/data/prod/proddata/temp12.dbf' size 4G;
alter tablespace temp2 add tempfile '/data/prod/proddata/temp22.dbf' size 4G;
alter tablespace temp3 add tempfile '/data/prod/proddata/temp32.dbf' size 4G;
alter tablespace temp4 add tempfile '/data/prod/proddata/temp42.dbf' size 4G;

--2.7查看临时表空间组temp
select * from dba_tablespace_groups;

--3 临时表空间组仍然使用99.98%,
--3.1为每个临时表空间添加4G空间
alter tablespace temp1 add tempfile '/data/prod/proddata/temp13.dbf' size 4G;
alter tablespace temp2 add tempfile '/data/prod/proddata/temp23.dbf' size 4G;
alter tablespace temp3 add tempfile '/data/prod/proddata/temp33.dbf' size 4G;
alter tablespace temp4 add tempfile '/data/prod/proddata/temp43.dbf' size 4G;

原文地址:http://blog.51cto.com/peenboo/2083890

时间: 2024-11-05 18:38:51

临时表空间过大解决方法的相关文章

oracle 11g解决临时表空间过大的问题

有的数据库在使用过程中由于某些操作会导至临时表空间过大,由于临时表空间的工作机制,在作业完成后该部分临时表空间也不会释放. 通过重建临时表空间的方法可以解决这个问题,但操作还是有点繁琐. 在操作中发现,通过resize tempfile可以释放临时表空间,如果有多个tempfile,通过resize tempfile 1可以释放整个临时表空间,不单是tempfile 1.然后可能通过resize或删除其它临时表空间数据文件达到释放临时表空间所占的存储资源.

linux下安装Oracle时交换空间不足的解决方法

摘:linux下安装Oracle时交换空间不足的解决方法 linux上安装Oracle时交换空间不足的解决办法 增加交换空间有两种方法: 严格的说,在系统安装完后只有一种方法可以增加swap,那就是本文的第二种方法, 至于第一种方法应该是安装系统时设置交换区. 1.使用分区: 在安装OS时划分出专门的交换分区,空间大小要事先规划好,启动系统时自动进行mount. 这种方法只能在安装OS时设定,一旦设定好不容易改变,除非重装系统. 2.使用swapfile:(或者是整个空闲分区) 新建临时swap

关于STM8空间不足的解决方法

STM8虽然功能齐全,但是空间不足也是经常出来的情况.要么.text overflow,要么.bss overflow,让人头疼.这里把一些优化方案列出来,让空间得到充分利用: 1.在Project settings下,C Compiler,Optimizations选择Customize 重点是把Split Functions选上. 意思就是只编译用到的函数,不然编译器会很傻地把你用到的C文件里所有函数都编译进去,空间当然不够啦! 2.再到Linker下,Category选择Input 然后看

双系统(win7+ubuntu)ubuntu磁盘空间不足时解决方法

原文网址: http://www.lupaworld.com/thread-868507-1-1.html 问题描述: 双系统(win7+ubuntu)ubuntu系统提醒磁盘空间不足,又不想重装系统. 解决思路:第一步,在win7下划出一块可用空间:第二步,利用gparted软件将此可用空间划给ubuntu系统:第三步,最后利用grub修复技术修复损坏的grub. 具体步骤: 第一步:在win7下划出一块可用空间 登录win7系统--> (右击)计算机-->  属性  --> 存储 -

win8 C 盘 突然少了 十几G 空间 原因,解决方法

原因: win8 默认最大虚拟内存为 16G多,但现在电脑本身内存就大,所以应该不用了.我现在电脑本身内存是16G. 如果C盘空间大,这个无所谓了,如果C盘空间小可以按以下操作,拿回16G空间: 解决方法: 我的电脑右键->属性->高级系统设置->高级->性能的 设置->高级->虚拟内存,点更改->去掉自动管理所有驱动器分布文件大小 点下面的自定义大小,这里你可以自己选,真多大都可以,我填的,初始化大小 512,最大1024,因为我的C盘只有20几G空间了: 这样

sqlserver日志文件太大解决方法

SQL Server 的事务日志意外增大或充满的处理方法 事务日志文件Transaction Log File是用来记录数据库更新情况的文件,扩展名为ldf. 在 SQL Server 7.0 和 SQL Server 2000 中,如果设置了自动增长功能,事务日志文件将会自动扩展. 一般情况下,在能够容纳两次事务日志截断之间发生的最大数量的事务时,事务日志的大小是稳定的,事务日志截断由检查点或者事务日志备份触发. 然而,在某些情况下,事务日志可能会变得非常大,以致用尽空间或变满.通常,在事务日

msSQL 引起磁盘空间不足的解决方法

 一.msSQL errorlog 引起磁盘空间不足的方法 执行一次EXEC sp_cycle_errorlog就会产生一个新的errorlog去覆盖旧errorlog.只要循环7次就可以把errorlog都覆盖一遍. 二.简单压缩日志及数据库文件的方法 1.右建数据库属性窗口--故障还原模型--设为简单: 2.右建数据库所有任务--收缩数据库: 3.右建数据库属性窗口--故障还原模型--设为大容量日志记录. 对应脚本代码: USE [master] GO ALTER DATABASE DB

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space(Java堆空间内存溢出)解决方法

http://hi.baidu.com/619195553dream/blog/item/be9f12adc1b5a3e71f17a2e9.html问题描述Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 解决方案[转] 一直都知道可以设置jvm heap大小,一直用eclipse写/调试java程序.一直用命令行or console加参数跑程序.现象:在eclipse的配置文件eclipse.

SQL Server 2008 R2占用内存越来越大解决方法

最近开发sql server数据库项目的过程中发现了这么一个问题,后台网站内存占用95%,通过任务管理器查看占内存的进程sqlserver.exe,是因为SQL Server 2008 R2运行越久,占用内存会越来越大. 因为sql server 2008 本身内存回收机制做的不好 所以只能这么强制设置.现在明白了,原来是微软R2系列的服务器&数据库问题的通病. 方法: 进入Sql server 企业管理器,在数据库服务器名称上点击[右键],选择[属性],然后,找到[内存]选项,在右边的[使用A