又一次故障导致redo损坏

### 数据库故障恢复中 Redo Log 和 Undo Log 的作用 在数据库发生故障后的恢复过程中,Redo Log 和 Undo Log 发挥着重要作用。 #### Redo Log 的作用 当数据库遇到突发情况而崩溃时,为了确保已经完成的事务不会因为系统的突然停止而丢失,需要利用 Redo Log 进行前滚操作。这意味着对于那些已经被标记为已提交但尚未持久化到磁盘上的更改,会依据 Redo Log 中的信息重新执行这些变更动作,从而保证数据的一致性和完整性[^1]。 ```sql -- 假设有一个简单的SQL语句更新了一条记录 UPDATE table_name SET column='value' WHERE condition; ``` 此命令被执行后,即使之后发生了系统崩溃,在重启并读取 Redo Logs 后仍能继续应用这条指令的效果。 #### Undo Log 的作用 另一方面,Undo Log 主要负责处理未提交的事务以及提供多版本并发控制(MVCC)所需的历史视图。如果某个事务未能正常结束,则需借助 Undo Log 来撤销其对数据库所做的任何改变;这一步骤被称为回滚(Rollback)。此外,Undo Log 对于长时间运行查询期间保持旧版本的数据可见也至关重要。 ```sql BEGIN TRANSACTION; DELETE FROM table_name WHERE id=1; -- 此处假设删除了一个不存在冲突的关键字id对应的行 ROLLBACK; -- 如果决定不保留此次改动, 则可通过 ROLLBACK 使用 Undo Log 将状态还原至初始时刻. ``` 以上代码片段展示了一个典型场景下如何运用 `BEGIN TRANSACTION` 开始一个新的事务,并通过 `ROLLBACK` 指令触发基于 Undo Log 的回滚过程。 ### 故障恢复流程中的具体使用方法 - **启动阶段**:一旦检测到上次关闭是非正常的(例如由于断电等原因),则自动进入恢复模式。 - **分析期**:扫描所有的 Redo Log 记录以识别哪些页面可能受到了影响,并确定每个受影响页最新的 LSN (Log Sequence Number),以便后续定位具体的日志位置。 - **重做(Recovery)**:按照顺序遍历所有必要的 Redo 日志项,针对每一个被修改过的缓冲池页面实施相应的更新操作直至达到最新有效的LSN为止。 - **撤消(Undo)**:接着检查是否存在处于活动状态却未曾正式提交成功的事务列表,若有之,则依次调用 Undo Log 完成它们各自所涉及部分的逆向修正工作,最终使得整个系统回到一个稳定且一致的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值