执行Commit时Oracle做哪些工作
2024-08-27 01:03:54
COMMIT是一个非常快的操作,当我们发布commit命令时,真正困难的动作已经完成,在数据库中已经执行了数据更改,所以已经完成了99%的任务,例如:下列操作已经产生:
1.在SGA(Buffer Cache)中已经生成了undo块;
2.在SGA(Buffer Cache)中已经生成了产生改变的数据块和索引块;
3.在REDO LOG BUFFER生成了前面两项的redo信息;
4.依赖于前三项产生的数据量大小以及操作需要的时间,buffer中的数据可能已经有一部分输出到了磁盘;
5.所有需要的锁已经获得;
当执行COMMIT命令时,只执行如下操作:
1.为事务生成SCN:SCN是Oracle数据库的一种计时信息,用以保证事务的顺序性,同时还用于失败恢复和保证数据库的读一致性和检查点,无论何时何人提交,SCN自动加1;
2.将事务相关的未写入redo log file中的redo信息从redo log buffer写入到redo log file,这才是真实的COMMIT,这步操作完成,说明我们已经完成COMMIT,事务从V$TRANSACTION中移除;
3.V$LOCK中记录的SESSION关于该事务的锁会释放,其他需要这些锁的事务被唤醒;
4.执行块清理,清理块头保存的事务信息;
最新文章
- [LeetCode] Copy List with Random Pointer 拷贝带有随机指针的链表
- 【转】java.lang.OutOfMemoryError: Java heap space的解决
- csu oj 1811: Tree Intersection (启发式合并)
- git日志的查看与修改
- baidu面试题
- Qt模型/视图、委托
- Centos7 最小系统安装Redis
- 哈密顿绕行世界问题(dfs+记录路径)
- 应用canvas绘制动态时钟--每秒自动动态更新时间
- C#实现导出Excel
- vritualenv虚拟环境迁移
- idea integrate project
- 19南昌网络赛L
- ASP.Net Core ";The type initializer for 'Gdip' threw an exception";
- 80端口被占用 导致apach无法启动问题
- 原生ajax函数封装
- beginner’s mistake
- kafka 主要内容介绍
- 让QtCreator在调试时显示字符串 Qt调试助手 QtDebuggingHelper qtc-debugging-helper
- ZH奶酪:最简单的Django安装方法(Windows 7)