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