- 如果一个数据也被更改了,物理日志将存储该数据页的before-image(即该数据页被更改前的数据)
- 物理日志由磁盘上连续的数据页组成,是由一个或两个物理日志文件构成,这些文件在物理存储上是连续的
- 用于系统失败时的恢复(recovery)
- 记录了事务(transaction)的细节
- 事务的记录(Transaction records)被保存在逻辑日志中
- 逻辑日志由逻辑日志文件组成。每个文件由磁盘上连续的数据页组成
- 用于事务回滚(transaction rollback)和系统失败时的恢复(recovery)
在系统初启时,物理日志和逻辑日志都自动建立在root dbspace
案例:创建一个20GB的物理日志plogdbs
步骤1:创建Dbspace文件
# cd /home/informix/dbspaces
# touch plogdbs
步骤2:设置权限
# chmod 660 plogdbs
步骤3:分配Dbspace空间
# onspaces -c -d plogdbs -p /home/informix/dbspaces/plogdbs -o 0 -s 20000000
步骤4:通过onparams将物理日志迁移到plogdbs上:
# onparams -p -s 1999900 -d plogdbs -y
步骤5:观察日志信息
# onstat -l
结果:
Physical Loggin的phybegin为2:53,表示物理日志的存储是从Chunk编号为2的第53的page中。
flags字段说明:
A:Added,新增加的逻辑日志文件,仅当建立一个(根dbspace的)0级archive后才能使用
F:Free,该逻辑日志文件空闲并可以使用。
U:Used,该逻辑日志文件正在使用而未释放,OnLine恢复时还需要该文件(回滚一个事务或找到上一个检查点记录)
B:Backed-UP,该逻辑日志文件已备份。
C:Current,该逻辑日志文件是当前正在填充的逻辑日志文件。
L:Last,该逻辑日志文件包含有最近一次检查点记录,在新的检查点记录写入另一个日志文件之前,该文件及后面的逻辑日志文件不能释放。
所有状态标志的可能组合
A------:上次0级archive以来新增加的逻辑日志文件,暂时不能使用
F------:空闲
U------:正在使用,还没有备份
U-B----:日志已备份,恢复时还需要
U-B---L:日志已备份,包含上次检查点记录,恢复时还需要此文件
U---C--:当前日志文件
U---C-L:当前日志文件,并包含上次检查点记录
SinoDB有以下4种日志模式:
无日志模式:数据库所有DML操作都不会被记录到日志中,并且影响的行也不会被写入日志,只记录操作本身以及返回的代码。
优点:极大的减少了磁盘的I/O,拥有很高的吞吐率
缺点:数据库不支持事务控制,如果数据库出现问题,则无法恢复
# ondblog nolog stores_demo
# ontap -N stores_demo
无缓冲日志模式:数据库所有操作在发生时,被写入缓冲区中,当事务被提交时,立刻写到磁盘。优点:当系统发生问题时,可以保证数据丢失最少,数据完整性和一致性可以在事务级得到保证
缺点:增加了磁盘的I/O,影响数据库的性能
# ondblog unbuf stores_demo
# ontap -U stores_demo
缓冲日志模式:数据库所有操作在发生时,被写入缓冲区中,当缓冲区被写满之后或者发生检查点操作,才会写到磁盘。
优点:大大减少磁盘的I/O,提高数据库的性能
缺点:当系统发生问题需要进行恢复时,缓冲区的数据将丢失,无法恢复
# ondblog buf stores_demo
# ontap -B stores_demo
ANSI模式:与无缓冲日志模式基本相同,需要强制要求与ANSI模式的事务处理方式一致
# ondblog ansi stores_demo
# ontap -A stores_demo