精华内容
下载资源
问答
  • 2022-02-18 11:28:46

    oracle数据库出现 ora-01652 temp表空间无法扩展时,可以通过
    select c.tablespace_name,
    c.bytes/1024/1024/1024 total_bytes,
    (c.bytes-d.bytes_used)/1024/1024/1024 free_bytes,
    d.bytes_used/1024/1024/1024 use_bytes
    from
    (select tablespace_name,sum(bytes) bytes
    from dba_temp_files group by tablespace_name) c,
    (select tablespace_name,sum(bytes_cached) bytes_used
    from v$temp_extent_pool group by tablespace_name) d
    where c.tablespace_name = d.tablespace_name
    )
    查看临时表空间使用的情况,若临时表空间无法自动扩展则更改临时表空间自动扩展,如自动扩展已至最大值,可通过
    alter tablespace temp shrink space 命令释放临时表空间

    更多相关内容
  • Oracle释放临时表空间脚本
  • ORACLE解决表空间不释放空间

    千次阅读 2021-11-14 18:12:30
    由于数据库中有一个日志记录7000万条日志,造成数据库占用磁盘283G之多,所以现在要求给磁盘瘦身,但是直接用DELETE语句删除,释放空间,经过查资料学习,得知这是"HWM"(高水位)造成.经过查找资料总结解决方案有两种...

    由于数据库中有一个日志表记录7000万条日志,造成数据库占用磁盘283G之多,所以现在要求给磁盘瘦身,但是直接用DELETE语句删除,不能释放空间,经过查资料学习,得知这是"HWM"(高水位)造成.经过查找资料总结解决方案有两种.

    一 彻底删除表(没测试,因为不符合我的情况)

    flashback table tablename1 to before drop rename to tablename2;--【to test3】将表重命名

    drop table tablename2 purge; --彻底删除表

    二、清除表中的数据

            ① 使用truncate(没测试)

            truncate删除不用加条件,直接删除数据,不可找回数据,也不能有外键关联,如果有外键关联,先取消关联,然后在删除,truncate table  tablename1

    Truncate不支持回滚,并且不能truncate一个带有外键的表,如果要删除首先要取消外键,然后再删除。

    truncate table 后,有可能表空间仍没有释放,可以使用如下语句:

    alter table 表名称 deallocate   UNUSED KEEP 0;

    注意如果不加KEEP 0的话,表空间是不会释放的。

    例如:

    alter table F_MINUTE_TD_NET_FHO_B7 deallocate   UNUSED KEEP 0;

    或者:

    TRUNCATE TABLE (schema)table_name DROP(REUSE) STORAGE才能释放表空间。

    例如: truncate table  test1 DROP STORAGE;

    引自:

    https://www.cnblogs.com/sl-shilong/p/3625153.htmlhttps://www.cnblogs.com/sl-shilong/p/3625153.htmlhttps://www.cnblogs.com/sl-shilong/p/3625153.html

     ②DELETE数据(本人使用)

            因为是日志,所以我想留最近一个月的数据,所以不能直接删表,当然也可以把表中要保留的数据备份,然后操作①中的操作,但是我还是选择了古老的方法.但是DELETE删除后是可以找回数据,为什么可以找回数据,那就是因为数据又存到了另外一个地方,就类似电脑中的回收站,要把回收站清空才能释放空间.

    a:  move (引自:oracle删除数据释放表空间流程_诚的博客-CSDN博客_oracle释放表空间)

    优点:可以移动表到其他表空间,在执行命令时不需要执行alter table table_name enable row movement

    缺点:表move 会导致表中的索引失效,要rebuild;同时表会产生行级锁......;在此如果表中有LOB字段 时要用一下命令来实现表空间移动:alter table owner.table_name move tablespace tablespace_name lob (lob_column) store as lob segment  tablespace tablespace_name;也可以单独move lob,index要rebuild

    b:shrink space (引自:oracle删除数据释放表空间流程_诚的博客-CSDN博客_oracle释放表空间)

    优点:降低高水位时索引不会失效

    缺点:不能将表移动到其他表空间;高水位降低效果没有move明显;同时在执行命令前要先执行(alter table table_name enable row movement允许行移动)也会表会产生行级锁.......,shrink比move更耗费cpu,产生很多current block这样生成巨大的redo与undo 如果表中索引很少可以建议使用move降低高水位
     

    shrink space常用操作命令(引自:Oracle 删除数据后释放数据文件所占磁盘空间_ulvge0的博客-CSDN博客)

    下面的语句也是本人使用的语句,亲测有效

    alter table tablename enable row movement;--打开行移动

    alter table tablename shrink space cascade;--压缩表及相关数据段,并下调HWM

    alter table tablename shrink sapce compact;--只压缩,不下调HWM

    alter table tablename shrink sapce ;--下调HWM

    alter table tablename disable row movement;--关闭行移动

    如有不对,请多多指教

     

    展开全文
  • 今天有人提起9i中临时表空间空间释放问题。简单记录下。正常来说,在完成Select语句、create index等一些使用TEMP表空间的排序操作后,Oracle是会自动释放掉临时段a的。但有些有侯我们则会遇到临时段没有被释放,...

    今天有人提起9i中临时表空间的空间释放问题。简单记录下。

    正常来说,在完成Select语句、create index等一些使用TEMP表空间的排序操作后,Oracle是会自动释放掉临时段a的。但有些有侯我们则会遇到临时段没有被释放,TEMP表空间几乎满的状况,甚至是我们重启了数据库仍没有解决问题。

    一般当系统重启后,此表空间才会自动释放。可以查看v$sort_usage视图看看是哪个SQL语句导致temp空间很快被占满。METALINK网站上推荐的一个好方法:对于非LMT管理方式的TEMP表空间,修改一下TEMP表空间的storage参数,让Smon进程观注一下临时段,从而达到清理和TEMP表空间的目的。SQL>alter tablespace temp default storage(pctincrease 1);

    注:改pctincrease为非0,一般是1,这样smon便会将自由范围自动合并。也可以手工合并自由范围:

    alter  tablespace  temp  coalesce;SQL>alter tablespace temp default storage(pctincrease 0);而对于LMT管理方式的TEMP表空间,需要重新建立一个新的临时表空间,将所有用户的默认临时表空间指定到新的表空间上,然后offline旧的临时表空间,并drop掉。

    另法:使用诊断事件的一种方法

    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

    展开全文
  • oracle临时表空间不释放问题

    千次阅读 2011-12-14 17:00:28
    该错误是因为TEMP临时表空间已占满,无法继续分配。 [b]二、原因分析过程[/b] 1.怀疑pga太小,导致占用临时表空间 经查看,pga设置为1g,排除该原因 2.某服务调用频率异常 该服务有定时器刷新,也可以通过...
    [b]一、现象[/b]
    应用报错如下:
    ORA-01652: 无法通过 1280 (在表空间 TEMP 中) 扩展 temp 段
    该错误是因为TEMP临时表空间已占满,无法继续分配。

    [b]二、原因分析过程[/b]
    1.怀疑pga太小,导致占用临时表空间
    经查看,pga设置为1g,排除该原因

    2.某服务调用频率异常
    该服务有定时器刷新,也可以通过alt+r手动刷新服务,通过服务端日志发现,该服务调用频率异常,正常情况下每10秒调用一次,故障发生期间,出现每秒最多调用4次的情况。
    进行模拟实验,手工高频率刷新服务(每秒调用服务20次),发现临时表空间并未被长时间占用,排除该原因。

    3.外系统查询sql语句问题
    我们将系统中的一个表的查询权限开放给了另外一个系统
    select * from mytable t where rownum <= 1
    如果外系统停了一段时间,mytable中就会积累很多数据(比如1万条数据),然后外系统恢复之后查询mytable(如果有数据就连续查询,如果没有数据,每2秒查询一次),每次只查一条数据,至少需要调用一万次,但是每次查询都无法使用索引。
    经过和外系统同事沟通,并查看AWR报告,没有发现数据大量积累的情况,排除该原因。

    4.lob字段问题
    通过以下sql语句可以查看什么操作占用临时表空间,但是只有问题出现时,才能查询到数据。一次偶然的机会,查询到了数据。

    SELECT TMP_TBS.TABLESPACE_NAME,
    SUM(TMP_TBS.TOTAL_MB) TOTAL_MB,
    SUM(USED_TOT.USED_MB) USED_MB,
    SUM(USED_TOT.USED_MB) / SUM(TMP_TBS.TOTAL_MB) * 100 USED_PERSENT
    FROM (SELECT TABLESPACE_NAME, SUM(BYTES) / 1024 / 1024 TOTAL_MB
    FROM DBA_TEMP_FILES
    GROUP BY TABLESPACE_NAME) TMP_TBS,
    (SELECT TMP_USED.TABLESPACE,
    SUM(TMP_USED.BLOCKS * PARA.DB_BLOCK_SIZE) / 1024 / 1024 USED_MB
    FROM V$SORT_USAGE TMP_USED,
    (SELECT VALUE DB_BLOCK_SIZE
    FROM V$PARAMETER
    WHERE NAME = 'db_block_size') PARA
    GROUP BY TMP_USED.TABLESPACE) USED_TOT
    where TMP_TBS.TABLESPACE_NAME = USED_TOT.TABLESPACE(+)
    GROUP BY TMP_TBS.TABLESPACE_NAME;
    ----------------------------------------------
    TABLESPACE_NAME TOTAL_MB USED_MB USED_PERSENT
    TEMP 100 10 10

    上面的结果中(测试环境模拟),已占用的临时表空间为10MB,而且长时间不释放,通过以下语句可以看到详细的占用情况

    select * from v$sort_usage
    -----------------------------------------------
    USERNAME USER SESSION_ADDR SESSION_NUM SQLADDR SQLHASH SQL_ID TABLESPACE CONTENTS SEGTYPE SEGFILE# SEGBLK# EXTENTS BLOCKS SEGRFNO#
    USER USER 07000000473F73C8 14448 070000002C444940 1438138001 2b9476javhgnj TEMP TEMPORARY LOB_DATA 202 6409 1 1280 1

    其中的BLOCKS为占用的数据块数,单位为8KB,1280*8KB=10MB,和第一条查询语句的结果相符。其中SQLADDR表示具体sql语句的地址。通过以下语句可以查看具体sql语句。

    select sql_text ,address from v$sql s where address='070000002C444940';
    -----------------------------------------------
    SQL_TEXT ADDRESS
    insert into mytable(AHM_FLTNO, AHM_DATE, AHM_TYPE_AD, AHM_TYPE_ID, AHM_MSG_TYPE, AHM_MSG_SUBTYPE, AHM_ORIG_AIRPORT, AHM_DEST_AIRPORT, AHM_CONTENT, AHM_CONTENT_EXT, AHM_CONTENT_DISPLAY, AHM_SENDER_MACHINE, AHM_SENDER, AHM_SENDER_GRP, AHM_RCVER_MACHINE, AHM_RCVER_GRP, AHM_RCVER, AHM_STATE, AHM_DATATYPE, AHM_PRIORITY, AHM_TIME, AHM_OPTM, AHM_EXPIRE, AHM_VERSION, AHM_ID) values (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16, :17, :18, :19, :20, :21, :22, :23, :24, :25) 070000002C444940


    确定sql语句后,通过查询应用中的代码发现,mytable表的插入操作使用hibernate,其中AHM_CONTENT_EXT字段使用了clob类型,在hibernate中操作clob类型,需要使用自定义类型,将String转换成clob。
    在该自定义类型中,使用以下语句创建了临时clob对象,但是没有释放。
    CLOB tempClob = CLOB.createTemporary(ConnectionHelp.getConnection(conn), true, CLOB.DURATION_SESSION);

    [b]三、解决方法[/b]
    应用使用hibernate版本为3.1.3,在hibernate新版本中已经实现了该类,使用Hibernate-3.3.2.GA实现的StringClobType.java
    http://www.docjar.com/html/api/org/hibernate/type/StringClobType.java.html


    [b]四、分析过程中的疑问[/b]
    1.刚开始发现问题时,我们通过以下语句进行查询
    SELECT se.username,
    se.sid,
    se.serial#,
    se.sql_address,
    se.machine,
    se.program,
    su.sqladdr,
    su.tablespace,
    su.segtype,
    su.contents
    FROM v$session se, v$sort_usage su
    WHERE se.saddr = su.session_addr;

    发现查询到的sql_address对应的sql为
    select 1 from dual
    正常情况,以上语句不会占用临时表空间,为什么查询出来的是这个语句。
    经过分析,我们可以发现,这个语句是TongWeb用来定时探测数据库状态的语句。上面的语句是基于session作为关联条件的,也就是说,在出现问题的那个时间点,用上面的语句查询,是可以查询到真实的sql语句,但是在tongweb对数据库探测后,该session的当前sql语句已经变成了select 1 from dual。
    v$session有另外一个字段prev_sql_addr,表示上一条sql语句的地址,但也不能保证一定是问题语句对应的地址

    2.有些数据库(测试中使用的oracle 9i)一个消息占用1MB,有些数据库(测试中使用oracle 10g)一个消息占用10MB
    该问题与临时表空间INITIAL_EXTENT设置有关,使用以下语句可以查看具体设置:
    select BLOCK_SIZE,INITIAL_EXTENT,NEXT_EXTENT,EXTENT_MANAGEMENT,ALLOCATION_TYPE from dba_tablespaces where tablespace_name='TEMP';

    每条消息占用10MB左右(oracle 10g)
    ---------------------------------------
    BLOCK_SIZE INITIAL_EXTENT NEXT_EXTENT EXTENT_MANAGEMENT ALLOCATION_TYPE
    8192 10485760 10485760 LOCAL UNIFORM

    每条消息占用1MB左右(oracle 9i)
    ---------------------------------------
    BLOCK_SIZE INITIAL_EXTENT NEXT_EXTENT EXTENT_MANAGEMENT ALLOCATION_TYPE
    8192 1048576 1048576 LOCAL UNIFORM


    3.占用临时表空间到80MB就不再上升
    测试时临时表空间设置为100MB,发送消息后,临时表空间被占用逐渐增多,但是占用到80MB就不再上升了。
    该现象与应用服务器(WAS或TongWeb)数据库连接池设置有关,以测试时使用的TongWeb为例,配置如下:

    最小连接数:8
    空闲超时:300秒

    也就是说,在并发量较小,连接数小于等于8时,最多占用80MB临时表空间。
    经过测试,修改“最小连接数”为15后,占用临时表空间情况会持续上升,突破80MB。

    [i]4.在应用中调用freeTemporary后,clob占用的临时表空间不释放[/i]
    经查是oracle的bug,5723140。
    在10.2.0.4中需要使用以下语句解决该问题
    alter session set events '60025 trace name context forever';
    经过测试,以上修改对存储过程中使用lob对象有效,但是不清楚在java中怎么进行相应的设置。

    5.有时一条记录占用30MB
    多数只占用10MB,偶尔占用30MB,没有重现(数据量都不大,不应该超过10MB)。

    [b]五、参考文章[/b]
    1.Oracle常用性能监控语句解析
    http://www.cnblogs.com/preftest/archive/2010/11/14/1876856.html

    2.查看oracle 系统临时表空间、undo表空间、SGA和PGA大小
    http://blog.csdn.net/xueyepiaoling/article/details/6187842

    3.临时表空间使用情况
    http://space.itpub.net/?uid-13605188-action-viewspace-itemid-678109

    4.Temporary LOB导致临时表空间暴满
    http://pingshx.itpub.net/post/39434/484280

    5.Oracle Database List of Bugs Fixed 10g Release 2 (10.2.0.4) Patch Set 3
    http://www.eygle.com/Notes/10204_buglist.htm

    [b]六、其他相关sql语句[/b]
    1.查看临时表空间数据文件
    Select file#,status,name from v$tempfile

    2.修改临时表空间大小
    alter database tempfile '/app/oradata2/oraapp/newapp_temp_01.dbf' resize 150M

    3.修改表空间大小
    alter database datafile 'xx.dbf' resize xxxx
    展开全文
  • ORACLE数据库临时表空间不足通用解决方案原因分析:1.ORACLE临时表空间是由oracle数据库定时对表空间进行释放,但也会出现表空间释放不及时的现象。这属于oracle问题,无参数进行配置来解决,只能通过重定向临时表...
  • import java.sql.Clob;... }//这里没有写finally就是模拟weblogic长连接关闭连接的情况 } public static void main(String[] args) { TestReadBlob testReadBlob = new TestReadBlob(); testReadBlob.runTest(); } }
  • Oracle 临时表空间满的清理

    千次阅读 2021-05-01 05:58:05
    正常来说,在完成所送select语句、createindex等一些使用TEMP表空间的排序操作后,Oracle是会自动释放临时段的。但有些有侯我们则会遇到临时段没有被释放,TEMP表空间几乎满的状况,甚至是我们重启了数据库仍没有...
  • 1、查看临时表空间 (dba_temp_files视图)(v_$tempfile视图)select tablespace_name,file_name,bytes/1024/1024 file_size,au1、查看临时表空间 (dba_temp_files视图)(v_$tempfile视图)select tablespace_name,file_...
  • Oracle临时表空间

    2021-05-01 08:02:48
    Oracle临时表空间通过Oracle表空间的讲解,我们了解到表空间是Oracle数据库存储数据和对象的逻辑容器,那临时表空间呢?Oracle临时表空间主要是存储数据库的排序操作、临时表、中间排序结果等临时对象。例如,我们...
  • 【处理】清空临时表空间Oracle1.启动数据库 startup2.查看当前的数据库默认表空间:SQL>select * from database_properties whereproperty_name='DEFAULT_TEMP_TABLESPACE';确认当前的临时表空间为TEMP3...
  • Oracle临时表空间的清理步骤,解决数据库临时表空间满的问题。
  • 表空间概述 Oracle的表空间属于Oracle中的存储结构,是一种用于存储数据库...临时表空间:存储数据库的中间执行过程,如:保存order by数据库排序,分组时产生的临时数据。操作完成后存储的内容会被自动释放。临时表空
  • Oracle-临时表空间

    千次阅读 2021-05-03 09:45:44
    一:临时表空间查询--查看数据库表空间数据文件select * from dba_data_files;--查看数据库临时表空间文件select * from dba_temp_files;--查看数据库临时表空间使用情况select * from dba_temp_free_space;--查看...
  • 1、order by or group by (disc sort占主要部分);2、索引的创建和重创建;3、distinct操作;...临时表空间暴涨的现象经过分析可能是以下几个方面的原因造成的:1.没有为临时表空间设置上限,而是允许无限增...
  • 2016-03-09 回答查看“oracle临时表空间当前使用了多少空间,可按照以下程序。select d.tablespace_name "name", d.status "status",to_char (nvl (a.bytes / 1024 / 1024, 0), '99,999,990.90') "size (m)",to_...
  • 可以设置这个来让数据库清理lob占用的临时表空间,否则只能等着JDBC关闭连接来释放。alter session set events '60025 trace name context forever'logon触发器来实现该功能。create or replace trigger sys.login_...
  • 维护的一个生产数据库,被“集中监控”软件监控到临时表空间使用率100%,需要清理。于是,想到了添加临时文件的方法。但是想到原临时文件temp01.dbf已经用掉了2GB,想一并清理这个文件,用到了shrink特性,释放了...
  • oracle数据库清理临时表空间

    千次阅读 2021-05-04 04:15:21
    方法一、重启库 库重启时,Smon进程会完成临时释放,TEMP表空间的清理操作,不过很多的时侯我们的库是允许down的,所以这种方法缺少了一点的应用机会,不过这种方法还是很好用的。 法二、Metalink给出的一个方法 ...
  • Temporarytablespace是oracle临时表空间临时表空间主要用途是在数据库进行排序运算、管理索引、访问视图等操作时提供临时的运算空间,当运算完成之后系统会自动清理。当oracle里需要用到sort的时候,PGA中sort_...
  • 临时表空间作用Oracle临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。重启数据库可以释放临时表空间,如果能重启实例,而一直保持问题sql语句的执行,...
  • 1, Oracle 数据库,临时表空间 FASTTEMP 满,需要清理。 2, 解决方法思考 1, 创建新的临时表空间 FASTTEMP2 及文件 2, 用 FASTTEMP2 替换 FASTTEMP 3, 删除 FASTTEMP 临时表空间及其文件 4, 创建新的临时表空间 ...
  • SYSTEM表空间存储oracle系统的数据、系统的回滚段,能offline。 SYSAUX表空间又称为辅助表空间,用来存储系统其他可选组件的系统数据,SYSTEM和SYSAUX都能删除和更改。 2.创建本地管理表空间 本地管理表空间...
  • Oracle临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。 重启数据库可以释放临时表空间,如果能重启实例,而一直保持问题sql语句的执行,temp表空间会...
  • Oracle临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。临时表空间的主要作用:索引create或rebuildOrder by 或 group byDistinct 操作Union 或 intersect...
  • oracle 临时表空间作用及相关使用

    千次阅读 2019-05-05 14:30:57
    临时表空间作用: 1、临时数据产生后Oracle数据库会先将这些存放到内存的PGA)内的sor_area排序区(SORT_AREA_SIZE参数)的地方,专门用来存放这些因为排序操作而...2、Oracle临时表空间主要用来做查询和存放一些...
  • 进行oracle程序性能优化时,还要注意undo空间和临时表空间的使用率,如果过高的话,也会导致程序运行缓慢。一般使用率至少需要小于80%。程序运行中报错:ORA-01652:无法通过128(在表空间TEMP中)扩展temp段。数据库...
  • oracle 临时表空间使用率

    千次阅读 2020-06-12 10:31:22
    今天开发反映说临时表空间不够要求添加临时表空间,添加完成(添加了30G的临时表空间)又报临时表空间的不足,开发又要求是添加,有添加了10G,监控临时表空间的使用情况,又撑满了,又添加了30G,最后临时表空间又撑...
  • 來源網絡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...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,112
精华内容 9,244
关键字:

oracle临时表空间不释放