一次orcl临时表空间为空问题解决分享

一、问题

      有个现场反映在导出数据库脚本时,一直提示临时表空间为空。刚接到到这个问题时也是一脸懵逼,数据库临时表空间是什么有何作用,心底也有一丝窃喜因为有可以接触到一些自己不懂的知识。

二、解决思路

      1、 对于自己不熟悉的问题第一时间想到的就是百度,先百度了下什么是临时表空间。

      临时表空间:临时表空间用来管理数据库排序操作以及用于存储临时表、中间排序结果等临时对象,当ORACLE里需要用到SORT的时候,并且当PGA中sort_area_size大小不够时,将会把数据放入临时表空间里进行排序。像数据库中一些操作: CREATE INDEX、 ANALYZE、SELECT DISTINCT、ORDER BY、GROUP BY、 UNION ALL、 INTERSECT、MINUS、SORT-MERGE JOINS、HASH JOIN等都可能会用到临时表空间。当操作完成后,系统会自动清理临时表空间中的临时对象,自动释放临时段。这里的释放只是标记为空闲、可以重用,其实实质占用的磁盘空间并没有真正释放。这也是临时表空间有时会不断增大的原因。临时表空间存储大规模排序操作(小规模排序操作会直接在RAM里完成,大规模排序才需要磁盘排序Disk Sort)和散列操作的中间结果.它跟永久表空间不同的地方在于它由临时数据文件(temporary files)组成的,而不是永久数据文件(datafiles)。临时表空间不会存储永久类型的对象,所以它不会也不需要备份。另外,对临时数据文件的操作不产生redo日志,不过会生成undo日志。创建临时表空间或临时表空间添加临时数据文件时,即使临时数据文件很大,添加过程也相当快。这是因为ORACLE的临时数据文件是一类特殊的数据文件:稀疏文件(Sparse File),当临时表空间文件创建时,它只会写入文件头部和最后块信息(only writes to the header and last block of the file)。它的空间是延后分配的.这就是你创建临时表空间或给临时表空间添加数据文件飞快的原因。另外,临时表空间是NOLOGGING模式以及它不保存永久类型对象,因此即使数据库损毁,做Recovery也不需要恢复Temporary Tablespace。

   2、再在网上看了下一些关于临时表空间为空的一些博客看下其他怎么是怎么解决的类似问题的。

   3、通过收集的信息问题原因猜测可能是表空间文件丢了。

三、问题j解决过程

   1、查了orcl的数据文件目录临时文件有,看了下大小是才使用9M多默认大小是200M,那说明临时表空间文件是存在的。

   2、再按网上说得查下了下数据存储的表空间状态状态。

       select tablespace_name,status from dba_tablespaces;

        看下状态是正常的,临时表空间最大也是200M说明大小是够的。

    3、查询临时表空间文件

       select tablespace_name,file_name from dba_temp_files;

扫描二维码关注公众号,回复: 4900137 查看本文章

       没有查询出结果,说明已经找不到物理文件了。

    4、尝试能否重新已经有的临时文件

        alter tablespace temp add tempfile '数据目录下的临时表空间文件路由' size  200m autoextend on;

        报临时文件已经存在。说明不能添加目录下已经存在同名的临时空间,换个文件名后没有报错。

     5、我们查看一下文件是否建立成功

        select tablespace_name,file_name from dba_temp_files;

         查询出结果,看了目录下新的临时表文件也存在,说明建成功了,让现场技术支持人员导出数据,可以正常使用

猜你喜欢

转载自blog.csdn.net/swh1314/article/details/81710081