Oracle回滚段技术咨询:DML数据存储及DDL回滚相关疑问
Oracle回滚段相关问题解答
问题1:执行DML语句后,最新的有效数据是存储在重做日志文件(redo log files)还是回滚段中?
- 都不是。执行DML后,最新的有效数据首先存储在SGA的数据库缓冲区缓存(DB Buffer Cache)的脏数据块中,后续会通过后台进程(DBWR)异步写入数据文件永久保存。
- 重做日志文件(redo log)的作用是记录所有数据修改的操作指令,用于实例恢复或介质恢复,并非存储实际数据。
- 回滚段(Rollback Segment)存储的是数据修改前的旧版本,用于事务回滚、提供读一致性查询,和最新数据无关。
问题2:DDL语句中是否会使用回滚语句(rollback statement)?
- Oracle中DDL语句执行前后都会触发隐式提交:执行DDL前会自动提交当前所有未提交的事务,DDL执行完成后也会自动提交自身的操作。
- 手动执行
ROLLBACK无法撤销已经完成的DDL操作,因为DDL已经自动提交。 - 若DDL执行过程中发生错误,Oracle会自动回滚该DDL产生的变更,但这是数据库内部的自动行为,不需要用户手动执行
ROLLBACK。
内容的提问来源于stack exchange,提问作者Eyac
相关产品推荐
相关产品推荐

