根据预写式日志WAL的定义,数据库在修改磁盘上的元组前,必须先将日志记录刷回到磁盘。XLog的组织形式如下,依次为日志记录头,日志类型(事务操作日志、事务提交或终止日志或是检查点日志等)、备份文件块描述信息以及备份文件块数据。数据库系统把各种需要记录日志的数据分类,分配给与他们对应的资源管理器号,系统在恢复或者读取日志记录时,能够通过资源管理器号和日志头信息中的xl_info字段(高4位),知道数据库对源数据做了哪种操作,从而正确的调用相应的响应函数(如redo函数等)。
PG_RMGR(RM_XLOG_ID, "XLOG", xlog_redo, xlog_desc, NULL, NULL)
PG_RMGR(RM_XACT_ID, "Transaction", xact_redo, xact_desc, NULL, NULL)
PG_RMGR(RM_SMGR_ID, "Storage", smgr_redo, smgr_desc, NULL, NULL)
PG_RMGR(RM_CLOG_ID, "CLOG", clog_redo, clog_desc, NULL, NULL)
PG_RMGR(RM_DBASE_ID, "Database", dbase_redo, dbase_desc, NULL, NULL)
PG_RMGR(RM_TBLSPC_ID, "Tablespace", tblspc_redo, tblspc_desc, NULL, NULL)
PG_RMGR(RM_MULTIXACT_ID, "MultiXact", multixact_redo, multixact_desc, NULL, NULL)
PG_RMGR(RM_RELMAP_ID, "RelMap", relmap_redo, relmap_desc, NULL, NULL)
PG_RMGR(RM_STANDBY_ID, "Standby", standby_redo, standby_desc, NULL, NULL)
PG_RMGR(RM_HEAP