您好,登錄后才能下訂單哦!
這篇文章主要介紹了生產環境Oracle undo表空間如何管理的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇生產環境Oracle undo表空間如何管理文章都會有所收獲,下面我們一起來看看吧。
Oracle 數據庫有一種維護信息的方法,用于回滾或撤消對數據庫的更改。Oracle 數據庫在事務提交之前保留事務操作的記錄,Oracle 需要此信息來回滾或撤消對數據庫的更改。這些記錄稱為回滾或撤銷記錄。
這些記錄用于:
回滾事務 - 發出 ROLLBACK 語句時,撤銷記錄用于撤消未提交事務對數據庫所做的更改。
恢復數據庫 - 在數據庫恢復期間,撤銷記錄用于撤消從重做日志應用到數據文件的任何未提交的更改。
提供讀取一致性 - 撤消記錄通過為正在訪問數據同時另一個用戶正在更改數據的用戶維護數據的前映像來提供讀取一致性。
使用Flashback Query
分析較早時間點的數據。
使用閃回功能從邏輯損壞中恢復。
在Oracle 8i之前,Oracle使用回滾段來管理撤銷數據。Oracle9i引入了自動撤消管理,它允許 dba 對撤消信息的保留時間施加更多控制,簡化撤消空間管理并消除管理回滾段的復雜性。Oracle 強烈建議您使用 undo 表空間來管理 undo 而不是回滾段。
undo
段的空間是動態分配、使用、釋放和重用的--所有這些都在Oracle數據庫的控制下,而不是由DBA控制。
從Oracle 9i開始,回滾段方法稱為“手動撤銷管理模式”,新的撤銷表空間的方法稱為“自動撤銷管理模式”。
說明:
盡管支持回滾段和撤消表空間,但這兩種模式不能在同一個數據庫實例中使用,盡管出于遷移目的,可以在使用回滾段的數據庫中創建撤消表空間,或刪除回滾段在使用撤消表空間的數據庫中。但是,您必須退回數據庫才能切換到另一種管理撤銷的方法。
兩種模式都存在系統回滾段。
在自動撤消管理模式下運行時,任何手動撤消管理 SQL 語句和初始化參數都將被忽略,并且不會發出錯誤消息,例如 ALTER ROLLBACK SEGMENT
語句將被忽略。
有兩種創建撤消表空間的方法:
第一種方法:在發出CREATE DATABASE
語句時創建撤消表空間。這發生在您創建新數據庫并且實例以自動撤銷管理模式 (UNDO_MANAGEMENT = AUTO) 啟動時。
第二種方法:用于現有數據庫。它使用 CREATE UNDO TABLESPACE
語句。
我們不能在撤銷表空間中創建數據庫對象。它保留用于系統管理的撤銷數據。Oracle 數據庫使我們能夠創建單文件撤銷表空間。
以下語句說明了在CREATE DATABASE
語句中使用 UNDO TABLESPACE
子句。undo 表空間名為 undotbs_01,并為其分配了一個數據文件
SQL> CREATE DATABASE ... UNDO TABLESPACE undotbs_01 DATAFILE '/path/undo01.dbf' RETENTION GUARANTEE;
如果在CREATE DATABASE
期間無法成功創建 undo 表空間,則整個操作將失敗。CREATE UNDO TABLESPACE
語句與 CREATE TABLESPACE
語句相同,但指定了 UNDO 關鍵字。數據庫決定了撤銷表空間的大部分屬性,但您可以指定 DATAFILE 子句。
此示例創建 undotbs_02 撤銷表空間:
SQL> CREATE UNDO TABLESPACE undotbs_02 DATAFILE '/path/undo02.dbf' SIZE 2M REUSE AUTOEXTEND ON RETENTION NOGUARANTEE ;
方法一:縮小撤消表空間大小
分配后的撤銷空間將可供重用,但不會重新分配給操作系統。縮小 Undo 表空間的最佳方法是切換到新的 Undo 表空間并刪除舊的 Undo 表空間。、
步驟是:
根據您的數據庫要求創建一個相同大小(更大或更小)的新撤消表空間。
SQL> create undo tablespace UNDOTBS2 datafile 'D:\ORACLE\PRODUCT\11.2.0\ORADATA\ORCL\UNDOTBS02.DBF' size 5000M;
切換到新的 Undo 表空間:
SQL> ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBS2 SCOPE=BOTH;
查看undo segment
的狀態,判斷old undo tablespace中的segment是否都處于offline狀態。
sql> select tablespace_name, status, count(*) from dba_rollback_segs group by tablespace_name, status;
如果表空間中有狀態不是OFFLINE
的Undo
段要被刪除,我們需要等到它們變為OFFLINE。您可能必須等待tuned_undoretention 的持續時間(來自v$undostat)以確保所有撤消段都已變為OFFLINE。
sql> select status,segment_name from dba_rollback_segs where status not in ("OFFLINE') and tablespace_name=[undo tablespace to be dropped];
例如:
sql> select status,segment_name from dba_rollback_segs where status not in ("OFFLINE') and tablespace_name='UNDOTBS1';
如果舊Undo
表空間中的所有Undo段都處于OFFLINE狀態,則刪除該表空間。
sql> select tablespace_name, status, count(*) from dba_rollback_segs group by tablespace_name, status;
驗證然后丟棄:
sql> drop tablespace [tablespace_name] including contents and datafiles;
例如:
sql> drop tablespace UNDOTBS1 including contents and datafiles;
方法二:向撤消表空間添加空間
對于增加/調整撤消表空間的大小,有兩個選項:
調整現有撤銷數據文件的大小
將新的撤銷數據文件添加到表空間。
調整現有撤銷數據文件的大小:
col T_NAME for a23 col FILE_NAME for a65 select tablespace_name T_NAME,file_name, bytes/1024/1024 MB from dba_data_files where tablespace_name =(SELECT UPPER(value) FROM v$parameter WHERE name = 'undo_tablespace') order by file_name; alter database datafile '[COMPLETE_PATH_OF_UNDO_DBF_FILE]' resize [SIZE]M;
例如:
sql> alter database datafile 'D:\ORACLE_DB\TESTDB\TESTDB\UNDOTBS01.DBF' resize 1500M;
添加新數據文件的步驟:
sql> alter tablespace [UNDO tbs name] ADD DATAFILE '[COMPLETE_PATH_OF_UNDO_DBF_FILE]' size 20M;
例如:
sql> alter tablespace UNDOTBS1 ADD DATAFILE 'D:\ORACLE_DB\TESTDB\TESTDB\UNDOTBS02.DBF' size 20M;
以下建議列表將幫助您管理撤銷空間以發揮最大優勢。
除非您的系統具有閃回或 LOB 保留要求,否則您無需為UNDO_RETENTION
參數設置值。
在撤銷表空間中留出 10% 到 20% 的額外空間,以應對工作負載的一些波動。
正確設置撤消表空間警報的警告和嚴重警報閾值。
要調整 SQL 查詢或檢查失控查詢,請使用長查詢或V$UNDOSTAT
或 WRH$_UNDOSTAT
視圖中提供的 SQLID 列的值從 V$SQL 視圖檢索 SQL 文本和有關 SQL 的其他詳細信息。
關于“生產環境Oracle undo表空間如何管理”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“生產環境Oracle undo表空間如何管理”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。