大家好:
    我在书籍看到,DBWR进程在以下情况都会将数据高速缓存的脏数据写到数据文件的:
1、系统发出检查点(alter system checkpoint;)
2、表空间正常脱机(alter tablespace XXX offline normal;)
---
但我用sys用户登录数据库,向 users 表空间的 mytmp表插入数据:
insert into scott.temp values(1);
但没有commit;
之后,执行
alter system checkpoint;

alter tablespace users offline normal;
alter tablespace users offline online;
后,再 select * from scott.temp; 发现没有添加刚才的数据。
请问这是怎么回事?是不是书上说得有问题?为什么执行检查点和表空间脱机都没有将数据写到数据文件呢?
----
待复,谢谢!

解决方案 »

  1.   

    我从检查点角度回复你:
    1)alter system checkpoint
    2)ALTER TABLESPACE OFFLINE normal 模式,对其下所有的datafile都作了checkpoint
      你这里的两个操作其本质是一样的。都是检查点,而且是增量检查点。增量检查点的作用是为了均衡负载,由fast_start_mttr_target这个参数触发,增量渐进写出。可能你系统workload不大,CKPT没有去通知DBWn写
      

  2.   

    你insert了,但commit,虽然检查点会将数据写入到数据文件,但是写到数据文件的undo段的,所以其它用户是看不了的。
    不知说得是否对呢?