生產環(huán)境Oracle undo表空間管理實踐
一、什么是撤銷以及為什么在oracle中撤銷?
Oracle 數(shù)據(jù)庫有一種維護信息的方法,用于回滾或撤消對數(shù)據(jù)庫的更改。Oracle 數(shù)據(jù)庫在事務提交之前保留事務操作的記錄,Oracle 需要此信息來回滾或撤消對數(shù)據(jù)庫的更改。這些記錄稱為回滾或撤銷記錄。
這些記錄用于:
- 回滾事務 - 發(fā)出 ROLLBACK 語句時,撤銷記錄用于撤消未提交事務對數(shù)據(jù)庫所做的更改。
- 恢復數(shù)據(jù)庫 - 在數(shù)據(jù)庫恢復期間,撤銷記錄用于撤消從重做日志應用到數(shù)據(jù)文件的任何未提交的更改。
- 提供讀取一致性 - 撤消記錄通過為正在訪問數(shù)據(jù)同時另一個用戶正在更改數(shù)據(jù)的用戶維護數(shù)據(jù)的前映像來提供讀取一致性。
- 使用
Flashback Query
分析較早時間點的數(shù)據(jù)。 - 使用閃回功能從邏輯損壞中恢復。
在Oracle 8i之前,Oracle使用回滾段來管理撤銷數(shù)據(jù)。Oracle9i引入了自動撤消管理,它允許 dba 對撤消信息的保留時間施加更多控制,簡化撤消空間管理并消除管理回滾段的復雜性。Oracle 強烈建議您使用 undo 表空間來管理 undo 而不是回滾段。
undo
段的空間是動態(tài)分配、使用、釋放和重用的--所有這些都在Oracle數(shù)據(jù)庫的控制下,而不是由DBA控制。
從Oracle 9i開始,回滾段方法稱為“手動撤銷管理模式”,新的撤銷表空間的方法稱為“自動撤銷管理模式”。
說明:
- 盡管支持回滾段和撤消表空間,但這兩種模式不能在同一個數(shù)據(jù)庫實例中使用,盡管出于遷移目的,可以在使用回滾段的數(shù)據(jù)庫中創(chuàng)建撤消表空間,或刪除回滾段在使用撤消表空間的數(shù)據(jù)庫中。但是,您必須退回數(shù)據(jù)庫才能切換到另一種管理撤銷的方法。
- 兩種模式都存在系統(tǒng)回滾段。
- 在自動撤消管理模式下運行時,任何手動撤消管理 SQL 語句和初始化參數(shù)都將被忽略,并且不會發(fā)出錯誤消息,例如
ALTER ROLLBACK SEGMENT
語句將被忽略。
二、管理undo表空間
2.1 創(chuàng)建undo表空間
有兩種創(chuàng)建撤消表空間的方法:
第一種方法:在發(fā)出CREATE DATABASE
語句時創(chuàng)建撤消表空間。這發(fā)生在您創(chuàng)建新數(shù)據(jù)庫并且實例以自動撤銷管理模式 (UNDO_MANAGEMENT = AUTO) 啟動時。
第二種方法:用于現(xiàn)有數(shù)據(jù)庫。它使用 CREATE UNDO TABLESPACE
語句。
我們不能在撤銷表空間中創(chuàng)建數(shù)據(jù)庫對象。它保留用于系統(tǒng)管理的撤銷數(shù)據(jù)。Oracle 數(shù)據(jù)庫使我們能夠創(chuàng)建單文件撤銷表空間。
以下語句說明了在CREATE DATABASE
語句中使用 UNDO TABLESPACE
子句。undo 表空間名為 undotbs_01,并為其分配了一個數(shù)據(jù)文件
SQL>?CREATE?DATABASE?...? UNDO?TABLESPACE?undotbs_01?DATAFILE?'/path/undo01.dbf'?RETENTION?GUARANTEE;?
如果在CREATE DATABASE
期間無法成功創(chuàng)建 undo 表空間,則整個操作將失敗。CREATE UNDO TABLESPACE
語句與 CREATE TABLESPACE
語句相同,但指定了 UNDO 關鍵字。數(shù)據(jù)庫決定了撤銷表空間的大部分屬性,但您可以指定 DATAFILE 子句。
此示例創(chuàng)建 undotbs_02 撤銷表空間:
SQL>?CREATE?UNDO?TABLESPACE?undotbs_02?DATAFILE?'/path/undo02.dbf'?SIZE?2M?REUSE?AUTOEXTEND?ON?RETENTION?NOGUARANTEE?;?
2.2 調整 Undo 表空間大小
方法一:縮小撤消表空間大小
分配后的撤銷空間將可供重用,但不會重新分配給操作系統(tǒng)??s小 Undo 表空間的最佳方法是切換到新的 Undo 表空間并刪除舊的 Undo 表空間。、
步驟是:
根據(jù)您的數(shù)據(jù)庫要求創(chuàng)建一個相同大小(更大或更小)的新撤消表空間。
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
的狀態(tài),判斷old undo tablespace中的segment是否都處于offline狀態(tài)。
sql>?select?tablespace_name,?status,?count(*)?from?dba_rollback_segs?group?by?tablespace_name,?status;?
如果表空間中有狀態(tài)不是OFFLINE
的Undo
段要被刪除,我們需要等到它們變?yōu)镺FFLINE。您可能必須等待tuned_undoretention 的持續(xù)時間(來自v$undostat)以確保所有撤消段都已變?yōu)镺FFLINE。
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狀態(tài),則刪除該表空間。
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;?
方法二:向撤消表空間添加空間
對于增加/調整撤消表空間的大小,有兩個選項:
- 調整現(xiàn)有撤銷數(shù)據(jù)文件的大小
- 將新的撤銷數(shù)據(jù)文件添加到表空間。
調整現(xiàn)有撤銷數(shù)據(jù)文件的大?。?/strong>
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;?
添加新數(shù)據(jù)文件的步驟:
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;?
三、Oracle 中撤消表空間/撤消管理的最佳實踐
以下建議列表將幫助您管理撤銷空間以發(fā)揮最大優(yōu)勢。
- 除非您的系統(tǒng)具有閃回或 LOB 保留要求,否則您無需為
UNDO_RETENTION
參數(shù)設置值。 - 在撤銷表空間中留出 10% 到 20% 的額外空間,以應對工作負載的一些波動。
- 正確設置撤消表空間警報的警告和嚴重警報閾值。
- 要調整 SQL 查詢或檢查失控查詢,請使用長查詢或
V$UNDOSTAT
或WRH$_UNDOSTAT
視圖中提供的 SQLID 列的值從 V$SQL 視圖檢索 SQL 文本和有關 SQL 的其他詳細信息。
到此這篇關于生產環(huán)境Oracle undo表空間管理實踐的文章就介紹到這了,更多相關Oracle undo表空間管理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
oracle 使用sql獲取數(shù)據(jù)庫表、表的字段的多種方法
使用sql獲取數(shù)據(jù)庫表,表的字段的方法有很多,本文整理了幾個常用且實用的方法,需要的朋友可以參考下2013-11-11oracle中commit之后進行數(shù)據(jù)回滾的方法
這篇文章主要介紹了oracle中commit之后如何進行數(shù)據(jù)回滾,本文給大家分享兩種方法,每種方法都給大家介紹的比較詳細,需要的朋友可以參考下2021-12-12Oracle 中 row_number()、rank()、dense_rank() 函數(shù)的
rank() 與 row_number() 的區(qū)別在于,rank() 會按照排序值相同的為一個序號(以下稱為:塊),第二個不同排序值將顯示所有行的遞增值,而不是當前序號加1,下面通過示例介紹下Oracle 中 row_number()、rank()、dense_rank() 函數(shù)的用法,一起看看吧2024-03-03Oracle中的translate函數(shù)和replace函數(shù)的用法詳解
translate返回expr,其中from_string中的每個字符的所有出現(xiàn)都被to_string中的相應字符替換,而replace 函數(shù)將char中的字符串search_string全部轉換為字符串replacement_string。下面給大家分享Oracle中的translate函數(shù)和replace函數(shù)的用法,一起看看吧2017-11-11Oracle批量插入數(shù)據(jù)的三種方式【推薦】
本文給大家?guī)砣Noracle批量插入數(shù)據(jù)的方法,每種方法都是通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2018-06-06