看了三思笔记后的疑问

[复制链接]
查看11 | 回复8 | 2011-1-4 10:37:10 | 显示全部楼层 |阅读模式
三思说:"数据被修改后,并非直接写入数据文件,而是先写入redo log, 然后当CKPT触发时才写入数据文件,而且又提到正常情况下,在没有其他条件触发下,CKPT只有在日志切换时才触发."
我就产生如下3个疑问:
1. 当用户修改某个数据后,立即通过查询可以看到修改后的内容,如三思说的,请问用户看见的数据当时存放在哪里?日志文件?,用户实际看见的是日志文件里面的数据?
2. 日志文件切换的条件是哪个?日志写满了切换?
3. 如果人为不介入的话,难道CKPT只有在切换日志的时候写入? 如果日志比较大,而某个时间段内用户修改数据的频率不高的话,ORALCE不是要延后很久才会切换写入数据文件吗?
回复

使用道具 举报

千问 | 2011-1-4 10:37:10 | 显示全部楼层
数据修改而没有commit的话,你能立即看到修改后的内容??
回复

使用道具 举报

千问 | 2011-1-4 10:37:10 | 显示全部楼层
原帖由 duanzhihui 于 2010-12-17 10:30 发表
数据修改而没有commit的话,你能立即看到修改后的内容??

跟commit没有关系,即使commit了,也不保证就已写到入datafile了。
回复

使用道具 举报

千问 | 2011-1-4 10:37:10 | 显示全部楼层
当前session是可以看到的
[ 本帖最后由 songmingliang 于 2010-12-17 10:36 编辑 ]
回复

使用道具 举报

千问 | 2011-1-4 10:37:10 | 显示全部楼层
oracle是异步io的
没有commit的话其他session读的是undo里的前镜像
写redo和日志切换不是一回事
checkpoint的条件也是好多个
建议你看看conception
回复

使用道具 举报

千问 | 2011-1-4 10:37:10 | 显示全部楼层
针对楼主的第一个问题,如果修改的事数据没有写到数据文件的话应该是在data buffer里面的
第二个问题,日志满了会进行切换,手工也可以进行切换
第三个问题,http://www.itpub.net/678789,2.html可以 看下
回复

使用道具 举报

千问 | 2011-1-4 10:37:10 | 显示全部楼层
CKPT:
工作原理:
(1)向DBWR布置写数据文件
(2)更新控制文件,数据文件头信息,记录检查点
触发条件:
(1)redolog切换
(2)alter system checkpoint;
(3)将tbs->offline,read only,backup
(4)初始化参数

log_checkpoint_interval

log_checkpoint_timeout
回复

使用道具 举报

千问 | 2011-1-4 10:37:10 | 显示全部楼层
ckpt是不向文件写数据的,本来和dbwr是一个东西后来为了减轻dbwr的负担才拿单独出来的
回复

使用道具 举报

千问 | 2011-1-4 10:37:10 | 显示全部楼层
6楼说的很好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行