1. 程式人生 > >回滾段和撤銷表空間(轉載)

回滾段和撤銷表空間(轉載)

轉載出處: http://www.cnblogs.com/krisy/archive/2010/01/19/1651982.html

撤銷管理模式:

使用者通過設定撤銷管理模式(undo mode)就可以靈活地選擇使用手動撤銷管理(manual undo management)或自動撤銷管理(automatic undo management)。資料庫系統既可以執行在手動撤銷管理模式下,也可以運行於自動撤銷管理模式下。在手動撤銷管理模式下,撤銷空間通過回滾段(rollback segment)管理。在自動撤銷管理模式下,撤銷空間通過撤銷表空間(undo tablespace)管理。如需使用自動撤銷管理模式,資料庫管理員只需為每個例項(instance)建立一個撤銷表空間,並將初始化引數 

UNDO_MANAGEMENT 設為 AUTO 即可。Oracle建議使用者使用自動撤銷管理模式。

 

管理撤銷表空間
如果下兩種特殊情況需要人工干預自動撤銷管理方式。他們需要確定撤銷表空間的大小和撤銷資料的保留時間。
1.沒有足夠的撤銷空間來處理所有的活動事務。
2.沒有足夠的撤銷空間來滿足讀一致性需要的撤銷資料。
這些干預的結果都需要對撤銷表空間進行管理。

(一)建立撤銷表空間
可以在建立資料庫的時候建立撤銷表空間。也可以在建立資料庫之後再建立撤銷表空間。
建立撤銷表空間的命令列語法與建立其他表空間的語句基本相同,但必須指定UNDO關鍵字,只能使用本地管理方式EXTENT MANAGEMENT LOCAL

而不能使用資料字典管理方式,區管理方式只能是使用AUTOALLOCATE而不能使用UNIFORM,不能指定任何段空間管理方式,所以其語法是:
CREATE UNDO TABLESPACE DATAFILE datafile_clause [,datafile_clause]
[EXTENT MANAGEMENT LOCAL]
[AUTOALLOCATE]
其中datafile_clause子句的語法是:
'path_filename_suffix' SIZE integer [K|M]
[REUSE]
[AUTOEXTEND OFF|ON]
[NEXT integer [K|M]]
[MAXSIZE UNLIMITED |integer [K|M]]
在datafile_clause子句中指定資料檔案時,不能使用相對路徑,只能使用絕對路徑。並且,如果沒有提供檔名的字尾,則無後綴。
CREATE UNDO TABLESPACE undotbs01 DATAFILE 'e:\undotbs01_1.dbf' SIZE 3M AUTOEXTEND ON NEXT 1M MAXSIZE 15M;
CREATE UNDO TABLESPACE undotbs02 DATAFILE 'e:\undotbs02_1.dbf' SIZE 3M AUTOEXTEND OFF;

雖然DBA最初可以允許資料檔案自動擴充套件,但一旦DBA認為撤銷表空間的大小已經合適時,就應該關閉自動擴充套件特性或限制其最大大小,以防止

某個使用者忘記了儘可能頻繁提交事務而意外的用完該資料檔案所在的磁碟空間。

(二)修改撤銷表空間
與其他表空間一樣,可以通過ALTER TABLESPACE語句,ALTER DATABASE語句來修改撤銷表空間。但因為撤銷表空間的大部分設定都由ORACLE本

身進行管理,所以只能對撤銷表空間進行如下的修改操作:
1.新增新的資料檔案以便增加更多的儲存空間。
2.移動(修改位置與名稱)資料檔案。
3.將資料檔案設定成聯機或離線狀態。

給UNDOTBS02撤銷表空間新增一個新的資料檔案。
ALTER TABLESPACE undotbs02 ADD DATAFILE 'e:\undotbs02_2.dbf' SIZE 1M AUTOEXTEND OFF;
給UNDOTBS02撤銷表空間中e:\undotbs02_2.dbf資料檔案的大小。
ALTER DATABASE DATAFILE 'e:\undotbs02_2.dbf' RESIZE 2M;
刪除UNDOTBS02表空間中的e:\undotbs02_2.dbf資料檔案。
ALTER DATABASE DATAFILE 'e:\undotbs02_2.dbf' OFFLINE OFF;
這條語句只是將該資料檔案的狀態改變成了RECOVER了,而並沒有從資料庫、更沒有從磁碟中刪除該資料檔案。要使該資料檔案可以被重新使

用,需要進行介質恢復,並將該資料檔案的狀態改變為ONLINE就可以了。
RECOVER DATAFILE 'e:\undotbs02_2.dbf';
ALTER DATABASE DATAFILE 'e:\undotbs02_2.dbf' ONLINE;

可以使表空間離線,但不能使當前正在使用的表空間離線。

