UNDO表空間用于存放UNDO數(shù)據(jù),當(dāng)執(zhí)行DML操作(insert、update、delete)的時候,oracle會將這些操作的舊數(shù)據(jù)寫入到UNDO段。 UNDO數(shù)據(jù)也稱為回滾數(shù)據(jù),用于確保數(shù)據(jù)的一致性。作用包括: ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ ☆ 一個undo_segment <<=============>> 多個undo_block ☆ ☆一個undo_segment <<==============>> 多個transaction ☆ ☆一個transaction <<==============>> 一個undo_block ☆ ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ undo管理的參數(shù): 1、UNDO_MANAGEMENT 用于指定undo數(shù)據(jù)的管理方式。如果使用自動管理,必須設(shè)置為AUTO;如果手動管理,必須設(shè)置為MANUAL。 使用自動管理的時候,oracle會使用UNDO表空間管理UNDO數(shù)據(jù);使用手動管理時,oracle會使用回滾段管理UNDO數(shù)據(jù)。 2、UNDO_TABLESPACE 用于指定例程所要使用的UNDO表空間。設(shè)置的時候,必須保證該表空間存在,否則會導(dǎo)致例程啟動失敗。 使用RAC的時候,因為一個UNDO不能由多個例程同時使用,所以必須為每個例程配置一個獨立的UNDO表空間。 3、UNDO_RETENTION 用于控制UNDO數(shù)據(jù)的最大保留時間,其默認值為900秒。 即:一個transaction所屬的undo_block,在undo_tablespace保留最長的時間是900秒。 (必須保存900秒后才能被覆蓋) SQL>Alter system set undo_retention=n; =================================================================== ★UNDO表空間和普通表空間的管理差不多★ 建立UNDO表空間 1、使用CREATE DATABASE命令建立UNDO表空間 如果使用的是UNDO管理模式,但是沒有指定UNDO TABLESPACE,那么建立數(shù)據(jù)庫的時候oracle會自動生成名稱為SYS_UNDOTBS的UNDO表空間。 SQL>create database db01 . . . undo tablespace undo1 datafile '/u01/oradata/undo1db01.dbf' size 20M autoextend on; 2、使用CREATE UNDO TABLESPACE 命令建立UNDO表空間 建立數(shù)據(jù)庫以后,可以使用該命令建立UNDO表空間。 SQL>create undo tablespace undo1 datafile '/u01/oradata/undo1db01.dbf' size 20M; 修改UNDO表空間 當(dāng)事務(wù)用盡UNDO表空間后,增加數(shù)據(jù)文件 SQL>Alter tablespace undotbs add datafile '/u01/oradata/undotbs.dbf' size 30M autoextend on; 切換UNDO表空間 啟動并打開oracle數(shù)據(jù)庫后,同一時刻只能使用一個UNDO表空間。可以切換UNDO表空間: SQL>ALTER SYSTEM SET undo_tablespace=undotbs02; 刪除UNDO表空間 當(dāng)前使用的UNDO表空間不能被刪除,如果要刪除當(dāng)前實例使用的UNDO,需要先切換,然后刪除: SQL>DROP TABLESPACE undotbs01; =========================================================================== 視圖: v$transaction 當(dāng)前活動的transaction used_ublk 一個transaction用了多少block v$undostat undo 表空間的歷史信息 end_time begin_time undoblks 結(jié)束時間 開始時間 這段時間所需要的undo_block ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 計算undo表空間需要的大小 1.transaction一秒鐘所需要的最多塊數(shù) ①select max(undoblks/((end_time - begin_time)*24*3600)) from v$undostat 2.show parameter undo ②參數(shù)undo_retention 3.show parameter block ③參數(shù)db_block_size undo表空間需要的最小空間=①×②×③ |
|