Oracle临时表空间的管理与受损恢复

Oracle 临时表空间是Oracle数据库的重要组成部分,尽管该部分并没有cont体系结构上得以展现,但其重要地位也是不容忽视的。尤其是对于大型的频繁操作,如创建索引,排序等等都需要在临时表空间完成来减少内存的开销。当然对于查询性能要求较高的应尽可能的避免在磁盘上完成这些操作。本文主要描述的是临时表空间的管理与受损恢复。

一、临时表空间的特性与注意事项

1.特性
用户存储临时数据的表空间
临时数据通常只在一个数据库会话期间内存在的数据,分为两种形式,排序数据和全局临时表
临时数据不会被写入存储永久对象的普通表空间内,而是存储在临时表空间的临时段中
临时表空间临时性导致不需要备份该类型的表空间,RMAN也不支持对临时表空间的备份
对于临时数据的处理,不会生成重做,也不会生成撤销数据
临时表空间的数据文件不能置为只读、不能重命名
监时表空间的数据文件的日志方式总是NOLOGGING
使用临时表空间的主要操作
CREATE INDEX,ALTER INDEX ...REBUILD,ORDER BY,GROUP BY,DISTINCT,UNION,INTERSECT,MINUS,SORT-MERGER,JOIN,ANALYZE

二、临时表空间的管理
1. 查看缺省的临时表空间

SQL> select property_name,property_value from database_properties     
  2  where property_name like 'DEFAULT%';                             
                                                                       
PROPERTY_NAME                  PROPERTY_VALUE                         
------------------------------ --------------------------------       
DEFAULT_TEMP_TABLESPACE        TEMP                                   
DEFAULT_PERMANENT_TABLESPACE  USERS                                   
DEFAULT_TBS_TYPE              SMALLFILE 

2.查看临时表空间的大小及位置

SQL> select s.name tbsname,t.name,(t.bytes/1024/1024) bytes,status                     
  2  from v$tablespace s,v$tempfile t                                                 
  3  where s.ts# = t.ts#;                                                             
                                                                                       
TBSNAME    NAME                                              BYTES  STATUS           
---------- --------------------------------------------- ----------  -------         
TEMP      /u01/app/oracle/oradata/orcl/temp01.dbf              30  ONLINE           
                                                                                       
SQL> select tablespace_name,file_name,bytes/1024/1024 Size_MB from dba_temp_files;     
                                                                                       
TABLESPACE FILE_NAME                                        SIZE_MB                   
---------- --------------------------------------------- ----------                   
TEMP      /u01/app/oracle/oradata/orcl/temp01.dbf              30                   
                                                                                       
SQL> select tablespace_name,logging,allocation_type                                   
  2  from dba_tablespaces where tablespace_name='TEMP';                               
                                                                                       
TABLESPACE LOGGING  ALLOCATIO                                                         
---------- --------- ---------                                                         
TEMP      NOLOGGING UNIFORM                                                           

3. 临时表文件大小和已使用空间

SELECT t1."Tablespace" "Tablespace",                                                       
      t1."Total (G)" "Total (G)",                                                         
      nvl(t2."Used (G)", 0) "Used(G)",                                                   
      t1."Total (G)" - nvl(t2."Used (G)", 0) "Free (G)"                                   
FROM  (SELECT tablespace_name "Tablespace",                                               
              to_char((SUM(bytes / 1024 / 1024 / 1024)), '99,999,990.900') "Total (G)"   
        FROM  dba_temp_files                                                             
        GROUP  BY tablespace_name                                                         
        UNION                                                                             
        SELECT tablespace_name "Tablespace",                                               
              to_char((SUM(bytes / 1024 / 1024 / 1024)), '99,999,990.900') "Total (G)"   
        FROM  dba_data_files                                                             
        WHERE  tablespace_name LIKE 'TEMP%'                                               
        GROUP  BY tablespace_name) t1,                                                     
      (SELECT tablespace, round(SUM(blocks) * 8 / 1024 /1024) "Used (G)"                       
        FROM  v$sort_usage                                                               
        GROUP  BY tablespace) t2                                                           
WHERE  t1."Tablespace" = t2.tablespace(+);                                                 
                                                                                           
                                                                                           
Tablespace                    Total (G)          Used(G)  Free (G)                       
------------------------------ --------------- ---------- ----------                       
GOEX_TEMP                              31.999          1    30.999                       
FIX_TEMP                                0.098          0      .098                       
TEMP                                    0.195          0      .195

相关推荐