(三)更改撤銷表空間
啟動例程並開啟資料庫後,在同一時刻一個例程只能使用一個撤銷表空間。如果在資料庫中建立了多個撤銷表空間,那麼在資料庫的執行過程

中,可以更改到另一個撤銷表空間,即更改UNDO_TABLESPACE引數,並同時停止當前使用的撤銷表空間。由於該引數是一個動態引數,所以可

以在資料庫執行過程中,通過ALTER SYSTEM SET語句進行更改,並無須重新啟動資料庫。
不能使當前正在使用的撤銷表空間離線;
如果指定的表空間不存在,或不是一個撤銷型別的表空間,則更改時會有錯誤提示。
在成功更改表空間之後,任何新開始的事務都將在新的撤銷表空間中保留撤銷資料。但是在舊的撤銷表空間中可能還會保留著當前未提交的事

務的撤銷資料。這時,舊的撤銷表空間並不會立即進入離線狀態,而是進入“懸掛離線狀態”。在這種情況下,當前未提交的事務繼續使用舊

的撤銷表空間,知道提交後,舊的撤銷表空間才進入離線狀態。
需要注意,在RAC(REAL APPLICATION CLUSTER)結構中,不同例程必須使用各自的、獨立的撤銷表空間,而不能使用同一個撤銷表空間。
更改撤銷表空間,不會清空V$UNDOSTAT檢視中的內容,仍然會繼續向其中每隔10分鐘就增加一條記錄。只有在關閉資料庫時才會清空

V$UNDOSTAT檢視中的內容。

(四)刪除撤銷表空間。
可以使用DROP TABLESPACE語句來刪除表空間。
不能刪除當前正在使用的撤銷表空間。
可以刪除沒有使用的撤銷表空間,並且尅指定INCLUDING CONTENTS AND DATAFILES子句,以便在刪除撤銷表空間的時候,將有內容的撤銷表空

間及其對應的作業系統資料檔案也刪除,否則需要在關閉資料庫之後才能刪除這些作業系統資料檔案。

查詢和監控撤消的有關資訊

檢視

作用

V$undostat

包含所有撤消表空間的統計資訊,

可用於監控和調整撤消表空間的。DBA可以利用該檢視來估算撤消表空間的大小,

ORACLE利用其完成對撤消表空間的自動管理

V$rollstat

包含撤消表空間各個撤消段的資訊

V$transcation

包含各個事務所使用的撤消段資訊

Dba_undo_extents

包含撤消表空間的每個區所對應的事務的提交時間




撤銷管理模式:

使用者通過設定撤銷管理模式(undo mode)就可以靈活地選擇使用手動撤銷管理(manual undo management)或自動撤銷管理(automatic undo management)。資料庫系統既可以執行在手動撤銷管理模式下,也可以運行於自動撤銷管理模式下。在手動撤銷管理模式下,撤銷空間通過回滾段(rollback segment)管理。在自動撤銷管理模式下,撤銷空間通過撤銷表空間(undo tablespace)管理。如需使用自動撤銷管理模式,資料庫管理員只需為每個例項(instance)建立一個撤銷表空間,並將初始化引數 UNDO_MANAGEMENT 設為 AUTO 即可。Oracle建議使用者使用自動撤銷管理模式。

 

管理撤銷表空間
如果下兩種特殊情況需要人工干預自動撤銷管理方式。他們需要確定撤銷表空間的大小和撤銷資料的保留時間。
1.沒有足夠的撤銷空間來處理所有的活動事務。
2.沒有足夠的撤銷空間來滿足讀一致性需要的撤銷資料。
這些干預的結果都需要對撤銷表空間進行管理。

(一)建立撤銷表空間
可以在建立資料庫的時候建立撤銷表空間。也可以在建立資料庫之後再建立撤銷表空間。
建立撤銷表空間的命令列語法與建立其他表空間的語句基本相同,但必須指定UNDO關鍵字,只能使用本地管理方式EXTENT MANAGEMENT LOCAL

而不能使用資料字典管理方式,區管理方式只能是使用AUTOALLOCATE而不能使用UNIFORM,不能指定任何段空間管理方式,所以其語法是:
CREATE UNDO TABLESPACE DATAFILE datafile_clause [,datafile_clause]
[EXTENT MANAGEMENT LOCAL]
[AUTOALLOCATE]
其中datafile_clause子句的語法是:
'path_filename_suffix' SIZE integer [K|M]
[REUSE]
[AUTOEXTEND OFF|ON]
[NEXT integer [K|M]]
[MAXSIZE UNLIMITED |integer [K|M]]
在datafile_clause子句中指定資料檔案時,不能使用相對路徑,只能使用絕對路徑。並且,如果沒有提供檔名的字尾,則無後綴。
CREATE UNDO TABLESPACE undotbs01 DATAFILE 'e:\undotbs01_1.dbf' SIZE 3M AUTOEXTEND ON NEXT 1M MAXSIZE 15M;
CREATE UNDO TABLESPACE undotbs02 DATAFILE 'e:\undotbs02_1.dbf' SIZE 3M AUTOEXTEND OFF;

