数据库崩溃后对redo log的使用
2015-06-17 10:22
295 查看
用户对数据库做的任何操作均会产生redo log,事实上是先把redo log写到redo log cache中,再把实际数据更改写至buffer cache中。
Redo log会在以下情况从redo log cache写至online redo log file中:
l 每隔3秒钟
l Redo log cache使用了1/3
l 当数据库定写入器通知重做记录需要写入磁盘时。即在数据写入数据文件前。
但若此时数据库发生崩溃,而部分数据未写至data file中,则:
(1)对于未提交事务,执行撤销操作。(是否有可能未commit,但数据已经写入data file。若yes,则有可能buffer cache满了,下次读取数据从data file读取,导致未commit更改生效了。因此不可能yes。但若no,则有部分未提交数据一直占据buffer cache,若满了怎么办?)
(2)对于已提交事务,但数据未写至data file的,根据redo log执行重做。
也就是说一切操作均产生redo log,不管是否commit。
Redo log会在以下情况从redo log cache写至online redo log file中:
l 每隔3秒钟
l Redo log cache使用了1/3
l 当数据库定写入器通知重做记录需要写入磁盘时。即在数据写入数据文件前。
但若此时数据库发生崩溃,而部分数据未写至data file中,则:
(1)对于未提交事务,执行撤销操作。(是否有可能未commit,但数据已经写入data file。若yes,则有可能buffer cache满了,下次读取数据从data file读取,导致未commit更改生效了。因此不可能yes。但若no,则有部分未提交数据一直占据buffer cache,若满了怎么办?)
(2)对于已提交事务,但数据未写至data file的,根据redo log执行重做。
也就是说一切操作均产生redo log,不管是否commit。
相关文章推荐
- Redis,Memcache,mongoDB的区别
- redis 在centos下的安装部署
- 深入浅出Mybatis-sql自动生成
- How To Use TKPROF To Trace And Analyze Sql Explan
- 数据库操作
- Redis备份还原
- MySQL性能优化的最佳20+条经验(1)
- MySQL性能测试工具之mysqlslap
- Redis学习第三课:Redis Hash类型及操作
- 数据库字符集修改
- 如何获取跟系统相关的时间(oracle)
- Redhat6.5 + oracle 11gR2 设置数据库开机自启动
- MySQL查看用户权限
- Mysql Limit操作
- mysql limit查询优化(数据量大的时候很优)
- oracle中获取系统当前时间,启动时间以及运行时间
- Use LOB Storage
- 深入浅出MyBatis-Sqlsession
- (转)完整java开发中JDBC连接数据库代码和步骤
- Solr DIH以Mysql为数据源批量创建索引