1. 程式人生 > >一次orcl臨時表空間為空問題解決分享

一次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;

       沒有查詢出結果,說明已經找不到物理檔案了。

    4、嘗試能否重新已經有的臨時檔案

        alter tablespace temp add tempfile '資料目錄下的臨時表空間檔案路由' size  200m autoextend on;

        報臨時檔案已經存在。說明不能新增目錄下已經存在同名的臨時空間,換個檔名後沒有報錯。

     5、我們檢視一下檔案是否建立成功

        select tablespace_name,file_name from dba_temp_files;

         查詢出結果,看了目錄下新的臨時表文件也存在,說明建成功了,讓現場技術支援人員匯出資料,可以正常使用