雖然DBA最初可以允許資料檔案自動擴充套件,但一旦DBA認為撤銷表空間的大小已經合適時,就應該關閉自動擴充套件特性或限制其最大大小,以防止

某個使用者忘記了儘可能頻繁提交事務而意外的用完該資料檔案所在的磁碟空間。

(二)修改撤銷表空間
與其他表空間一樣,可以通過ALTER TABLESPACE語句,ALTER DATABASE語句來修改撤銷表空間。但因為撤銷表空間的大部分設定都由ORACLE本

身進行管理,所以只能對撤銷表空間進行如下的修改操作:
1.新增新的資料檔案以便增加更多的儲存空間。
2.移動(修改位置與名稱)資料檔案。
3.將資料檔案設定成聯機或離線狀態。

給UNDOTBS02撤銷表空間新增一個新的資料檔案。
ALTER TABLESPACE undotbs02 ADD DATAFILE 'e:\undotbs02_2.dbf' SIZE 1M AUTOEXTEND OFF;
給UNDOTBS02撤銷表空間中e:\undotbs02_2.dbf資料檔案的大小。
ALTER DATABASE DATAFILE 'e:\undotbs02_2.dbf' RESIZE 2M;
刪除UNDOTBS02表空間中的e:\undotbs02_2.dbf資料檔案。
ALTER DATABASE DATAFILE 'e:\undotbs02_2.dbf' OFFLINE OFF;
這條語句只是將該資料檔案的狀態改變成了RECOVER了,而並沒有從資料庫、更沒有從磁碟中刪除該資料檔案。要使該資料檔案可以被重新使

用,需要進行介質恢復,並將該資料檔案的狀態改變為ONLINE就可以了。
RECOVER DATAFILE 'e:\undotbs02_2.dbf';
ALTER DATABASE DATAFILE 'e:\undotbs02_2.dbf' ONLINE;

可以使表空間離線,但不能使當前正在使用的表空間離線。

(三)更改撤銷表空間
啟動例程並開啟資料庫後,在同一時刻一個例程只能使用一個撤銷表空間。如果在資料庫中建立了多個撤銷表空間,那麼在資料庫的執行過程

中,可以更改到另一個撤銷表空間,即更改UNDO_TABLESPACE引數,並同時停止當前使用的撤銷表空間。由於該引數是一個動態引數,所以可

以在資料庫執行過程中,通過ALTER SYSTEM SET語句進行更改,並無須重新啟動資料庫。
不能使當前正在使用的撤銷表空間離線;
如果指定的表空間不存在,或不是一個撤銷型別的表空間,則更改時會有錯誤提示。
在成功更改表空間之後,任何新開始的事務都將在新的撤銷表空間中保留撤銷資料。但是在舊的撤銷表空間中可能還會保留著當前未提交的事

務的撤銷資料。這時,舊的撤銷表空間並不會立即進入離線狀態,而是進入“懸掛離線狀態”。在這種情況下,當前未提交的事務繼續使用舊

的撤銷表空間,知道提交後,舊的撤銷表空間才進入離線狀態。
需要注意,在RAC(REAL APPLICATION CLUSTER)結構中,不同例程必須使用各自的、獨立的撤銷表空間,而不能使用同一個撤銷表空間。
更改撤銷表空間,不會清空V$UNDOSTAT檢視中的內容,仍然會繼續向其中每隔10分鐘就增加一條記錄。只有在關閉資料庫時才會清空

V$UNDOSTAT檢視中的內容。

(四)刪除撤銷表空間。
可以使用DROP TABLESPACE語句來刪除表空間。
不能刪除當前正在使用的撤銷表空間。
可以刪除沒有使用的撤銷表空間,並且尅指定INCLUDING CONTENTS AND DATAFILES子句,以便在刪除撤銷表空間的時候,將有內容的撤銷表空

間及其對應的作業系統資料檔案也刪除,否則需要在關閉資料庫之後才能刪除這些作業系統資料檔案。

查詢和監控撤消的有關資訊

檢視

作用

V$undostat

包含所有撤消表空間的統計資訊,

可用於監控和調整撤消表空間的。DBA可以利用該檢視來估算撤消表空間的大小,

ORACLE利用其完成對撤消表空間的自動管理

V$rollstat

包含撤消表空間各個撤消段的資訊

V$transcation

包含各個事務所使用的撤消段資訊

Dba_undo_extents
包含撤消表空間的每個區所對應的事務的提交時間