时间:2021-07-01 10:21:17 帮助过:26人阅读
Record of | How to undo a change | How to reproduce a change |
Used for | Rollback, Read-Consistency | Rolling forward DB Changes |
Stored in | Undo segments | Redo log files |
Protect Against | Inconsistent reads in multiuser systems | Data loss |
SQL> show parameter undo_tablespace NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_tablespace string UNDOTBS1
SQL> create undo tablespace undotbs2 datafile ‘/u01/app/oracle/undotbs2.dbf‘ 2 size 100m; Tablespace created.
SQL> create tablespace test_undo datafile ‘/u01/app/oracle/test_undo.dbf‘ 2 size 128k; Tablespace created.
SQL> create table test_undo_tab(txt char(1000)) tablespace test_undo; Table created. SQL> insert into test_undo_tab values (‘teststring1‘); 1 row created. SQL> insert into test_undo_tab values (‘teststring2‘); 1 row created. SQL> commit;
SQL> alter system checkpoint; System altered.
SQL> alter system set undo_tablespace=undotbs2; System altered. SQL> show parameter undo_tablespace; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_tablespace string UNDOTBS2
SQL> alter system switch logfile; System altered.
SQL> col member for a30 SQL> select member, l.status from v$log l, v$logfile f 2 where l.group# = f.group# 3 and l.status = ‘CURRENT‘; MEMBER STATUS ------------------------------ ---------------- /u01/app/oracle/oradata/orcl/r CURRENT edo02.log
SQL> update test_undo_tab set txt = ‘teststring_uncommitted‘ 2 where txt = ‘teststring1‘; 1 row updated.
SQL> update test_undo_tab set txt = ‘teststring_committed‘ where txt = ‘teststring2‘; commit;
[oracle@dylan ~]$ strings /u01/app/oracle/oradata/orcl/redo02.log | grep teststring
teststring_uncommitted
teststring1
teststring_committed
teststring2
- 检查当前数据文件应该是不包括更新后的数值(仅仅有更新前数据)由于还未触发检查点
[oracle@dylan ~]$ strings /u01/app/oracle/test_undo.dbf | grep teststring
teststring2 teststring1
SQL> alter system checkpoint;
[oracle@dylan ~$ strings /u01/app/oracle/test_undo.dbf|grep teststring
teststring_committed ,
teststring_uncommitted
[oracle@dylan ~]$ strings /u01/app/oracle/undotbs2.dbf | grep teststring
teststring2
teststring1
SQL>drop tablespace test_undo including contents and datafiles;
alter system set undo_tablespace=undotbs1;
drop tablespace undotbs2 including contents and datafiles;
Let’s see what will happen if undo is stored in redo logs only.
假设仅将undo信息存储于redo logs会怎么样?
A redo log can be reused once changes protected by it have been written to datafiles (and archivelogs if database is in archivelog mode).
It implies that if I make a change and do not commit it
- Change is written to a redo log 假设我改变的数据而没提交。此时改变将记录到redo log
- checkpoint takes place 检查点发生
- uncommitted change is written to datafile 后未提交的数据写入了数据文件
- I decide to rollback the change 这时我打算回滚
- If redo log has not been overwritten 假设redo log没被覆盖
. search entire redo log for the undo and then rollback 那么搜素整个redo log进行回滚操作
else (redo log has been overwritten)
. undo information is not available for rollback. 否则将无法回滚,undo信息已丢失!
One might argue that if somehow a redo log is not allowed to be overwritten until it contains active undo, we might be able to manage with undo stored in redo logs only. This solution is not feasible as
- size of redo logs will grow enormously large very soon as thet contain both undo and redo (a user might decide not to end a transaction for months)
- to rollback a change, enormous amount of data in redo logs (both redo and undo) will have to be searched leading to degraded performance
- there will be contention on redo logs as they are being used for both
. writing redo and undo
. reading to rollback a change
有人或许会争论:那就不同意redo log 覆盖undo 信息直到包括新的undo,这样redo log将变得异常大从而影响系统性能!
Hence, undo information has to be stored separately from redo and is used for rolling back uncommited transactions . The undo stored in undo buffers/undo tablespace is additionally used for
- read consistency 读一致性
- flashback query 闪回查询
- flashback version query 闪回版本号查询
Oracle 中UNDO与REDO的差别具体解释
标签:creat cte san session word actions into bsp prot