我正在为 70-432(SQL Server 2008)考试做准备,对于事务日志的工作原理有点困惑。
据我所知(如果我错了请纠正我...),日志会主动存储在内存中,并尽可能频繁地复制到驱动器上的文件中。在每个检查点,完整的事务都会提交到硬盘上的数据文件中(也就是说,在检查点之前,它们实际上根本没有写入驱动器。尾部始终保存尚未提交的事务。
当灾难发生时,您尝试备份日志的“尾部”。它是存储在文件中,还是尝试从内存中转储?我知道这并不总是可行的,但强烈建议尝试这样做。
我的理解正确吗?
答案1
据我所知,(如果我错了请纠正我...)日志会主动存储在内存中并尽可能频繁地复制到驱动器上的文件中。
事务在被视为已提交到数据库之前,始终会先在事务日志中固化到磁盘。另一方面,缓冲区缓存确实存在于内存中,并在事务提交并固化到事务日志中后反映数据库的当前状态。缓冲区缓存在检查点期间刷新到磁盘。
由于缓存位于 RAM 中,因此系统故障可能会导致存储在缓存中(但尚未刷新到磁盘)的信息丢失。由于缓存中的所有内容都存储在事务日志中,因此 SQL 能够恢复故障时已提交但尚未刷新到数据文件的所有事务。