暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

1188

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篇文章分类和索引

                        文章转载自戏说数据那点事,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                        评论