oracle数据库UNDOTBS空间清理
1.背景
數據庫UNDOTBS1表空間報警:
##告警172.0.0.1_Oracle數據庫讀寫分離–Oracle_TableSpace:UNDOTBS1使用率超過90,故障已持續0m(IP地址172.0.0.1;告警時間2020.03.11 09:47:53;檢查項oracle.check[pre,UNDOTBS1] ;當前狀態PROBLEM;值92 %)
2.操作排查問題
(1)看到此報錯,一般認為數據庫的表空間不足,查詢之后,表空間還存在很大的空余,之后認真查看了一下表空間名稱,一看是UNDOTBS1(回滾表空間),這就知道什么原因了。
(2)知識普及:UNDOTBS1是一個回滾表空間,隨著數據庫的使用,默認會自動擴展。當它增大到一定程度,占用了過多的磁盤空間時,就需要進行清理了。
(3)網上查詢一下,發現有好多說操作要重啟數據庫,由于數據庫上正在跑著數據,不能重啟,所以這種方案被否決。
3.解決方案
這里以表空間UNDOTBS1為例,undotbs2 為新建的表空間
(1)登錄數據庫服務器
執行:su - oracle
(2)使用dab登錄
執行:sqlplus / as sysdba
(3)查詢表空間信息
執行:select * from dba_data_files;
(4)查詢當前使用的undotbs表空間
SQL>show parameters undo;
(5)重新建立一個新的undo表空間
執行:create undo tablespace undotbs2 datafile '/user/oracle/oradata/undotbs02.dbf' size 8048m;
(6)設置數據庫的undo表空間為新的undotbs2表空間
執行:alter system set undo_tablespace=undotbs2;
(7)刪除舊的undo表空間及其內容
執行:drop tablespace undotbs1 including contents and datafiles;
(8)再次執行語句查看表空間
SELECT a.tablespace_name "表空間名", total "表空間大小", free "表空間剩余大小", (total - free) "表空間使用大小", total / (1024 * 1024 * 1024) "表空間大小(G)", free / (1024 * 1024 * 1024) "表空間剩余大小(G)", (total - free) / (1024 * 1024 * 1024) "表空間使用大小(G)", round((total - free) / total, 4) * 100 "使用率 %" FROM (SELECT tablespace_name, SUM(bytes) free FROM dba_free_space GROUP BY tablespace_name) a, (SELECT tablespace_name, SUM(bytes) total FROM dba_data_files GROUP BY tablespace_name) b WHERE a.tablespace_name = b.tablespace_name;(8)但是即使按照上面的方式清空UNDOTBS表空間,主要頻繁執行update語句也會很快讓空間飽和,所以可以考慮關閉undo retention的自動優化特性,即將數據庫參數_undo_autotune設置為FALSE,
執行:Alter system set "_undo_autotune" = false;
該參數可以在線調整,不需要重啟數據庫,也不會影響系統額正常運行。
(10)增大臨時文件大小
alter database tempfile ‘/user/oracle/oradata/undotbs02.dbf’ RESIZE 4096M;
參考:https://blog.csdn.net/ziele_008/article/details/104792752
總結
以上是生活随笔為你收集整理的oracle数据库UNDOTBS空间清理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: getprop导出雷电模拟器Androi
- 下一篇: linux cmake编译源码,linu