Oracle 临时表空间是Oracle数据库的重要组成部分,尽管该部分并没有cont体系结构上得以展现,但其重要地位也是不容忽视的。尤其是
对于大型的频繁操作,如创建索引,排序等等都需要在临时表空间完成来减少内存的开销。当然对于查询性能要求较高的应尽可能的避免在磁盘
上完成这些操作。本文主要描述的是临时表空间的管理与受损恢复。
一、临时表空间的特性与注意事项
1.特性
用户存储临时数据的表空间
临时数据通常只在一个数据库会话期间内存在的数据,分为两种形式,排序数据和全局临时表
临时数据不会被写入存储永久对象的普通表空间内,而是存储在临时表空间的临时段中
临时表空间临时性导致不需要备份该类型的表空间,RMAN也不支持对临时表空间的备份
对于临时数据的处理,不会生成重做,也不会生成撤销数据
临时表空间的数据文件不能置为只读、不能重命名
监时表空间的数据文件的日志方式总是NOLOGGING
使用临时表空间的主要操作
CREATE INDEX,ALTER INDEX ...REBUILD,ORDER BY,GROUP BY,DISTINCT,UNION,INTERSECT,MINUS,SORT-MERGER,JOIN,ANALYZE
2.临时表空间使用的注意事项
a. 每个用户都有一个缺省的临时表空间,对于临时表空间使用较高的系统,建议将临时表空间数据文件分布到不同的磁盘
b. 对于大型操作频繁,(大型查询,大型分类查询,大型统计分析等),应指定单独的临时表空间,以方便管理
c. 分配用户单独临时表空间,一般是针对大型产品数据库,OLTP数据库,数据库仓库
d. 对于小型产品不需要单独制定临时表空间,使用默认临时表空间
e. 对于临时表空间建议关闭自动扩展功能,避免过度扩展所致的空间压力
关于临时表空间的创建与管理请参考:
Oracle 表空间与数据文件
二、临时表空间的管理
1. 查看缺省的临时表空间
2.查看临时表空间的大小及位置
3. 临时表文件大小和已使用空间
4. 查看当前临时表使用空间大小与正在占用临时表空间的sql语句
3. 修改默认的临时表空间
alter database default temporary tablespace tablespace_name;
4. 对于过度使用临时表空间,在允许的情况下,可以杀掉其session
alter system kill session 'sid,serial#';
三、临时表空间故障
前面已提到,临时表空间不需要备份,如果对临时表空间备份将收到错误提示
临时表空间出错的错误提示(位于告警日志中alert_orcl.log)
Errors in file /u01/app/oracle/admin/orcl/bdump/orcl_dbw0_2230.trc:
ORA-01186:file 3 failed verification tests
ORA-01157:cannot identify/lock data file 3 - see DBWR trace file
ORA-01110:data file 3:'/u01/app/oracle/oradata/orcl/temp01.dbf'
四、还原受损的临时表空间
1. 在session 1中删除临时表空间的数据文件
2. 在session 2中执行排序查询,提示临时数据文件错误
3. 在session 1中为临时表空间增加数据文件
4. 在session 2中继续执行排序操作,此次执行成功
5. 查询临时数据文件状态及文件存在性
6. 清除控制文件内记录的不存在的临时文件信息
7. 基于表空间级别的恢复操作(下面给出主要步骤,不在演示)
a. 创建一个新的临时表空间
b. 使用alter database 将用户切换到新的临时表空间,即设置新的默认的临时表空间
c. 删除受损的临时表空间