达梦数据库为了保证数据故障恢复的一致性,REDO 日志的刷盘必须在数据页刷盘之前进行。
下面我们通过测试来验证是不是这样
执行我们事先准备的SHELL脚本
可以看到第一次strings文件没有输出,说明刚写的数据在数据库的BUFFER缓冲区内,还没有刷到硬盘。执行完checkpoint(100)后再strings文件,看到了数据。
下面是测试脚本
echo "prepare data"
disql SYSDBA/SYSDBA:5237 <<eof
create tablespace ts1 datafile '/home/dmdba/test1/ts1.dbf' size 100;
create table t_1(a varchar(10)) tablespace ts1;
insert into t_1 select rownum from dual connect by level<=1000000;
commit;
eof
echo
echo 'strings /home/dmdba/test1/ts1.dbf | grep 1000000'
strings /home/dmdba/test1/ts1.dbf | grep 1000000
echo
echo 'checkpoint(100)'
disql SYSDBA/SYSDBA:5237 <<eof
checkpoint(100);
eof
echo
echo 'strings /home/dmdba/test1/ts1.dbf | grep 1000000'
strings /home/dmdba/test1/ts1.dbf | grep 1000000