undo回滾段 OCP試驗 1 1更新

2021-09-08 14:55:09 字數 3526 閱讀 7010

undo回滾段原理圖

1,看undo的parameter

undo_management 是auto(還有manual),自動模式下需要撤銷表空間undo_tablespace(undotbs1),manual下不是這樣,manual手工下需要手工建立回滾rollback。

刪除表emp

scott@sen>delete emp;

已刪除14行。

沒有commit的時候可以直接rollback(dml語句需要顯示提交,但是這時候select會沒有資料)

如果commit了,使用回滾段處理

之後插入(通過表建立表create table emp2 as select * from emp;)

試驗部分:

1,sys@sen>alter system set undo_management=manual scope=spfile;

系統已更改。

sys@sen>shutdown immediate

資料庫已經關閉。

已經解除安裝資料庫。

oracle 例程已經關閉。

sys@sen>startup

oracle 例程已經啟動。

total system global area 778387456 bytes

fixed size 1374808 bytes

variable size 545260968 bytes

database buffers 226492416 bytes

redo buffers 5259264 bytes

資料庫裝載完畢。

資料庫已經開啟。

sys@sen>

注意這裡manual下的undo_tablespace 為undotbs1

2,建立撤銷表空間

檢視表空間

sys@sen>create undo tablespace undotbs2 datafile 'd:\sendb\undotbs2.dbf' size 200m;
上課的時候各種錯誤:

a:undo tablespace寫成了undo_tablespace

b:忘記寫datafile關鍵字

c:寫成了d:\,不僅沒有外面加單引號,並且後面沒有指定undotbs2.dbf

d:沒有指定size

這裡,undo tablespace的名字undotbs2和後面的 

'd:\sendb\undotbs2.dbf'可以一樣,也可以不一樣,但是建立了undotbs2之後就不可以再次增加乙個不一樣的名字了(乙個undo tablespace只能有乙個dbf?)

sys@sen>drop tablespace undotbs5;這個語句可以乾掉新建的(沒有omf的情況下,磁碟不能直接刪除,手動刪除)

3,更新操作(奇怪,為什麼更新並且commit成功,手動模式下不是必須需要回滾段rollback嗎,我之前沒有建立)

scott@sen>update emp set sal=2000 where lower(ename)='smith';
1.1更新,在我住處的筆記本,例項為jsce的測試,報錯了,終於來了

思考:在undo management為manual狀態下,系統回退段還是有的,非系統的需要手工建立rollback

4,更改預設撤銷表空間

sys@sen>alter system set undo_tablespace=undotbs2  scope=spfile;
之後關閉和重啟database(並無須重新啟動資料庫?問)

5, 檢視undotbs1是否有掛起的事務 

select rn.name,rs.status from v$rollname rn,v$rollstat rs where

rn.name in (select segment_name from dba_segments where tablespace_name='undotbs1')

and rn.usn=rs.usn

提示沒有資料

1.1更新,不論oracle是否重啟,執行上面的命令都沒有掛起的任務,查詢都是未選定行。

還原undo management=auto,之後alter undo tablespace=undotbs2,在沒有重啟oracle下查詢有資料

重啟之後

where tablespace_name='undotbs2' 也有十條記錄
6,drop 空間

7,建立回滾段 

sys@sen>create rollback segment rbs1;

回退段已建立。

奇怪,改為manual並且建立了rollback,重啟了,為什麼不讓update

Undo 回滾段 對應的系統引數

回滾段表空間,為什麼叫undo,而不是rollback?我們對資料庫操作理解為do,所以反向操作就是undo,通過對應的undo就可以達到回滾目的。第一行,undo management 為auto表示自動回滾段管理,空間不夠時自動擴充套件。第二行,undo retention 為900表示dml需...

關於Oracle資料庫中的undo回滾段

oracle資料庫當中,關於日誌與回滾那一部分,與別的資料庫確實有很大的不同。為了避免在寫日誌的同時後台程序對日誌檔案的讀操作,oracle使用了單獨的回滾段來記錄 舊 的資料。這樣可以達到並行讀寫的目的,整體i o效率提高了不少,但也引入了一些問題。最經典的莫過於ora 01555 snapsho...

ORACLE 建立回滾段

create rollback segment rs01 tablespace ts name storage initial 8m next 8m maxextents unlimited 回滾段管理一直是oracle資料庫管理的乙個難題,本文通過例項介紹oracle回滾段的概念,用法和規劃及問題...