ITPub博客

首页 > 数据库 > 数据库开发技术 > Oracle中对临时表空间执行shrink操作

Oracle中对临时表空间执行shrink操作

原创 数据库开发技术 作者:bisal 时间:2022-08-03 07:50:00 0 删除 编辑

《Oracle一个诡异的临时表空间不足的问题》中提到对临时表空间执行shrink space的操作,以前一直理解只有对表能做shrink space的操作,但从官方文档看,11g开始,就可以对临时表空间执行相同的操作。


可以简单测测,当前的临时表空间数据文件大小是512MB,

SQL> !ls -rlht /opt/oracle/oradata/BISALCDB/BISALPDB1/total 1.2G-rw-r----- 1 oracle oinstall 211M Jul 29 06:05 users01.dbf-rw-r----- 1 oracle oinstall 5.1M Jul 29 06:05 tbs_32.dbf-rw-r----- 1 oracle oinstall 201M Jul 29 06:05 tbs_32_01.dbf-rw-r----- 1 oracle oinstall 321M Jul 29 15:57 sysaux01.dbf-rw-r----- 1 oracle oinstall 311M Jul 29 16:27 system01.dbf-rw-r----- 1 oracle oinstall 101M Jul 29 16:27 undotbs01.dbf-rw-r----- 1 oracle oinstall 513M Jul 29 16:39 temp01.dbf


通过v$tempfile以及11g新引进的dba_temp_free_space视图,可以看到临时表空间的使用情况,

SQL> select file#,name,bytes/1024/1024 MB from v$tempfile;     FILE# NAME                                                            MB---------- ------------------------------------------------------- ----------         3 /opt/oracle/oradata/BISALCDB/BISALPDB1/temp01.dbf              512
SQL> select * from dba_temp_free_space;TABLESPACE_NAME TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE SHARED INST_ID------------------------------ --------------- --------------- ---------- ------------- ----------TEMP 1610612736 3145728 1607467008 SHARED


执行收缩指令,

SQL> alter tablespace temp shrink space;Tablespace altered.


可以看到临时表空间已经收缩至了2MB,

SQL> select file#,name,bytes/1024/1024 MB from v$tempfile;     FILE# NAME                                                            MB---------- ------------------------------------------------------- ----------         3 /opt/oracle/oradata/BISALCDB/BISALPDB1/temp01.dbf        1.9921875
SQL> select * from dba_temp_free_space;TABLESPACE_NAME TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE SHARED INST_ID------------------------------ --------------- --------------- ---------- ------------- ----------TEMP                                   6266880         3121152    3145728 SHARED


物理的数据文件同样收缩到2MB,

SQL> !ls -rlht /opt/oracle/oradata/BISALCDB/BISALPDB1/total 1.2G-rw-r----- 1 oracle oinstall 211M Jul 29 06:05 users01.dbf-rw-r----- 1 oracle oinstall 5.1M Jul 29 06:05 tbs_32.dbf-rw-r----- 1 oracle oinstall 201M Jul 29 06:05 tbs_32_01.dbf-rw-r----- 1 oracle oinstall 321M Jul 29 15:57 sysaux01.dbf-rw-r----- 1 oracle oinstall 311M Jul 29 16:27 system01.dbf-rw-r----- 1 oracle oinstall 101M Jul 29 16:27 undotbs01.dbf-rw-r----- 1 oracle oinstall 2.0M Jul 29 16:39 temp01.dbf


同样支持对临时数据文件的收缩,先增加个临时表空间数据文件,

SQL> alter tablespace temp add tempfile '/opt/oracle/oradata/BISALCDB/BISALPDB1/temp02.dbf' size 512m reuse autoextend on next 1m maxsize unlimited;Tablespace altered.


初始大小是512MB,

