擅长:python、mysql、java
<p>我对数据库工作方式的模糊记忆是这样的。它包括三个文件。控制文件、目标数据库文件和挂起的事务日志。在</p>
<p>控制文件具有全局事务计数器和哈希或其他校验和。这是一个只有一个物理块大小的小文件。一个操作系统级写入。在</p>
<p>在目标文件中有一个全局事务计数器,其中包含实际数据,外加哈希或其他校验和。在</p>
<p>有一个挂起的事务日志刚刚增长,或者是一个有限大小的循环队列,或者可能会滚动。没什么大不了的。在</p>
<ol>
<li><p>将所有挂起的事务记录到简单日志中。有序列号和变化的内容。</p></li>
<li><p>更新事务计数器,更新控制文件中的哈希。一封信,满脸通红。如果这失败了,那么一切都没有改变。如果成功,则控制文件和目标文件不匹配,表示事务已启动但尚未完成。</p></li>
<li><p>对目标文件执行预期的更新。查找开头并更新计数器和校验和。如果失败,则控制文件的计数器比目标文件多。目标文件已损坏。这样做时,最后记录的事务、控制文件和目标文件都同意序列号。</p></li>
</ol>
<p>您可以通过重放日志来恢复,因为您知道最后一个正确的序列号。在</p>