事务日志记录示例
请查看以下各个示例的描述和具体说明。
添加日志
此示例通过将事务附加到已有的日志文件来演示 MCO_TRANSLOG_APPEND 选项的使用。
该应用程序打开并连接到一个数据库,启动事务日志记录,执行一些读写事务,然后停止事务日志记录。
然后查询事务日志文件的追加兼容性,如果发现兼容,则执行更多的读写事务,停止事务日志记录,并关闭数据库。
\target\bin\tlogappend
添加部分日志
此示例展示了如何将一部分日志应用到数据库中。
日志的多个部分被保存到单独的文件中,然后所有这些部分会逐个应用到新创建的数据库中。
\target\bin\tlogapplypartial
基本功能
此示例展示了基本功能。
当首次运行时(磁盘上没有数据库快照和日志文件),该示例会创建一个数据库并生成一个数据库快照文件。然后,它启动事务日志记录,并开始对数据库执行一些读写操作。接着,它关闭事务日志记录和数据库,将初始数据库快照和包含所有事务的日志留在磁盘上。
当再次运行该示例时,它会在磁盘上找到数据库快照和日志,因此会打开快照并应用日志。这会将数据库恢复到与上次运行结束时相同的状态。现在,该样本创建一个新的数据库快照,启动事务日志记录,并像第一次运行时一样对数据库执行更多操作。
每次对示例的连续运行都会用一部分新数据更新前一次运行所存储的数据库。这展示了如何使内存中的数据库具有持久性并且能够自动恢复。
\target\bin\tlogbasic
文件大小限制
此示例演示了如何使用日志选项 MCO_TRANSLOG_SIZE_CLBK,该选项可在指定的日志文件大小达到时通过用户定义的回调函数发出警告。
该应用程序设置了日志文件大小限制以及用户自定义回调函数,该回调函数将指示是否已达到限制。主应用程序循环执行数据库事务,如果大小回调函数已被调用,则主循环暂停,然后使用特殊函数 mco_translog_db_save 保存数据库快照。此函数在一个线程安全的操作中保存数据库快照并截断事务日志。
\target\bin\tlogcheckpoint
日志刷新
此示例演示了日志刷新选项 MCO_TRANSLOG_SYNC_TIMER 和 MCO_TRANSLOG_SYNC_COUNT 的用法。
该应用程序设置了两种刷新策略:按事务计数和按计时器。后者假定已注册用户定义的回调函数。当计时器回调信号显示超时已过时,示例会提供输出,这将导致应用程序开始事务日志记录并执行读写事务,进而通过计时器和计数刷新选项生成日志输出。
\target\bin\tlogflush
日志复制
此示例展示了使用 MCO_TRANSLOG_DUAL_OUT 标志进行事务日志迭代的用法。
以这种方式保存的日志文件可在应用程序出现故障时用于恢复数据库,或者由读取应用程序使用 mco_translog_iterate()
和/或 mco_translog_play()
函数再次迭代日志。这使得在通过管道传输日志的同时将其复制到文件成为可能。
\target\bin\tlogiterdualout
动态管道迭代
此示例演示了使用动态管道的迭代功能。
启动了多个迭代线程,每个线程都创建一个管道设备,对其进行迭代,然后分离该设备。
\target\bin\tlogiterdynpipe
持久事件队列
此示例展示了名为“持久事件队列”的技术的使用。
日志读取器不仅迭代对象,还接收在数据库模式中声明并由读取器应用程序注册的事件。函数 mco_translog_play()
是 mco_translog_iterate()
的扩展版本,它为在读取器中注册事件处理程序并捕获这些事件提供了能力,同时在迭代日志时进行。
\target\bin\tlogiterevents
管道迭代
此示例演示了如何使用标志 MCO_TRANSLOG_ITERABLE 和 MCO_TRANSLOG_PIPE 通过管道将日志传输到另一个线程或另一个应用程序,并在读取器端迭代日志。
请注意
运行时选项 MCO_RT_OPTION_MARK_LAST_OBJ 的使用,会向用户定义的回调函数发出额外调用,以表明当前事务已完成。
\target\bin\tlogiterpipe
多管道迭代
此示例与 tlogiterpipe 类似,但展示了如何创建多个管道通道,并将日志广播给多个读取器。
\target\bin\tlogiterpipe_ddl
迭代日志DDL
此示例展示了使用标志 MCO_TRANSLOG_ITERABLE
和 MCO_TRANSLOG_PIPE
通过管道将日志传输到另一个线程或另一个应用程序,并在读取器端迭代日志的动态 DDL。
请注意
运行时选项 MCO_RT_OPTION_MARK_LAST_OBJ
的使用,会向用户定义的回调函数发出额外调用,以表明当前事务已完成。
\target\bin\tlogiterpipe_ddl
标记功能
此示例演示了事务日志标记功能的使用。
该应用程序启动事务日志记录,并在事务块之间定期使用标签标记日志文件的同时运行读写事务。在指定的事务计数到期后,该示例展示了如何收集当前打开的日志文件中标签的信息,然后使用用户定义的标签处理回调函数从分离的日志文件中收集信息。
\target\bin\tlogtruncate
日志截断
此示例演示了日志截断的用法。
应用程序展示了如何在单个事务日志记录会话期间截断不必要的日志实体。它首先启动事务日志记录,然后执行读写事务,定期重置日志并创建新的数据库快照。这会保持一致的数据库快照对和日志文件,其中包含自上次快照以来执行的事务。
\target\bin\tlogtruncate