前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle中对临时表空间执行shrink操作

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

作者头像
bisal
发布2022-09-19 14:52:10
4350
发布2022-09-19 14:52:10
举报

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

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

代码语言:javascript
复制
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视图,可以看到临时表空间的使用情况,

代码语言:javascript
复制
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

执行收缩指令,

代码语言:javascript
复制
SQL> alter tablespace temp shrink space;
Tablespace altered.

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

代码语言:javascript
复制
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,

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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,

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
SQL> alter tablespace temp shrink tempfile '/opt/oracle/oradata/BISALCDB/BISALPDB1/temp02.dbf';
Tablespace altered.

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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》的说明。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档