redo log处理

如果当前redo log 被误删除,在mount 状态下可以用命名: alter database clear unarchived logfile group 3;清除

今天终于完成了预定任务,rman 异地恢复数据,nocatalog方式。

明天整理操作记录,并重做一次。
### Undo LogRedo Log 和 MVCC 的概念及关系 #### 1. **Undo Log 的定义与作用** Undo Log 是一种逻辑日志,主要用于记录数据被修改前的状态。它的核心目的是支持事务的回滚操作以及实现 MVCC 中的多版本控制[^4]。 - 当删除一条记录时,Undo Log 会记录一条对应的插入记录;当插入一条记录时,则记录一条对应的删除记录;对于更新操作,Undo Log 记录的是反向的操作内容。 - 在事务未提交之前,如果发生异常或者用户主动调用了 `ROLLBACK`,则可以通过 Undo Log 恢复到原始状态。 Undo Log 对于 MVCC 至关重要,因为它是生成历史版本的基础。每当有新的写入或更改发生时,旧版本会被保留下来作为快照供其他只读事务使用[^4]。 #### 2. **Redo Log 的定义与作用** Redo Log 属于物理日志范畴,其主要职责在于保障持久化和崩溃恢复能力[^3]。 - Redo Log 文件具有固定大小,并且采用循环写入模式。这意味着一旦达到文件末尾,MySQL 将返回起始位置重新开始记录新日志。 - 它的作用是在实例意外终止(如断电等情况)之后帮助重做尚未完成写盘的数据变更,从而确保已经成功提交的事务不会因系统故障丢失任何信息。 两阶段提交机制进一步加强了 Redo Log 和 Binlog 协同工作的可靠性[^1]。简单来说,在正式确认 Commit 前先经历 Prepare 阶段并将相关信息记入 Redo Log ,随后才依次处理 Binlog 写入和其他后续步骤直至最终完成整个流程[^1]。 #### 3. **MVCC 的角色定位** MVCC 多版本并发控制主要是通过组合运用 Undo Log 实现高效的读写分离方案[^2]。具体表现为: - 不同时间点发起的不同事务可以根据各自建立之初所形成的 Read View 查看相应的数据副本而非实时变动后的最新结果集[^2]。 - 这样既提高了系统的整体吞吐量又减少了传统锁机制带来的阻塞风险。 综上所述,尽管三者都服务于提升数据库性能这一共同目标却各有侧重——其中 Undo Log 关注过去时刻事物状态保存以便必要时候还原;Redo Log 注重未来可能出现的各种不确定性准备充分预案以维持数据完整性;而 MVCC 则巧妙借助前者构建起了灵活的时间轴视角下的查询体验优化框架。 ```python # 示例代码展示如何模拟简单的日志记录行为 class TransactionLog: def __init__(self): self.redo_logs = [] self.undo_logs = [] def add_redo(self, action): self.redo_logs.append(action) def add_undo(self, reverse_action): self.undo_logs.append(reverse_action) transaction = TransactionLog() transaction.add_redo("Insert record A") transaction.add_undo("Delete record A") print("Redo Logs:", transaction.redo_logs) print("Undo Logs:", transaction.undo_logs) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值