學習筆記 Oracle回滾 撤銷

2021-10-25 09:58:42 字數 4101 閱讀 7452

撤銷資料是反轉dml語句結果所需的資訊。撤銷資料通常被稱為「回滾資料」,在過去的oracle版本中,「回滾資料」和「撤銷資料」可以交替使用,但從9i版本開始,這兩個術語有所不同:功能相同,但管理方式不同。只要某個事務修改了資料,那麼更新前的原有資料就會被寫入乙個回滾段或撤銷段。回滾段在11g版本中依然存在,但從9i版本開始,oracle資料庫引入了可供選擇的撤銷段。oracle強烈建議所有資料庫都應當使用撤銷段,回滾段只被保留用於向後相容

oracle資料庫中,也設定了乙個專門的儲存空間,用來儲存操作過程及被操作的資料,即撤銷記錄,以便提供撤銷功能,即允許使用者撤銷對資料庫所執行的最後操作。

撤銷表空間中建立撤銷段,自動儲存當前對資料庫的操作,以便實現自動撤銷管理,撤銷該操作。

撤銷表空間,也叫還原空間,undo tablespace

當使用者回退乙個事務時,oracle使用撤銷段中的撤銷資料來撤銷自從這個事務開始以來所發生的全部更改,並釋放這個事務所涉及的錶行上的任何鎖,然後結束這個事務

有了讀一致性,就能保證修改前的資料和修改後的資料不會混雜在一起。讀一致性是由oracle自動提供的,並由撤銷段中的撤銷記錄來實現

延遲的撤銷段:用於表空間立即、臨時離線時,或恢復時

undo_management=auto使用自動管理方式

必須在資料庫中建立乙個撤銷表空間,以便oracle在其中分配撤銷段來儲存撤銷資料。

在建立資料庫的同時建立乙個預設的撤銷表空間

在資料庫建立之後建立乙個撤銷表空間

如果沒有指定乙個撤銷表空間,則在例程啟動時,oracle會自動搜尋是否存在乙個可用的(或聯機的)撤銷表空間,並自動選擇第乙個可用的撤銷表空間來儲存撤銷資料。

如果沒有找到乙個可用的撤銷表空間,oracle就使用system表空間的system回退段來儲存撤銷資料,並會在預警檔案中記錄如下警告資訊:

warning – executing transaction without active undo tablespace

通過在create database命令中增加乙個子句,可以為資料庫建立undo表空間

create

database db01..

.undo tablespace undo1 datafile 'undo1db01.dbf'

size 20m autoextend on

或者通過使用create undo tablespace命令,在之後建立

create undo tablespace undo1

datafile 'undo1db01.dbf' size 20m;

alter tablespace命令能改變undo表空間

例:把另乙個資料檔案加入到undo表空間中:

alter

tablespace undotbs

add datafile 'undotbs2.dbf' size 30m

autoextend on

;

可以在不同的undo表空間之間進行切換 注:

建立乙個新的撤銷表空間

create database db01 . . . undo tablespace undo1 datafile 'undo1db01.dbf' size 20m autoextend on

或者create undo tablespace undo1 datafile 'undo1db01.dbf' size 20m;

更改使用該新的撤銷表空間:

alter system set undo_tablespace=undotbs_new

刪除舊的撤銷表空間:

drop tablespace undotbs_old

drop tablespace命令刪除乙個undo表空間

drop

tablespace undotbs2;

乙個undo表空間只能在當前例項沒有用它時才被刪除。為了刪除乙個活躍的undo表空間:

undo_suppress_errors:設定為真,這個引數在auto模式中確定是否報錯

undo_retention:單位是秒。控制回滾資料的數量,保持讀一致性的時間(在回滾段中保持一段時間,保持讀一致性)

alter system set undo_retention=

600 scope=memory;

#如果將undo_retention設定成較大的值,就應該保證撤銷表空間具有足夠的空間,否則undo_retention引數的值就會失去意義。

und

osiz

e=ur

×ups

×bs×

(1+o

verh

ead)

undosize = ur × ups × bs ×( 1 + overhead)

undosi

ze=u

r×up

s×bs

×(1+

over

head

) 引數意義

undosize所需的撤銷表空間的大小。

ur表示undo_retention引數的值(以秒為單位)。

ups表示每秒鐘產生的撤銷資料的oracle塊數。

bs表示由db_block_size引數決定的oracle塊的大小。

overhead表示在撤銷表空間中保留系統資訊所需要的額外開銷(一般為ur × ups × bs 的5%~10%)。

select end_time,begin_time,undoblks

from v$undostat;

------------------------------v$undostat中的常用列--------------------------------

引數名意義

endtime

以10分鐘為間隔的結束時間

undoblocksused

使用的undo塊總數

txnconcurrency

事務併發執行的最大數

txntotal

在時間段內事務執行總數

querylength

查詢長度的最大值

extentsstolen

在時間段內undo區必須從乙個undo段轉到另乙個的次數

sstooolderror

在時間段內』snapshot too old』錯誤發生的次數

undotsn

這段時間內最後活動的undo表空間id

#資料字典檢視

dba_rollback_segs

#動態效能檢視

v$rollname

v$rollstat

v$undostat

v$session

v$transaction

用法:select

*from v$rollname;

oracle的回滾和撤銷機制

為了保證資料庫中多個使用者間的讀一致性和能夠回退事務。一 在乙個簡單的更新語句中,對於回滾段的操作存在多處,在事務開始時,首 先需要在回滾表空間獲得乙個事務槽,分配空間,然後建立前映象,此後事務的 修改才能進行,oracle必須以此來保證事務是可以回滾的。如果使用者提交了事務 oracle會在日誌檔...

git撤銷與回滾

1 檔案修改了,沒有進行add操作 git checkout filename git checkout 2 對不想提交的檔案進行了git add操作 git status git reset head 3 修改的檔案已被git commit,但想再次修改不再產生新的commit git commi...

oracle資料回滾

當我們修改了表的資料並且提交了事務後,想回滾資料怎麼辦?先根據sql執行歷史確定資料回滾時間點 select sql text,last load time from v sql where sql text like update order by last load time desc 再將資料...