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

Oracle临时表空间

DBA随笔记 2024-12-21
370

Temporary Tablespace 介绍

临时 TBS 用来管理数据库排序操作以及用于存储临时表、中间排序结果等临时对象,当 ORACLE 里需要用到 SORT 的时候,并且当 PGA 中sort_area_size
大小不够时,将会把数据放入临时 TBS 里进行排序。

像数据库中一些操作:CREATE INDEX、 ANALYZE、SELECT DISTINCT、ORDER BY、GROUP BY、 UNION ALL、 INTERSECT、MINUS、SORT-MERGE JOINS、HASH JOIN
等都可能会用到临时表空间。当操作完成后,系统会自动清理临时 TBS 中的临时对象,自动释放临时段。这里的释放只是标记为空闲、可以重用,其实实质占用的磁盘空间并没有真正释放。这也是临时 TBS 有时会不断增大的原因。

用于排序,可以建立多个临时 TBS,但默认的临时 TBS 只能有一个。

数据库open状态下,default temporary tablespace
不能offline
drop

如果未指定默认的临时 TBS,Oracle 将会使用 system 作为temp TBS
(非本地管理)。

只有temp TBS
nologing
不产生日志的。

    SQL> alter tablespace temp add tempfile '/u01/app/oracle/oradata/orcl/temp01.dbf' size 100m reuse;
    -- 这等于在原地重置了(reuse)临时 TBS,可以在dba_temp_files里没有任何记录时使用这条命令;
    SQL> select file_id,file_name,tablespace_name from dba_temp_files;
    FILE_ID FILE_NAME TABLESPACE_NAME
    ------- --------------------------------------- ----------------
    1 /u01/app/oracle/oradata/orcl/temp01.dbf TEMP
    SQL> col name for a40;
    SQL> select file#,name ,bytes/1024/1024 from v$tempfile;
    FILE# NAME BYTES/1024/1024
    -------- --------------------------------------- ----------------
    1 /u01/app/oracle/oradata/orcl/temp01.dbf 100

    1.2 建立临时 TBS 的增删改

    1.2.1 创建 TBS

      SQL> create temporary tablespace temp2 tempfile '/u01/app/oracle/oradata/orcl/temp02.dbf' size 10m;

      1.2.2 增加数据文件

        SQL> alter tablespace temp2 add tempfile '/u01/app/oracle/oradata/orcl/temp03.dbf' size 5m;
        SQL> select file_id,file_name,tablespace_name from dba_temp_files;
        FILE_ID FILE_NAME TABLESPACE_NAME
        ------- --------------------------------------- ----------------
        1 /u01/app/oracle/oradata/orcl/temp01.dbf TEMP
        2 /u01/app/oracle/oradata/orcl/temp02.dbf TEMP2
        3 /u01/app/oracle/oradata/orcl/temp03.dbf TEMP2

        1.2.3 删除表空间数据文件

          -- 将temp2里删掉一个tempfile.
          SQL> alter tablespace temp2 drop tempfile '/u01/app/oracle/oradata/orcl/temp03.dbf';
          SQL> select file_id,file_name,tablespace_name from dba_temp_files;
          FILE_ID FILE_NAME TABLESPACE_NAME
          ------- --------------------------------------- ----------------
          1 /u01/app/oracle/oradata/orcl/temp01.dbf TEMP
          2 /u01/app/oracle/oradata/orcl/temp02.dbf TEMP2

          1.3 查看默认的临时 TBS

            SQL> col PROPERTY_NAME for a30
            SQL> col PROPERTY_VALUE for a35
            SQL> col description for a85
            SQL> select * from database_properties;
            PROPERTY_NAME PROPERTY_VALUE   DESCRIPTION
            ---------------------------- -------------- ------------------------------------
            DICT.BASE 2 dictionary base tables version #
            DEFAULT_TEMP_TABLESPACE TEMP Name of default temporary tablespace
            DEFAULT_PERMANENT_TABLESPACE        USERS Name of default permanent tablespace
            DEFAULT_TBS_TYPE SMALLFILE Default tablespace type
            NLS_LANGUAGE AMERICAN Language
            NLS_TERRITORY AMERICA Territory
            .....
            38 rows selected.

            1.4 指定用户使用临时 TBS

              SQL> alter user scott temporary tablespace temp2;
              -- 注意,与default profile不同,删除了temp2,scott的temporary不会转回到temp。

              1.5 修改数据库默认临时 TBS

                SQL> alter database default temporary tablespace temp2;
                SQL> select * from database_properties;
                PROPERTY_NAME PROPERTY_VALUE DESCRIPTION
                ---------------------------- -------------- ------------------------------------
                DICT.BASE 2 dictionary base tables version #
                DEFAULT_TEMP_TABLESPACE TEMP2 Name of default temporary tablespace
                DEFAULT_PERMANENT_TABLESPACE USERS        Name of default permanent tablespace
                DEFAULT_TBS_TYPE SMALLFILE Default tablespace type
                NLS_LANGUAGE AMERICAN Language
                ...


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

                评论