oracle的redo和undo,OracleUndoRedo通俗理解
OracleUndoRedo通俗理解以下文字資料是由(歷史新知網www.lishixinzhi.com)小編為大家搜集整理后發布的內容,讓我們趕快一起來看一下吧!
什么是REDO
REDO記錄transaction logs 分為online和archived 以恢復為目的
比如 機器停電 那么在重起之后需要online redo logs去恢復系統到失敗點
比如 磁盤壞了 需要用archived redo logs和online redo logs區恢復數據
比如 truncate一個表或其他的操作 想恢復到之前的狀態 同樣也需要
什么是UNDO
REDO 是為了重新實現你的操作 而UNDO相反 是為了撤銷你做的操作 比如你得一個TRANSACTION執行失敗了或你自己后悔了 則需要用 ROLLBACK命令回退到操作之前 回滾是在邏輯層面實現而不是物理層面 因為在一個多用戶系統中 數據結構 blocks等都在時時變化 比如我們 INSERT一個數據 表的空間不夠 擴展了一個新的EXTENT 我們的數據保存在這新的EXTENT里 其它用戶隨后也在這EXTENT里插入了數據 而此時我想ROLLBACK 那么顯然物理上講這EXTENT撤銷是不可能的 因為這么做會影響其他用戶的操作 所以 ROLLBACK是邏輯上回滾 比如對INSERT來說 那么ROLLBACK就是DELETE了
MIT 以前 常想當然地認為 一個大的TRANSACTION(比如大批量地INSERT數據)的MIT會花費時間比短的TRANSACTION長 而事實上是沒有什么區別的
因為ORACLE在MIT之前已經把該寫的東西寫到DISK中了
我們MIT只是
產生一個SCN給我們TRANSACTION SCN簡單理解就是給TRANSACTION排隊 以便恢復和保持一致性
REDO寫REDO到DISK中(LGWR 這就是log file sync) 記錄SCN在ONLINE REDO LOG 當這一步發生時 我們可以說事實上已經提交了 這個TRANSACTION已經結束(在V$TRANSACTION里消失了)
SESSION所擁有的LOCK(V$LOCK)被釋放
Block Cleanout(這個問題是產生ORA : snapshot too old的根本原因) ROLLBACK ROLLBACK和MIT正好相反 ROLLBACK的時間和TRANSACTION的大小有直接關系 因為ROLLBACK必須物理上恢復數據 MIT之所以快 是因為ORACLE在MIT之前已經作了很多工作(產生UNDO 修改BLOCK REDO LATCH分配) ROLLBACK慢也是基于相同的原因
UNDO表空間用于存放UNDO數據 當執行DML操作時 Oracle
UNDO數據的作用 當用戶執行DML操作修改數據時 UNDO數據被存放在UNDO段 而新數據則被存放到數據段中 如果事務操作存在問題 就需要回退事務 以取消事物變化
例如 執行完UPDATE emp SET sal= WHERE empno= 后 發現應該修改雇員 的工資 而不是 此時應該執行ROLLBACK語句
讀一致性
用戶檢索數據時 ORACLE總是使用戶只能看到被提交過的數據 這是由Oracle自動提供的 當用戶修改數據 但是沒有提交時 另外一個用戶使用select語句查找該值時 該值就是從undo表空間中取得的
事務恢復
事務恢復是例程恢復的一部分 它是由Oracle Server自動完成的 如果在數據庫運行過程中出線歷程失敗 那么當啟動Oracle Server時 后臺進程SMON會自動執行例程恢復 執行例程恢復時 Oracle會重做所有未應用的記錄 然后打開數據庫 回退未提交事務
倒敘查詢
倒敘查詢用于取得某一特定時間點的數據庫數據
UNDO_MANAGEMENT
使用初始化參數用于指定UNDO數據的管理方式 如果使用自動管理模式 必須設置該參數為AUTO 此時采用UNDO表空間管理UNDO數據 如果使用手工管理模式 必須設置該值為MANUAl 此時采用回滾段管理UNDO數據
UNDO_TABLESPACE
用于指定例程所要使用的UNDO表空間 使用自動UNDO管理模式時 通過配置該參數可以指定例程所要使用的UNDO表空間
使用RAC結構時 必須為每個例程配置一個獨立的UNDO表空間
UNDO_RETENTION
該參數用于控制UNDO數據的最大保留時間 其默認值為 秒 該值時倒敘查詢可以查看到的最早時間點 lishixinzhi/Article/program/Oracle/201311/17025
分頁:123
總結
以上是生活随笔為你收集整理的oracle的redo和undo,OracleUndoRedo通俗理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何修改可执行文件的图标
- 下一篇: oracle恢复某个表的数据库,如何从r