詳解如何刪除Oracle數(shù)據(jù)庫臨時表空間
前言
因生產環(huán)境磁盤空間不足,影響了業(yè)務,短時間內無法擴容磁盤,經過排查發(fā)現(xiàn),可以釋放temp臨時表空間來臨時釋放部分空間。
本文記錄了如何釋放臨時表空間的詳細操作步驟。
1、查看舊的臨時表空間
首先查看舊的臨時表空間的空間占用情況
SQL>select tablespace_name,tablespace_size/1024/1024, allocated_space/1024/1024,free_space/1024/1024 from dba_temp_free_space; TABLESPACE_NAME TABLESPACE_SIZE/1024/1024 ALLOCATED_SPACE/1024/1024 FREE_SPACE/1024/1024 -------------------- ------------------------- ------------------------- -------------------- TEMP 23069 23069 23067
2、新建temp表空間
創(chuàng)建新的臨時表空間,用于替換舊的臨時表空間
SQL>create temporary tablespace temp1 tempfile ‘+DATA' size 100m autoextend on; Tablespace created.
3、修改默認臨時表空間
將新的臨時表空間設置為默認的臨時表空間
SQL>alter database default temporary tablespace temp1; Database altered.
4、查看新建的臨時表空間使用情況
新的臨時表空間被設置為默認臨時表空間后,新的臨時數(shù)據(jù)會寫到新的臨時表空間中,下面查看新建的臨時標快的空間占用情況
SQL>select tablespace_name,tablespace_size/1024/1024 total, allocated_space/1024/1024 allocated ,free_space/1024/1024 free from dba_temp_free_space; tablespace_name total allocated free -------------------- ------------------------- ------------------------- -------------------- TEMP 23069 23069 23067 TEMP1 100 3 99
5、查看臨時表空間使用情況
5.1、查看誰在使用臨時表空間
下面的SQL查詢哪些會話在占用舊的臨時表空間
SQL>Col PROGRAM for a20 SQL>Col MACHINE for a20 SQL>col username for a15 SQL>SELECT se.username, sid, serial#, sql_address, machine, program, tablespace, segtype, contents FROM v$session se,v$sort_usage su WHERE se.saddr=su.session_addr order by 7,1;
5.2、然后查看用戶的狀態(tài)是active還是inactive,如果是inactive,直接kill即可
如果舊的臨時表空間的會話是active,需要謹慎,不能直接kill,需要等待會話消失或者變成inactive狀態(tài)。如果是inactive狀態(tài),可以直接kill會話。
SQL>select * from v$session where sid=‘1042'; SQL>alter system kill session ‘1042,48682';
5.3、查看臨時表空間上正在執(zhí)行哪些SQL
上面的SQL查看哪些會話運行在舊的臨時表空間, 下面的SQL將查詢active會話中,正在執(zhí)行的SQL語句。以此來判斷是否是關鍵的事物。
SQL>Col tablespace name for a20 SQL>SELECT se.username, se.sid, se.serial#, su.extents, su.blocks \* to\_number(rtrim(p.value)) AS Space, tablespace, segtype, sql\_text FROM v$sort\_usage su,v$parameter p ,v$session se,v$sql s WHERE p.NAME = ‘db\_block\_size' AND su.session\_addr = se.saddr AND s.hash\_value = su.sqlhash AND s.address = su.sqladdr ORDER BY se.username ,se.sid;
6、確定舊的臨時表空間沒有在被使用,直接刪除即可
通過上面的兩個SQL語句確認舊的臨時表空間上沒有會話和事物之后,就可以刪除舊的臨時表空間了。
SQL>drop tablespace temp including contents and datafiles;
到此這篇關于詳解如何刪除Oracle數(shù)據(jù)庫臨時表空間的文章就介紹到這了,更多相關刪除Oracle臨時表空間內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
優(yōu)化Oracle停機時間及數(shù)據(jù)庫恢復
優(yōu)化Oracle停機時間及數(shù)據(jù)庫恢復...2007-03-03Oracle獲取GUID和生成批量插入語句實現(xiàn)方法
這篇文章主要給大家介紹了關于Oracle獲取GUID和生成批量插入語句實現(xiàn)的相關資料,文中通過圖文以及示例代碼介紹的非常詳細,對大家學習或者工作具有一定的參考價值,需要的朋友可以參考下2023-08-08Oracle數(shù)據(jù)庫執(zhí)行腳本常用命令小結
這篇文章主要介紹了Oracle數(shù)據(jù)庫執(zhí)行腳本常用命令小結的相關資料,需要的朋友可以參考下2015-12-12