[ 概述 ]
测试以及研究环境中,有些时候临时表空间的增长会很迅速,大量的消耗了系统的磁盘资源,并且临时表空间过大对于系统本身的性能也有一定影响影响。本文档主要介绍了oracle数据库临时表空间的重建的详细步骤,提供了上述问题的简要解决的方法,请使用前注意每种方法需要的前提条件。另本文档仅适用于所描述的较简单的场景,复杂场景如需要在高级别环境上实施,还请进一步验证后执行。
文档的语句均已经在下面的环境中进行过测试
Windows xp sp2 oracle 10gR2
AIX 5.3 oracle10gR2
[ 环境情况 ]
状态和关联数据文件
SQL> select tf.file_name,tf.tablespace_name,tf.status from dba_temp_files tf;
关联用户
SQL> select username,temporary_tablespace from dba_users; -- 每个用户的默认临时表空间可能不同
通过执行上面的两个语句可以了解临时表空间对应的数据文件,和每个用户的临时表空间对应情况。了解上述情况便于以后的数据库操作。
[ 确认数据库版本 ]
下面的操作中有些对数据库的版本有要求的,所以建议先行确认下数据的版本情况。
SQL> select * from v$version;
[ 在线切换 ]
创建新的临时表空间
SQL> create temporary tablespace temp2 tempfile 'D:\oracle\product\10.2.0\oradata\lisa\TEMP21.DBF' size 20M;
临时表空间切换
SQL> alter database default temporary tablespace temp2; -- 系统默认表空间
SQL> alter user lisa temporary tablespace temp2; --用户默认表空间,其中temp为新建的表空间。
[ 确认切换 ]
状态和关联数据文件
SQL> select tf.file_name,tf.tablespace_name,tf.status from dba_temp_files tf;
关联用户
SQL> select username,temporary_tablespace from dba_users;
[ 删除原来的表空间 ]
SQL> drop tablespace temp including contents and datafiles;
启停测试
进行一次正常的停止、启动操作,确认系统正常。
[ 离线切换 ]
此处的描述仅适合10gR2以及后即版本的数据库。
10gR2版本的新特性中添加了对临时表空间数据文件的自动恢复特性。当数据库在关闭的状态下,删除临时表空间的文件,数据库会在open过程中自动依据原始的创建语句自动重新创建临时表空间。
所以,对于可停机的数据库,如果数据库版本高于10gR2,可以停机删除临时表空间对应的数据文件,之后重启数据库,这样临时表空间会自动重建。当然此种方法对于初始值就很大,并且没有什么增长的临时表空间就没什么效果了。所以创建临时表空间的时候初始值不要设置的太大。
数据冷迁移中临时表空间的处理
如果是10gR2版本或以上的数据库,可以不用迁移临时表空间对应的数据文件,直接拷贝需要的数据文件即可。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16500289/viewspace-688007/ ,如需转载,请注明出处,否则将追究法律责任。