- 论坛徽章:
- 0
|
书上以及网上查看了oracle的redo跟undo,但是对redo还是有些不清楚。不是说redo是用于恢复数据的么?看看字面意思也是,就是向前滚。
但是官方对于redo有如下说法,
1. 机器停电,那么在重起之后需要online redo logs去恢复系统到失败点。
2. 比如,truncate一个表或其他的操作,想恢复到之前的状态,同样也需要。
但是一直思考来思考去,这两条总有点像undo该做的.
后来又想想难道对于第一条,在系统停机重启后,数据库会先redo,把停机前未做完的先做?然后再对于未提交的事务进行undo,即回滚到停机前的正常事务点?
比如在做一条insert的时候,突然系统断电了,然后来电重启后,insert会redo,再undo回insert之前的那个事务点?
然后对于第2条,比如truncate一个表后像数据恢复到truncate之前,如果在undo数据块里的数据信息还未过期前,我感觉只要由undo来处理一下就ok了,redo用不到啊;但是如果undo里的数据已经过期了,无法undo了,那就需要redo来读取SCN来恢复到truncate之前的状态?
说到SCN,读取SCN来恢复数据是数据库基于redo log file来做的吗?SCN是记录在redo log file里面的吗? |
|