Oracle临时表空间管理及清理策略
Oracle临时表空间满的处理步骤
Oracle临时表空间主要用来做查询和存放一些缓冲区数据。
临时表空间消耗的主要原因是需要对查询的中间结果进行排序。
重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp 表空间会一直增长。
直到耗尽硬盘空间。
临时表空间不足,会产生如下报错:网上有人猜测在磁盘空间的分配上,oracle使用的是贪心算法,如果上次磁盘空间消耗达到1GB,那么临时表空间就是1GB。
也就是说当前临时表空间文件的大小是历史上使用临时表空间最大的大小。
临时表空间的主要作用:索引create或rebuildOrder by 或 group byDistinct 操作Union 或 intersect 或 minusSort-merge joinsanalyze清除临时表空间的方法治标不治本从根本上降低temp表空间的膨胀的方法有2个:1 设置合理的pga或sort_area_size2 优化引起disk sort的sql清除并重建临时表空间的步骤:0.shutdown immediate;1.startup --启动数据库2.create temporary tablespace TEMP2 TEMPFILE'E:/oracle/oradata/battery/temp02.dbf' SIZE 512M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED; --创建中转临时表空间3.alter database default temporary tablespace temp2;--改变缺省临时表空间为刚刚创建的新临时表空间temp24.drop tablespace temp including contents and datafiles;--删除原来临时表空间5. create temporary tablespace TEMP TEMPFILE 'E:/oracle/oradata/battery/temp.dbf' SIZE 512M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED; --重新创建临时表空间6.alter database default temporary tablespace temp;--重置缺省临时表空间为新建的temp表空间7.drop tablespace temp2 including contents and datafiles;--删除中转用临时表空间8.alter user backwardsys temporary tablespace temp; --重新指定用户表空间(用户名)为重建的临时表空间9.可通过语句select username,default_tablespace,temporary_tablespace from dba_users 来查询数据库用户的临时表空间。
Oracle-undo-表空间管理
Oracle-undo-表空间管理Oracle的Undo表空间管理是Oracle数据库中非常重要而又基础的管理工作之一。
因为数据库中的Undo表空间与事务有着紧密的联系,影响着数据库的性能和稳定性。
本文将对Oracle的Undo表空间管理进行详细介绍,包括Undo表空间的概念、作用、管理方法、优化等方面。
一、Undo表空间的概念Undo表空间是用来存储Oracle数据库中操作的回滚信息,主要的作用是进行事务的回滚和恢复。
在Oracle数据库中,事务的ACID属性可以保证数据的完整性和一致性,而Undo表空间就是为了保证事务的ACID属性而存在的。
在Oracle数据库中,Undo表空间分为两种类型:System Undo表空间和User Undo表空间。
系统Undo表空间是由系统自动创建的一个表空间,用于存储系统级的回滚信息,用户不能自己创建或删除该表空间。
而用户Undo表空间则是由用户自己创建的,用来存储用户级别的回滚信息,一个数据库中可以有多个用户Undo表空间。
二、Undo表空间的作用Undo表空间的作用非常重要,它主要用来完成以下几个方面的功能:1. 事务的回滚当某个事务需要回滚时,Oracle会将该事务所做的修改操作写入到Undo表空间中,然后撤销这些操作来回滚事务。
因此Undo表空间的存储能力和速度直接影响着Oracle数据库回滚事务的性能和效率。
2. 数据库恢复当数据库需要恢复时,Oracle会利用Undo表空间中的回滚信息将数据库恢复到特定的时间点。
因此Undo表空间存储的时间范围和存储能力对数据库恢复能力有着直接的影响。
3. MVCC机制在Oracle数据库中,MVCC(多版本并发控制)机制是一种用来实现并发控制的技术,它需要利用Undo表空间中的回滚信息来实现数据的版本控制。
当多个事务同时对一个数据进行操作时,Undo表空间就派上用场了。
三、Undo表空间的管理方法为了更好地管理Undo表空间,我们需要掌握以下几种管理方法:1. 创建Undo表空间在Oracle数据库中,可以通过语句CREATE UNDO TABLESPACE来创建Undo表空间。
Oracle tablespace (表空间)的创建、删除、修改、扩展及检查等
Oracle tablespace (表空间)的创建、删除、修改、扩展及检查等oracle 数据库表空间的作用1.决定数据库实体的空间分配;2.设置数据库用户的空间份额;3.控制数据库部分数据的可用性;4.分布数据于不同的设备之间以改善性能;5.备份和恢复数据。
--oracle 可以创建的表空间有三种类型:1.temporary: 临时表空间,用于临时数据的存放;create temporary tablespace "sample"......2.undo : 还原表空间. 用于存入重做日志文件.create undo tablespace "sample"......3.用户表空间: 最重要,也是用于存放用户数据表空间create tablespace "sample"......--注:temporary 和undo 表空间是oracle 管理的特殊的表空间.只用于存放系统相关数据.--oracle 创建表空间应该授予的权限1.被授予关于一个或多个表空间中的resource特权;2.被指定缺省表空间;3.被分配指定表空间的存储空间使用份额;4.被指定缺省临时段表空间。
select tablespace_name "表空间名称",status "状态",extent_management "区管理方式",allocation_type "磁盘扩展管理方式",segment_space_management "段管理方式" from dba_tablespaces;--查询各个表空间的区、段管理方式--1、建立表空间--语法格式:create tablespace 表空间名datafile '文件标识符' 存储参数[...]|[minimum extent n] --设置表空间中创建的最小范围大小|[logging|nologging]|[default storage(存储配置参数)]|[online|offline]; --表空间联机\脱机|[permanent|temporary] --指定该表空间是用于保存永久的对象还是只保存临时对象 |[...]--其中:文件标识符=’文件名’[size整数[k\m][reuse]--实例create tablespace data01datafile '/oracle/oradata/db/data01.dbf' size 500muniform size 128k; --指定区尺寸为128k,如不指定,区尺寸默认为64kcreate tablespace "test"loggingdatafile 'd:\oracle\oradata\oracle\sample.ora' size 5m,'d:\oracle\oradata\oracle\dd.ora' size 5mextent management localuniform segment space managementauto;--详解/*第一: create tablespace "sample"创建一个名为"sample" 的表空间.对表空间的命名,遵守oracle 的命名规范就可了. 第二: logging 有nologging 和logging 两个选项,nologging: 创建表空间时,不创建重做日志.logging 和nologging正好相反, 就是在创建表空间时生成重做日志.用nologging时,好处在于创建时不用生成日志,这样表空间的创建较快,但是没能日志,数据丢失后,不能恢复;但是一般我们在创建表空间时,是没有数据的,按通常的做法,是建完表空间,并导入数据后,是要对数据做备份的;所以通常不需要表空间的创建日志,因此,在创建表空间时,选择nologging,以加快表空间的创建速度.第三: datafile 用于指定数据文件的具体位置和大小.datafile 的文件是建立表空间后创建的,不过文件路径必须存在才是合法的datafile设置如: datafile 'd:\oracle\oradata\ora92\luntan.ora' size 5m说明文件的存放位置是'd:\oracle\oradata\ora92\luntan.ora' , 文件的大小为5m.如果有多个文件,可以用逗号隔开:如:datafile 'd:\oracle\oradata\ora92\luntan.ora' size 5m, 'd:\oracle\oradata\ora92\ dd.ora' size 5m但是每个文件都需要指明大小.单位以指定的单位为准如5m 或500k.对具体的文件,可以根据不同的需要,存放大不同的介质上,如磁盘阵列,以减少io竟争. 指定文件名时,必须为绝对地址,不能使用相对地址.第四: extent management local 存储区管理方法在字典中管理(dictionary):将数据文件中的每一个存储单元做为一条记录,所以在做dm操作时,就会产生大量的对这个管理表的delete和update操作.做大量数据管理时,将会产生很多的dm操作,严得的影响性能,同时,长时间对表数据的操作,会产生很多的磁盘碎片.本地管理(local):用二进制的方式管理磁盘,有很高的效率,同进能最大限度的使用磁盘.同时能够自动跟踪记录临近空闲空间的情况,避免进行空闲区的合并操作。
oracle清空表的语句
oracle清空表的语句摘要:I.简介- 介绍Oracle数据库- 介绍清空表的语句II.清空表的语句- 删除表中所有记录- 使用TRUNCATE TABLE语句- 使用DROP TABLE语句III.注意事项- 避免数据丢失- 确保操作合法IV.结论- 总结清空表的语句- 强调谨慎操作正文:I.简介Oracle是一种广泛使用的关系型数据库管理系统,其强大的功能和稳定性深受用户的喜爱。
在Oracle数据库中,清空表的语句是经常用到的操作。
它可以用于删除表中所有记录,以便重新填充数据或进行其他操作。
II.清空表的语句在Oracle数据库中,有三种清空表的语句:1.删除表中所有记录使用DELETE语句可以删除表中所有满足特定条件的记录。
例如:```sqlDELETE FROM table_name WHERE condition;```其中,`table_name`是表名,`condition`是删除记录的条件。
2.使用TRUNCATE TABLE语句TRUNCATE TABLE语句可以快速删除表中的所有记录,但无法回滚此操作。
例如:```sqlTRUNCATE TABLE table_name;```其中,`table_name`是表名。
3.使用DROP TABLE语句DROP TABLE语句可以删除整个表,包括表结构和相关数据。
例如:```sqlDROP TABLE table_name;```其中,`table_name`是表名。
III.注意事项在清空表时,需要注意以下几点:1.避免数据丢失清空表时,务必确保已经备份了重要数据,以防止数据丢失。
2.确保操作合法在进行清空表的操作时,请确保您具有合法的权限。
否则,可能会导致操作失败或数据泄露。
IV.结论总之,在Oracle数据库中,清空表的语句有多种方法,包括DELETE、TRUNCATE TABLE和DROP TABLE。
Oracle10g的临时表空间占满之后的解决方法。
Oracle10g的临时表空间占满之后的解决方法。
公司客户数据库用了一段时间之后,总是出现磁盘被占满的情况。
基本上这个情况要么就是undo表空间很大,要么就是临时表空间很大,这个时候就需要进行转储undo表空间或者临时表空间。
以下是解决方法。
---解决临时表空间Temp的方法TEMP文件尚未调整,还是16G,首先创建了一个新的TEMP文件并设定为缺省临时表空间SQL> create temporary tablespace TEMP3 TEMPFILE '/opt/oracle/oradata/cuss/TEMP2.dbf' size 20m reuse autoextend off;SQL>alter database default temporary tablespace "TEMP2"结果这个情况下做exp产生ORA-01403的错误,后来得知是因为TEMP临时表空间容量过小的原因重新创建一个TEMP3文件,初始大小1G,每次增长200M,最大限制为4G。
SQL> create temporary tablespace TEMP3 TEMPFILE'/opt/oracle/oradata/cuss/TEMP3.dbf' size 1000m reuse autoextend on next 200m maxsize 4000m;把缺省临时表空间指向这个新建的TEMP3。
SQL>alter database default temporary tablespace "TEMP3"删除原有的临时表空间文件和操作系统中的对应物理文件,释放磁盘空间SQL>drop tablespace temp2 including contents and datafiles;重新做exp导出,导出成功。
至此调整结束。
Oracle临时表空间不足和批处理缓慢问题探讨
Oracle临时表空间不足和批处理缓慢问题探讨谭红斌【摘要】数据库系统出现问题时,会导致整个系统不稳定.文章分析了Orcale临时表空间不足和批量处理时运行速度缓慢的原因,并给出了解决办法.【期刊名称】《天中学刊》【年(卷),期】2012(027)002【总页数】3页(P36-38)【关键词】SQL;hash;join;临时表空间【作者】谭红斌【作者单位】驻马店职业技术学院,河南驻马店463000【正文语种】中文【中图分类】TP392笔者所在学院的学生管理系统后台使用的是Oracle数据库.在每天凌晨批处理期间,ALERT日志频繁报出临时表空间不足的告警信息,导致批量程序运行失败.在对临时表空间进行多次扩容后(从40 GB增加到 60 GB,再增加到 100 GB),问题仍然无法有效地解决.即使在批量执行成功的时候,也需要执行很长时间才能完成.为了解决此问题,急需对该问题进行全面排查,以找到解决办法.根据以往的经验,笔者分析认为造成这一问题的原因可能是服务器硬件存在性能问题、操作系统设置有问题或者是应用本身的 SQL语句编写有问题.为此,笔者衡量服务器的运算能力以及该数据库的负载,使用测试工具测试,并未发现服务器及Oracle本身的瓶颈问题.因此,把问题定位在应用逻辑方面,并做了如下详细的测试.查看数据库 AWR报告,发现该报告未能准确体现出占用临时表空间最高的SQL 语句.为此,笔者编写了一个记录使用临时表空间SQL语句的shell脚本,用来记录使用临时表空间最高的SQL语句,并将其保存在特定的表中.该脚本的部分SQL语句编写如下:在临时表空间已增加到 100 GB的情况下,重新进行批量运行,出现临时表空间不足错误时,笔者根据编写的监控脚本,顺利抓取到了最消耗临时表空间的两个语句.其中,语句1消耗约40 GB临时表空间,语句2消耗约60 GB临时表空间.由于语句1和语句2的语法结构完全一致,只是批量处理的数据不一样,故这两个语句可用同一语句描述,具体如下:分析语句发现,执行计划使用了hash join连接技术,当驱动表无法在内存中装载时,驱动表一次或多次被置换到临时表空间,发生one-pass或muti-pass的现象,导致临时表空间的消耗和执行效率的低下.由于语句1和2结构完全一致,因此对语句1分析和优化即可,根据监控脚本所抓取到的SQL语句及其id,我们得到了如图1所示的执行计划信息.由图1可以看出,该执行计划的问题在于出现了“merge join cartesian”合并连接笛卡尔乘积,而其乘积结果作哈希连接的驱动表.由于PGA(程序全局区)中的hash area无法完全装载该表,导致出现one-pass、muti-pass,大量占用临时表空间,程序运行效率低下.该合并连接笛卡尔乘积将产生约1 700万条记录,而PGA大小为 1 628 M,hash area最多能使用 1628*5% = 80 M,显然80 M的hash area无法装载更多记录的运算结果,继而大量占用临时表空间,导致程序运行效率低下.SQL优化器CBO之所以选择合并连接笛卡尔乘积,原因在于CBO评估合并连接笛卡尔乘积返回的结果为1行,检查设置该语句的三个分区表的统计信息,发现统计信息为0行.至此,问题已经清楚.由于批量的流程为数据加载、运算、数据全删除.因此系统自动统计信息时往往在批量数据全部删除后进行,导致采集的统计信息的为0行,继而CBO选择了合并连接笛卡尔乘积,导致了错误的执行计划、大量的临时表空间占用和性能低下的执行计划.根据每个系统每日数据并不大的情况,理想的执行计划应为:子查询中的D表和E表做hash join,所产生的结果集做为另外一个hash join的probe表去探测A 表.将复合记录的结果返回.由此,子查询不应该做view merge.我们将语句改写,限制数据库CBO优化器做出错误的执行计划选择.语句重写后,在很短时间内即可完成,同时,未出现对临时表空间的消耗现象.以下为修改后语句的部分内容,其执行计划为笔者所预期的理想路径,执行计划信息如图2所示.语句在修改前在执行时间超过 1个小时仍未结束,而经过语句重写后,测试显示不到1分钟即可完成,同时也消除了对临时表空间的过量消耗的问题.根据以上分析,笔者认为要提高SQL语句的编写效率,简化SQL的处理逻辑,在应用编写时应考虑到表的增量以及相应的执行计划,在关键SQL语句中使用显式执行计划.系统关键SQL语句应考虑:(1) 使用 hint稳定执行计划,通过在子查询中加入no_merge的hint防止CBO 优化器做view merge.同时,由于子查询内部的谓词中已有分区键,且CBO可有效使用分区去除,故通过加入no_index的hint可使对单个分区扫描的索引范围更加有效.(2) 基于批量处理的流程,可在调用批量程序运行的shell脚本,数据加载完毕,并对相关的三张表进行统计信息的收集之后,再开始做merge的批量操作.【相关文献】[1] 滕永昌.Oracle数据库系统管理[M].北京:清华大学出版社,2003:80―96.[2] 郑阿奇.ORACLE实用教程[M].北京:电子工业出版社,2009:120―160.[3] 文平.ORACLE大型数据库系统在AIX\UNIX上的实战详解[M].北京:电子工业出版社,2010:66.[4] 王彬.Oracle IIg基础与提高[M].北京:电子工业出版社,2009:230―261.[5] 肖平.基于Oracle应用服务器的Web开发技术[M].北京:清华大学出版社,2010:90.。
深入浅出谈Oracle临时表
关于临时表上的DML活动,有以下结论: 活动,有以下结论: 关于临时表上的 活动
• 1、 INSERT 会生成很少甚至不生成undo/redo活动。因此,临 时表对insert/select型的应用很有用。 比如在处理web翻页时, 可以通过临时表来模拟cache返回结果。 • 2、 DELETE 在临时表上生成的redo与正常表上生成的redo同 样多。 • 3 、临时表的UPDATE会生成正常表UPDATE一半的redo。
在一个SESSION中(比如SQLPLUS登陆)插入上面3条记录,然后再以另外一个SESSION(用 SQLPLUS再登陆一次)登陆,当你select * from classes;的时候,classes表是空的,而你再第 一次登陆的SQLPLUS中select的时候可以查询到,这个时候你没有进行commit或者rollback之前 你可以对刚才插入的3条记录进行update、delete等操作,当你进行commit或者rollback的时候, 这个时候由于你的表是事务级的临时表,那么在插入数据的session也看不到数据了,这个时候 数据就已经被截断了。
什么时候使用临时表? 什么时候使用临时表?
• 1)、当某一个SQL语句关联的表在2张及以上,并且和一些小表 关联。可以采用将大表进行分拆并且得到比较小的结果集合存放 在临时表中。 • 2)、程序执行过程中可能需要存放一些临时的数据,这些数据在 整个程序的会话过程中都需要用的等等。
<Insert Picture Here>
事务级SQL操作 操作 事务级
• • • • • • • • • • SQL> insert into classes(Class_id,Class_Name,Class_Memo) values(1,'计算机','9608'); 1 row inserted SQL> insert into classes(Class_id,Class_Name,Class_Memo) values(2,'经济信息','9602'); 1 row inserted SQL> insert into classes(Class_id,Class_Name,Class_Memo) values(3,'经济信息','9603'); 1 row inserted SQL> update classes set class_memo ='' where class_id=3 ; 1 row updated SQL> select * from classes ; CLASS_ID CLASS_NAME CLASS_MEMO -------- ---------- -------------------------------------------------------------------------------1 计算机 9608 2 经济信息 9602 3 经济信息 SQL> delete from classes where class_id=3 ; 1 row deleted SQL> select * from classes ; CLASS_ID CLASS_NAME CLASS_MEMO -------- ---------- -------------------------------------------------------------------------------1 计算机 9608 2 经济信息 9602 SQL> commit; Commit complete SQL> select *from classes ; CLASS_ID CLASS_NAME CLASS_MEMO -------- ---------- -------------------------------------------------------------------------------SQL> 再重复插入一次,然后rollback。 SQL> Rollback ; Rollback complete SQL> select * from classes ; CLASS_ID CLASS_NAME CLASS_MEMO -------- ---------- -------------------------------------------------------------------------------SQL>
oracle数据库数据备份清理机制
oracle数据库数据备份清理机制
Oracle数据库有多种备份和恢复机制可以使用,其中包括:
1. 数据库完整备份:使用RMAN (Recovery Manager)工具进行
数据库完整备份。
RMAN可以创建一个完整备份集,包含数
据库中的所有数据文件、日志文件和控制文件。
通过使用RMAN进行完整备份,可以轻松地恢复数据库到一个特定的
时间点。
2. 增量备份:使用RMAN进行增量备份,只备份自上次备份
以来发生更改的数据块。
这种备份机制可以减少备份的时间和存储空间,但在恢复时需要借助完整备份。
3. 归档日志备份:在归档模式下,Oracle将数据库的已提交事
务记录到归档日志中。
通过备份归档日志,可以实现点-in-
time的恢复和恢复到特定的时间点。
4. 数据库闪回:Oracle提供了闪回数据库(Flashback Database)功能,可以快速地将整个数据库恢复到一个特定的时间点,而不是单独恢复数据文件。
这种机制可以避免备份和恢复的过程。
在备份完成后,可以根据存储空间和备份策略的要求来清理备份。
可以使用RMAN的DELETE命令来删除不需要的备份。
可以使用RMAN的RETENTION POLICY来设置RMAN应保
留的备份的时间段。
oracle删除用户及空闲表空间释放空间
第一步:删除过期用户 DROP USER colin CASCADE; 第二步:查询过期用户相关的表空间是否还有对象 SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAMEFROM DBA_SEGMENTSWHERE TABLESPACE_NAME IN(SELECT TABLESPACE_NAMEFROM DBA_TABLESPACESWHERE TABLESPACE_NAME LIKE '%COLIN%') 第三步:转移过期用户表空间上的对象到其他表空间 ALTER TABLE tab_colin MOVE TABLESPACE colin_song_tbs;ALTER INDEX idx_tab_colin REBUILD TABLESPACE colin_song_idx_tbs; 第四步:查询无对象的表空间 SELECT 'DROP TABLESPACE ' || TABLESPACE_NAME ||INCLUDING CONTENTS AND DATAFILES;'FROM DBA_TABLESPACESWHERE NOT EXISTS (SELECT 12FROM DBA_SEGMENTSWHEREDBA_SEGMENTS.TABLESPACE_NAME =DBA_TABLESPACES.TABLESPACE_NAME); 第五步:删除之把上述查询出来的语句贴到文本编辑里检查下( PS:这里会包含一个 temp 的临时表空间一定要去掉啊 )SQL> drop tablespace STAT_FTFY_CHRGSTAY_DTBS including contents and datafiles;Tablespace droppedSQL> drop tablespace STAT_FTFY_CHRGNEW_WIXTBS including contents and datafiles;Tablespace droppedSQL> drop tablespace STAT_FTFY_CHRGSMR_MIXTBS including contents and datafiles;Tablespace dropped最后去看下你的系统空间应该释放了吧。
Oracle临时表和临时表空间组
Oracle临时表和临时表空间组一、临时表功能介绍:Oracle中的临时表是全局的,需要在数据库设计时创建完成,而不是程序使用时。
每个登陆用户都使用这一个相同的临时表,但互相之间看不到彼此的数据,也就是说临时表是会话独立的。
并且不产生日志。
Oracle 的临时表分为事务型和会话型。
事务型临时表就是指在事务处理过程中插入的记录只在事务提交或回滚之前有效,一旦事务完成,表中的记录便被自动清除。
会话型临时表指临时表中的数据在本次会话期间一直有效,直到会话结束。
会话结束后表中针对此次会话的数据会自动清空。
Oracle 临时表的不足之处:1、不支持lob对象,例如Spatial 的SDO_GEOMETRY。
这也许是设计者基于运行效率的考虑,但实际应用中确实需要此功能时就无法使用临时表了。
2、不支持主外键关系。
这意味着临时表创建临时表的语法:CREATE GLOBAL TEMPORARY TABLE table"(" column datatype [DEFAULT expr] [{ NULL | NOT NULL}][, column datatype [DEFAULT expr] [ {NULL | NOT NULL} ]... ")"ON COMMIT {DELETE | PRESERVE } ROWS ;--SampleCREATE GLOBAL TEMPORARY TABLE TABLE_NAME (COL1 VARCHAR2(10),COL2 NUMBER) ON COMMIT PRESERVE(DELETE) ROWS ;如果选择PRESERVE ROWS,则在会话结束后表中的数据自动清空,如果选了DELETE ROWS,则在提交的时候即清空数据,PRESERVE则一直到会话结束。
Oracle中的临时表有两种一种是事务级别的临时表它在事务结束的时候自动清空记录,另一种是会话级的它在我们访问数据库时的一个会话结束后自动的清空。
ORACLE临时表空间满了的原因解决方案
ORACLE临时表空间满了的原因解决⽅案临时表空间作⽤Oracle临时表空间主要⽤来做查询和存放⼀些缓冲区数据。
临时表空间消耗的主要原因是需要对查询的中间结果进⾏排序。
重启数据库可以释放临时表空间,如果不能重启实例,⽽⼀直保持问题sql语句的执⾏,temp表空间会⼀直增长。
直到耗尽硬盘空间。
数据库temp临时表空间增⼤,⼀般在数据安装时设置临时表空间⼤⼩,默认的情况下都是设置为⾃动增长。
这样会引起⼀个问题:在数据库使⽤中temp表空间会⾃动扩展的越来越⼤,造成磁盘空间使⽤不⾜。
引起临时表空间增⼤主要使⽤在以下⼏种情况: 1、order by or group by (disc sort占主要部分); 2、索引的创建和重创建; 3、distinct操作; 4、union & intersect & minus sort-merge joins; 5、Analyze 操作; 6、有些异常也会引起TEMP的暴涨。
解决temp临时表空间⼤⼩问题: ⽅法⼀:直接缩⼩temp表空间⼤⼩ alter database tempfile '/u01/app/oracle/oradata/orcl/temp01.dbf' resize 1024M; 此语句会直接修改temp表空间的⼤⼩,但可能会执⾏不成功,因为当temp使⽤率为100%或当前有会话占⽤时,temp表空间是⽆法缩⼩的。
查询当前会话: SELECT ername, se.sid, se.serial#, se.sql_address, se.machine, se.program, su.tablespace, su.SEGTYPE, su.CONTENTS FROM v$session se, v$sort_usage su WHERE se.saddr=su.session_addr 利⽤此sql语句查询当前会话,然后kill当前会话: Alter system kill session 'sid,serial#' 执⾏此语句后再对temp表空间resize空间⼤⼩就可以了。
Oracle 建立临时表空间
Oracle 建立临时表空间通过在表空间中分配临时存储空间,Oracle能够使带有排序等操作的SQL语句获得更高的执行效率。
如果创建了专门的临时表空间,Oracle就可以不必在其他的表空间中为排序操作分配临时空间,这样不仅可以实现临时数据的集中化管理,而且还不会影响到其他表空间的使用效率。
在数据库中创建用户时必须为用户指定一个表空间作为临时表空间使用,该用户所生成的所有临时表数据都将存储在这个表空间中。
如果使用其他表空间作为临时表空间,这不仅会占用其中的存储空间,而且会在该表空间中生成许多存储碎片,从而影响整个数据库的性能。
因此,最好为数据库创建一个专门的临时表空间。
一个临时表空间可以被多个数据库用户共享使用。
在临时表空间中创建的段称为临时段。
Oracle只会为一个实例创建一个临时段,这个临时段被实例中所有的排序操作共享使用,但是临时段中的每一个区只能由一个事务使用。
另外,如果在数据库运行过程中经常有大量并发排序操作,那么为了提高排序性能,可以建立多个临时表空间。
建立临时表空间是使用CREATE TEMPORARY TABLESPACE命令完成的。
1.建立本地管理临时表空间建立本地管理临时表空间时,使用UNIFORM选项可以指定区尺寸。
需要注意,当建立临时表空间时,不能指定AUTOALLOCA TE选项。
例如,下面的语句在数据库中创建一个临时表空间TEMP01:SQL> create temporary tablespace temp012 tempfile 'd:\oracledata\temp01.dbf' size 10m3 extent management local4 uniform size 256k;表空间已创建。
上面创建的表空间其管理方式为本地化管理,并且区尺寸统一为256KB。
需要注意,本地化管理临时表空间不使用数据文件,而使用临时文件,也就是说,在创建临时表空间时,必须将表示数据文件的DA TAFILE改为表示临时文件的TEMPFILE。
oracle临时表空间的增删改查操作
操作oracle 临时表空间的增删改查1、查看临时表空间dba_temp_files视图v_$tempfile视图select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_files;select status,enabled, name, bytes/1024/1024 file_size from v_$tempfile;--sys用户查看2、缩小临时表空间大小alter database tempfile 'D:\ORACLE\PRODUCT\' resize 100M;3、扩展临时表空间:方法一、增大临时文件大小:SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/’ resize 100m;方法二、将临时数据文件设为自动扩展:SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/’ autoextend on next 5m maxsize unlimited;方法三、向临时表空间中添加数据文件:SQL> alter tablespace temp add tempfile ‘/u01/app/oracle/oradata/orcl/’ size100m;4、创建临时表空间:SQL> create temporary tablespace temp1 tempfile ‘/u01/app/oracle/oradata/orcl/’ size 10M;5、更改系统的默认临时表空间:--查询默认临时表空间select from database_properties whereproperty_name='DEFAULT_TEMP_TABLESPACE';--修改默认临时表空间alter database default temporary tablespace temp1;所有用户的默认临时表空间都将切换为新的临时表空间:select username,temporary_tablespace,default_ from dba_users;--更改某一用户的临时表空间:alter user scott temporary tablespace temp;6、删除临时表空间删除临时表空间的一个数据文件:SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/’ drop;删除临时表空间彻底删除:SQL> drop tablespace temp1 including contents and datafiles cascade constraints;7、查看临时表空间的使用情况GV_$TEMP_SPACE_HEADER视图必须在sys用户下才能查询GV_$TEMP_SPACE_HEADER视图记录了临时表空间的使用大小与未使用的大小dba_temp_files视图的bytes字段记录的是临时表空间的总大小SELECT ,total - used as "Free",total as "Total",roundnvltotal - used, 0 100 / total, 3 "Free percent"FROM SELECT tablespace_name, SUMbytes_used / 1024 / 1024 usedFROM GV_$TEMP_SPACE_HEADERGROUP BY tablespace_name temp_used,SELECT tablespace_name, SUMbytes / 1024 / 1024 totalFROM dba_temp_filesGROUP BY tablespace_name temp_totalWHERE =8、查找消耗资源比较的sql语句Select ,,,to_numberrtrim as Space,tablespace,segtype,sql_textfrom v$sort_usage su, v$parameter p, v$session se, v$sql swhere = 'db_block_size'and =and =and =order by ,9、查看当前临时表空间使用大小与正在占用临时表空间的sql语句select , segtype, blocks 8 / 1000 "MB", sql_textfrom v$sort_usage sort, v$session sess, v$sql sqlwhere =and =order by blocks desc;10、临时表空间组介绍1创建临时表空间组:create temporary tablespace tempts1 tempfile '/home/oracle/' size 2M tablespace group group1;create temporary tablespace tempts2 tempfile '/home/oracle/' size 2M tablespace group group2;2查询临时表空间组:dba_tablespace_groups视图select from dba_tablespace_groups;GROUP_NAME TABLESPACE_NAME------------------------------ ------------------------------GROUP1 TEMPTS1GROUP2 TEMPTS23将表空间从一个临时表空间组移动到另外一个临时表空间组:alter tablespace tempts1 tablespace group GROUP2 ;select from dba_tablespace_groups;GROUP_NAME TABLESPACE_NAME------------------------------ ------------------------------GROUP2 TEMPTS1GROUP2 TEMPTS24把临时表空间组指定给用户alter user scott temporary tablespace GROUP2;5在数据库级设置临时表空间alter database <db_name> default temporary tablespace GROUP2;6删除临时表空间组删除组成临时表空间组的所有临时表空间drop tablespace tempts1 including contents and datafiles;select from dba_tablespace_groups;GROUP_NAME TABLESPACE_NAME------------------------------ ------------------------------GROUP2 TEMPTS2drop tablespace tempts2 including contents and datafiles;select from dba_tablespace_groups;GROUP_NAME TABLESPACE_NAME11、对临时表空间进行shrink11g新增的功能--将temp表空间收缩为20Malter tablespace temp shrink space keep 20M;--自动将表空间的临时文件缩小到最小可能的大小ALTER TABLESPACE temp SHRINK TEMPFILE ’/u02/oracle/data/’;临时表空间作用Oracle临时表空间主要用来做查询和存放一些缓冲区数据;临时表空间消耗的主要原因是需要对查询的中间结果进行排序;重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会一直增长;直到耗尽硬盘空间;网上有人猜测在磁盘空间的分配上,oracle使用的是贪心算法,如果上次磁盘空间消耗达到1GB,那么临时表空间就是1GB;也就是说当前临时表空间文件的大小是历史上使用临时表空间最大的大小;临时表空间的主要作用:索引create或rebuild;Order by 或group by;Distinct 操作;Union 或intersect 或minus;Sort-merge joins;analyze.。
oracle 在删除表,表空间,用户时 如何释放磁盘空间
truncate table 后,有可能表空间仍没有释放,可以使用如下语句:alter table 表名称deallocateunused keep 0;注意如果不加keep 0的话,表空间是不会释放的我在oracle 中创建建一个用户usera , 导入备份的数据,表空间占了50g磁盘空间,使用完后不想用这些数据了,就想删除了,再导入其他数据库文件当我删除这个用户时,表空间还是占用磁盘50g,没有释放请问如何操作可以彻底删除这些数据并释放磁盘空间(不想直接在磁盘删除表空间),操作说明要详细到可以直接用,(在网上找了些不会用,或用不上)一、drop表执行drop table xx 语句drop后的表被放在回收站(user_recyclebin)里,而不是直接删除掉这样,回收站里的表信息就可以被恢复,或彻底清除通过查询回收站user_recyclebin获取被删除的表信息,然后使用语句flashback tableto before drop [rename to ];将回收站里的表恢复为原名称或指定新名称,表中数据不会丢失若要彻底删除表,则使用语句:drop tablepurge;清除回收站里的信息清除指定表:purge table ;清除当前用户的回收站:purge recyclebin;清除所有用户的回收站:purge dba_recyclebin;不放入回收站,直接删除则是:drop table xx purge;举例如下:sql> select * from test1;a b c-- -- ----------11 511 102 rows selectedsql> create table test2 as select * from test1;table createdsql> select * from test2;a b c-- -- ----------11 511 102 rows selectedsql> drop table test2;table droppedsql> select object_name, original_name, operation, type from user_recyclebin;object_name original_name operation type------------------------------ -------------------------------- --------- -------------------------bin$vqwemdg4r9mk9fyjndyzvg==$0 test2 drop tablesql> flashback table test2 to before drop rename to test3;--【to test3】将表重命名donesql> select * from test3;a b c-- -- ----------11 511 102 rows selectedsql> select * from test2ora-00942: 表或视图不存在--彻底删除表sql> drop table test3 purge;table dropped二、清除表中的数据truncate操作同没有where条件的delete操作十分相似,只是把表里的信息全部删除,但是表依然存在例如:truncate tablexxtruncate不支持回滚,并且不能truncate一个带有外键的表,如果要删除首先要取消外键,然后再删除例如:alter table f_minute_td_net_fho_b7 deallocateunused keep 0;或者:truncate table (schema)table_name drop(reuse) storage才能释放表空间例如: truncate tabletest1 drop storage;三、查询分区表存在哪些分区:查询分区表的情况,可以在user_tab_partitions中查询例如:select 'alter table '||t.table_name ||' truncatepartition ' || t.partition_name from user_tab_partitions t where t.table_name like 'f_%'清除指定某个分区表的分区数据:altertable表名称truncatepartition分区名称;四、清除分区表占用的空间:alter table 表名称droppartition 分区名称;例如:alter table f_hour_td_net_mpvoicedroppartition p_09121913;五、查询表空间信息可以利用如下语句查询各表在存储空间的使用分情况:selecttablespace_name,to_char(sum(bytes)/(1024*1024),'999g999d999')cnt_mbfromdba_extentsw hereowner='。
oracle 清理执行计划
Oracle 清理执行计划1. 介绍在Oracle数据库中,执行计划是查询优化器生成的一个重要的数据结构,它描述了数据库系统执行查询的具体步骤和执行顺序。
执行计划对于性能优化和调优非常重要,因为它可以帮助我们理解查询的执行过程,找出潜在的性能问题,并采取相应的措施进行优化。
然而,随着时间的推移和数据库的使用,执行计划可能会变得过时或者不再准确。
这可能是由于数据库中的数据分布发生了变化,索引的选择性改变了,或者系统配置发生了变化等原因。
为了保持数据库的性能稳定和可靠,我们需要定期清理执行计划,确保其准确性和有效性。
本文将介绍如何清理Oracle数据库中的执行计划,包括如何识别过时的执行计划、如何清理执行计划、以及如何预防执行计划过时的问题。
2. 识别过时的执行计划在清理执行计划之前,我们首先需要识别出哪些执行计划是过时的。
以下是一些常用的方法和技巧:2.1. 使用AWR报告AWR(Automatic Workload Repository)是Oracle数据库中的一个性能监控和诊断工具。
通过分析AWR报告,我们可以找出执行计划的变化和优化的潜在问题。
首先,我们可以使用以下命令生成AWR报告:$ sqlplus / as sysdbaSQL> @?/rdbms/admin/awrrpt.sql然后,根据提示输入开始时间和结束时间,生成AWR报告。
在AWR报告中,我们可以查看不同时间段内的执行计划,并对比它们的变化。
2.2. 使用SQL TraceSQL Trace是Oracle数据库中的一个跟踪工具,可以记录SQL语句的执行过程和执行计划。
通过分析SQL Trace文件,我们可以找出执行计划的变化和优化的潜在问题。
首先,我们可以使用以下命令启用SQL Trace:SQL> ALTER SESSION SET SQL_TRACE = TRUE;然后,执行需要跟踪的SQL语句。
完成后,我们可以使用以下命令禁用SQL Trace:SQL> ALTER SESSION SET SQL_TRACE = FALSE;最后,我们可以使用以下命令查看SQL Trace文件的路径:SQL> SELECT value FROM v$diag_info WHERE name = 'Default Trace File';通过分析SQL Trace文件,我们可以找出执行计划的变化和优化的潜在问题。
ORACLE 临时表空间使用率过高的原因及解决方案
由于临时表空间使用率过高,达到了百分之百,虽然没有任何的报错,但存在一定的隐患和告警信息,有待解决问题。
由于临时表空间主要使用在以下几种情况:1、order by or group by (disc sort占主要部分);2、索引的创建和重创建;3、distinct操作;4、union & intersect & minus sort-merge joins;5、Analyze 操作;6、有些异常也会引起TEMP的暴涨。
通过查询相关的资料,发现解决方案有如下几种:一、重建临时表空间tempTemporary tablespace是不能直接drop默认的临时表空间的,不过我们可以通过以下方法达到。
查看目前的Temporary TablespaceSQL> select name from v$tempfile;NAME--------------------------------------------------------------------------------/dev/md/vg_yx_ora1/rdsk/d101SQL> select username,temporary_tablespace from dba_users; USERNAME TEMPORARY_TABLES PACE------------------------------ ------------------------------SYS TEMP SYSTEM TEMPDBSNMP TEMPJIFEN TEMPAIDB TEMPAIZZDB TEMP UNIONMON TEMPTEST TEMPAISTAT TEMP AILKSELECT TEMPAIMON TEMPUSERNAME TEMPORARY_TABLES PACE------------------------------ ------------------------------ UNIONMONS TEMPACCOUNT TEMPOFFICE TEMPZZDB TEMPAIGDB TEMP PERFSTAT TEMPOUTLN TEMP WMSYS TEMP1.创建中转临时表空间create temporary tablespace TEMP1 tempfile'/dev/md/vg_yx_ora1/rdsk/d1017' SIZE 4089M;2.改变缺省临时表空间为刚刚创建的新临时表空间temp1alter database default temporary tablespace temp1;3.删除原来临时表空间drop tablespace temp including contents and datafiles;4.重新创建临时表空间create temporary tablespace TEMP tempfile'/dev/md/vg_yx_ora1/rdsk/d1016' SIZE 4089M;5.重置缺省临时表空间为新建的temp表空间alter database default temporary tablespace temp;6.删除中转用临时表空间drop tablespace temp1 including contents and datafiles;以上的方法只是暂时释放了临时表空间的磁盘占用空间,是治标但不是治本的方法,真正的治本的方法是找出数据库中消耗资源比较大的sql语句,然后对其进行优化处理。
oracle里删除临时表语句
在使用Oracle数据库时,经常会遇到删除临时表的情况。
临时表是一种特殊的数据库对象,通常用于在会话级别保存临时数据。
使用临时表可以有效地管理临时数据,提高数据库的性能和效率。
在Oracle数据库中,删除临时表的语句可以通过以下几种方式实现:1. 使用DROP TABLE语句删除临时表DROP TABLE 临时表名;使用DROP TABLE语句可以直接删除临时表,但需要谨慎使用,因为一旦执行该语句,临时表及其数据将被永久删除,不可恢复。
在执行DROP TABLE语句之前,务必确认是否需要删除该临时表。
2. 使用TRUNCATE TABLE语句清空临时表数据TRUNCATE TABLE 临时表名;TRUNCATE TABLE语句用于清空表中的数据,但保留表的结构及其定义。
与DROP TABLE不同,TRUNCATE TABLE仅删除表中的数据,而不删除表本身。
在删除临时表数据时,可以使用TRUNCATE TABLE 语句保留表的定义及结构,以便后续重新使用。
3. 使用DELETE FROM语句删除临时表数据DELETE FROM 临时表名;DELETE FROM语句用于删除表中的数据,但不会删除表的结构。
通过使用DELETE FROM语句,可以逐行地删除临时表中的数据,但保留表的结构不变。
无论是使用DROP TABLE、TRUNCATE TABLE还是DELETE FROM语句删除临时表,都需要在实际操作前进行充分的确认和备份工作,以避免因操作失误导致不可逆的数据丢失。
在进行删除临时表的操作时,还需要注意以下几点:1. 确认临时表是否仍在使用中在删除临时表之前,需要确认该临时表是否仍在当前会话或其他会话中使用。
如果临时表仍在使用中,需要先断开与临时表的关联,再执行删除操作。
2. 备份临时表数据在执行删除操作之前,应该对临时表的数据进行备份。
即使是临时表,也可能含有重要的临时数据,一旦删除不可恢复,可能会给业务或应用程序带来不必要的损失。
oracle数据库增删改使用注意事项
Oracle数据库是一种关系型数据库管理系统,被广泛应用于企业级应用的开发和管理中。
在使用Oracle数据库进行增删改操作时,需要注意一些事项,以保证数据的完整性和安全性。
下面将详细介绍Oracle数据库增删改操作的注意事项:一、增加数据时的注意事项:1. 插入数据时,需要确保插入的数据符合表结构的约束条件,包括主键、外键、唯一约束、非空约束等。
否则会出现插入失败的情况。
2. 在进行大批量数据插入时,建议使用批量插入的方式,例如使用INSERT INTO VALUES方式插入多条数据,而不是逐条插入,以提高插入效率。
3. 插入数据时,需要注意数据库的并发控制,确保插入的数据不会造成数据冲突和并发访问的问题。
二、删除数据时的注意事项:1. 删除数据前需要谨慎确认,确保删除操作不会对数据库的完整性和业务逻辑产生影响。
2. 在删除数据时,需要注意是否有其他表与当前表存在外键约束关系,避免因为删除主表数据而导致外键约束错误。
3. 删除大量数据时,建议使用DELETE语句加上条件进行删除,以避免误删整个表的数据。
三、修改数据时的注意事项:1. 在更新数据时,需要确保更新的数据符合表结构的约束条件,避免数据不一致性和错误的情况发生。
2. 修改数据时,需要考虑数据库的事务管理,确保更新操作的原子性和一致性。
3. 修改数据时,需要注意是否有其他表与当前表存在外键约束关系,以避免修改数据导致外键约束错误。
四、事务管理的注意事项:1. 在进行数据操作时,需要考虑事务管理,确保数据库操作的原子性、一致性、隔离性和持久性。
2. 在使用事务时,需要谨慎处理事务回滚和提交操作,以避免数据操作错误导致数据丢失或不一致的问题。
总结:在使用Oracle数据库进行增删改操作时,需要注意数据的完整性、约束条件、事务管理等方面的问题,以确保数据的安全性和一致性。
同时也需要考虑数据操作的效率和性能,以提高数据库的运行效率和可靠性。
希望以上内容能够帮助您更好地理解Oracle数据库增删改操作的注意事项。
Oracle常用DDL语句
Oracle常用DDL语句一、表空间管理CREATE [BIGFILE|SMALLFILE] [TEMPORARY] TABLESPACE tablespace name -- 表空间名字DATAFILE datafile spec | TEMPORARYFILE tempfile spec -- 数据文件/临时文件说明[MINIMUM EXTENT minimum extent size] -- 最小扩展空间[[BLOCKSIZE blocksize] DEFAULT STORAGE (defalut storage clause)] -- (锁空间大小)默认存储子句[LOGGING | NOLOGGING] -- 有无日志[FORCE LOGGING] -- 强制日志[ONLINE | OFFLINE] -- 在线/不在线[EXTENT MANAGEMENT DICTIONARY | LOCAL [AUTOALLOCATE | UNIFORM SIZE size]] -- 扩展管理字典/本地(自动定位/统一大小)[SEGMENT SPACE MANAGEMENT MANUAL | AUTO] -- 管理extent中的block(设置为自动最佳)[FLASHBACK ON|OFF] -- 删除文件是否可找回1、1、创建永久表空间例:CREATE TABLESPACE MYTABLESPACE LOGGINGDATAFILE'D:\oracle\product\10.1.0\oradata\MYDB\MYTABLESPACE.DBF' SIZE 10M REUSEAUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITEDEXTENT MANAGEMENT LOCAL1、2、创建临时表空间例:CREATE TEMPORARY TABLESPACE MYTEMP LOGGINGTEMPFILE'D:\oracle\product\10.1.0\oradata\MYDB\MYTEMP.DBF' SIZE 10M REUSEAUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITEDEXTENT MANAGEMENT LOCAL更改默认临时表空间alter database default temporary tablespace TEMP2;1、3 删除表空间1)强行删除表空间,包括数据文件drop tablespace mytemp including contents and datafiles cascade constraints2)表空间内无任何对象时才能删除drop tablespace mytemp1.4 为表空间增加文件alter tablespace users add datafile 'd:\oracle\oradata\....\users02.dbf' size 10m;1.5 默认临时表空间在创建用户时,如果没有指定临时表空间,则会使用系统表空间作为临时表空间,如果指定了默认临时表空间,则在未指定临时表空间的情况下使用默认的临时表空间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
正常来说,在完成Select语句、create index等一些使用TEMP表空间的排序操作后,Oracle是会自动释放掉临时段a的。
但有些有侯我们则会遇
到临时段没有被释放,TEMP表空间几乎满的状况,甚至是我们重启了数据库仍没有解决问题。
这个问题在论坛中也常被网友问到,下面我总结
一下,给出几种处理方法。
法一、重启库
库重启时,Smon进程会完成临时段释放,TEMP表空间的清理操作,不过很多的时侯我们的库是不允许down的,所以这种方法缺少了一点的
应用机会,不过这种方法还是很好用的。
法二、Metalink给出的一个方法
修改一下TEMP表空间的storage参数,让Smon进程观注一下临时段,从而达到清理和TEMP表空间的目的。
SQL>alter tablespace temp increase 1;
SQL>alter tablespace temp increase 0;
法三、我常用的一个方法,具体内容如下:
1、使用如下语句a查看一下认谁在用临时段
SELECT username,
sid,
serial#,
sql_address,
machine,
program,
tablespace,
segtype,
contents
FROM v$session se,
v$sort_usage su
WHERE se.saddr=su.session_addr
2、那些正在使用临时段的进程
SQL>Alter system kill session 'sid,serial#';
3、把TEMP表空间回缩一下
SQL>Alter tablespace TEMP coalesce;
法四、使用诊断事件的一种方法,也是被我认为是“杀手锏”的一种方法
1、确定TEMP表空间的ts#
SQL>select ts#, name from sys.ts$ ;
TS# NAME
-----------------------
0 SYSYEM
1 RBS
2 USERS
3* TEMP
4 TOOLS
5 INDX
6 DRSYS
2、执行清理操作
SQL>alter session set events 'immediate trace name DROP_SEGMENTS level 4' ;
说明:
temp表空间的TS# 为 3*, So TS#+ 1= 4
其它:
1、出现如上问题的原因我认为可能是由于大的排序超出了TEMP表空间的空间允许范围引起的。
也可能包含着其它的异常的因素。
2、观注TEMP等这些空间的状态是Dba日常职责之一,我们可以通过Toad、Object Browser等这些工具办到,也可以用如下的语句:
SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
D.TOT_GROOTTE_MB "表空间大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,
2),
'990.99') "使用比",
F.TOTAL_BYTES "空闲空间(M)",
F.MAX_BYTES "最大块(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 4 DESC
1、使用如下语句查看一下认谁在用临时段
SELECT ername, s.sid, s.serial#, s.sql_address, s.machine, s.program, su.tablespace, su.segtype, su.contents
FROM v$session s, v$sort_usage su
WHERE s.saddr = su.session_addr;
2、那些正在使用临时段的进程
SQL>Alter system kill session 'sid,serial#';
3、把TEMP表空间回缩一下
SQL>Alter tablespace TEMP coalesce
重建临时表空间
1.创建中转临时表空间
create temporary tablespace TEMP2 TEMPFILE
'E:ORACLEORADATAORCL9temp03.DBF' SIZE 512M REUSE AUTOEXTEND ON NEXT 1M MAXSIZE
UNLIMITED;
2.改变缺省临时表空间为刚刚创建的新临时表空间temp2
alter database default temporary tablespace temp2;
3.删除原来临时表空间
drop tablespace temp including contents and datafiles;
4.重新创建临时表空间
create temporary tablespace TEMP TEMPFILE
'E:ORACLEORADATAORCL9temp01.DBF' SIZE 512M REUSE AUTOEXTEND ON NEXT 1M MAXSIZE
UNLIMITED;
5.重置缺省临时表空间为新建的temp表空间
alter database default temporary tablespace temp;
6.删除中转用临时表空间
drop tablespace temp2 including contents and datafiles;
create temporary tablespace TEMP1 TEMPFILE 'f:oracleoradataoracledbtemp01.dbf' SIZE 512M REUSE AUTOEXTEND ON NEXT 1M MAXSIZE
UNLIMITED;
alter database default temporary tablespace temp1;
drop tablespace temp including contents and datafiles;
create temporary tablespace TEMP TEMPFILE 'f:oracleoradataoracledbtemp1.dbf' SIZE 512M REUSE AUTOEXTEND ON NEXT 1M MAXSIZE
UNLIMITED;
alter database default temporary tablespace temp;
drop tablespace temp1 including contents and datafiles;。