天天看点

Oracle redo 和 undo 详解1 概述2 区别

文章目录

  • 1 概述
  • 2 区别
    • 2.1 redo 重做
    • 2.2 undo 撤销

1 概述

1. 'redo':重做
   (1) 重新执行之前的操作('防止数据丢失')
   (2) 通俗理解:'没搞成,重搞一遍'

2. 'undo':撤销
   (1) 取消之前的操作('防止数据不一致')
   (2) 通俗理解:'搞了后悔,之前不算'
           

2 区别

redo undo
Record of How to reproduce a change How to undo a change
Used of Rolling forward database changes Rollback, read consistency, flashback
Stored in Redo log files Undo segments
Protects against Data loss Inconsistent reads in multiuser systems
Oracle redo 和 undo 详解1 概述2 区别
Oracle redo 和 undo 详解1 概述2 区别

2.1 redo 重做

1. 'redo' 重做日志文件
   (1) 在线重做日志 'online logs'
   (2) 归档重做日志 'archived logs'

2. 用于 '数据恢复'
   (1) 数据修改,commit 后(如:DML、DDL),不会立即写入 '数据文件'
   (2) 假设出现断电或磁盘异常的情况下,可通过 '重做日志文件' 进行恢复,重写

3. 相关操作
   select * from v$logfile;  -- 日志文件
   select * from v$log;      -- 日志明细
   
   alter system switch logfile;  -- 日志切换,触发 后台进程:lgwr
           

2.2 undo 撤销

1. 'undo' 撤销
   (1) 没有进行 commit 操作

2. 用户 '撤销操作'
   (1) rollback
   (2) 通俗理解:ctrl + z
   
3. 相关操作
   select * from v$undostat;  -- undo 数据块信息
   
   SQL> show parameter undo
    
   NAME                 TYPE        VALUE
   ------------------------------------ ----------- 
   undo_management      string      AUTO     (管理模式,手动 | 自动)
   undo_retention       integer     900      (undo 上的数据不能被覆盖时间:秒)
   undo_tablespace      string      UNDOTBS1 (正在被使用的 undo 表空间)