SQL> !ls -rlht /opt/oracle/oradata/BISALCDB/BISALPDB1/total 1.2G-rw-r----- 1 oracle oinstall 211M Jul 29 06:05 users01.dbf-rw-r----- 1 oracle oinstall 5.1M Jul 29 06:05 tbs_32.dbf-rw-r----- 1 oracle oinstall 201M Jul 29 06:05 tbs_32_01.dbf-rw-r----- 1 oracle oinstall 321M Jul 29 15:57 sysaux01.dbf-rw-r----- 1 oracle oinstall 2.0M Jul 29 16:39 temp01.dbf-rw-r----- 1 oracle oinstall 311M Jul 29 16:40 system01.dbf-rw-r----- 1 oracle oinstall 101M Jul 29 16:40 undotbs01.dbf-rw-r----- 1 oracle oinstall 513M Jul 29 16:40 temp02.dbf


从数据库端,可以看到其容量,

SQL> select file#,name,bytes/1024/1024 MB from v$tempfile;     FILE# NAME                                                            MB---------- ------------------------------------------------------- ----------         3 /opt/oracle/oradata/BISALCDB/BISALPDB1/temp01.dbf        1.9921875         5 /opt/oracle/oradata/BISALCDB/BISALPDB1/temp02.dbf              512
SQL> select * from dba_temp_free_space;TABLESPACE_NAME TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE SHARED INST_ID------------------------------ --------------- --------------- ---------- ------------- ----------TEMP 1616879616 6266880 1610612736 SHARED


对临时数据文件进行收缩,

SQL> alter tablespace temp shrink tempfile '/opt/oracle/oradata/BISALCDB/BISALPDB1/temp02.dbf';Tablespace altered.


临时表空间已经进行了收缩,

SQL> select file#,name,bytes/1024/1024 MB from v$tempfile;     FILE# NAME                                                            MB---------- ------------------------------------------------------- ----------         3 /opt/oracle/oradata/BISALCDB/BISALPDB1/temp01.dbf        1.9921875         5 /opt/oracle/oradata/BISALCDB/BISALPDB1/temp02.dbf        1.9921875
SQL> select * from dba_temp_free_space;TABLESPACE_NAME TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE SHARED INST_ID------------------------------ --------------- --------------- ---------- ------------- ----------TEMP 12533760 6242304 6291456 SHARED


临时数据文件,同样进行了收缩,

SQL> !ls -rlht /opt/oracle/oradata/BISALCDB/BISALPDB1/total 1.2G-rw-r----- 1 oracle oinstall 211M Jul 29 06:05 users01.dbf-rw-r----- 1 oracle oinstall 5.1M Jul 29 06:05 tbs_32.dbf-rw-r----- 1 oracle oinstall 201M Jul 29 06:05 tbs_32_01.dbf-rw-r----- 1 oracle oinstall 2.0M Jul 29 16:39 temp01.dbf-rw-r----- 1 oracle oinstall 101M Jul 29 16:42 undotbs01.dbf-rw-r----- 1 oracle oinstall 321M Jul 29 16:43 sysaux01.dbf-rw-r----- 1 oracle oinstall 311M Jul 29 16:43 system01.dbf-rw-r----- 1 oracle oinstall 2.0M Jul 29 16:46 temp02.dbf


alter tablespace ... shrink还支持KEEP子句,可以指定收缩到的最小容量(MB),如果未指定,则会尽可能收缩至最小的容量,就像上面的操作。


具体操作信息,还可以参考官方文档《SQL Language Reference》的说明。



如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"和"在看",或者直接转发pyq,



近期更新的文章:

《如何检索IDC研究报告?》

《MySQL常见索引类型》

《Oracle一个诡异的临时表空间不足的问题》

《MySQL的TIMESTAMP数据类型》

《你知道雨的类型有几种?》

近期的热文:

《"红警"游戏开源代码带给我们的震撼》


文章分类和索引:

《公众号1000篇文章分类和索引》

原文作者:bisal的个人杂货铺;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
Oracle ACE,10g/11g OCP,11g OCM,国内首批Oracle YEP成员(Oracle Young Expert Program,Oracle用户组年轻专家项目),EXIN DevOps Master,Oracle爱好者,微信公众号:bisal的个人杂货铺

注册时间:2022-06-21

  • 博文量
    539
  • 访问量
    2801306