Oracle 和 DB2 的比较和兼容性/进程模型/日志/Oracle
在 Oracle 中,事务通过将它们写入内存中的撤销日志缓冲区来记录。然后将这些缓冲区写入磁盘上的日志文件,并且可以选择将磁盘日志文件写入归档。所有对数据库的更改,包括使用 DDL(创建、更改和删除语句)进行的结构更改,都会被记录。在一个活动的数据库中,变化是持续的,因此变化量加上撤销日志为了安全而被复制的事实意味着 DBMS 在其操作过程中会生成大量数据。在共享内存中进行的更改会写入到镜像的磁盘日志文件中,以便将每次更改记录两次。这样做是为了在其中一组磁盘日志文件不可用时保护数据库,这是一种双保险的方法。由于镜像的磁盘日志文件彼此备份,因此它们应该位于不同的磁盘驱动器和不同的控制器上。镜像的磁盘日志文件称为组,当一个组填满时,DBMS 会切换到下一个日志文件组。这个过程会一直持续到该系列中的最后一个组填满,然后该过程会从第一个组开始重新开始。日志文件是循环覆盖的。执行此操作所需的最小组数为两个,但通常至少有三个。由于日志文件是循环覆盖的,因此它们不是永久性的,在将来某个时刻它们将被再次写入。可以将已满的磁盘日志文件写入归档,从理论上讲可以保护对数据库的所有更改。归档过程 (ARCH) 处理此操作,并且 ARCH 完成后会标记它刚刚归档的撤销日志可供覆盖。如果您使用 ARCH,那么重要的是要为归档分配足够的存储空间,因为如果该目录填满,数据库将停止。
写入撤销日志的进程是日志写入器 (LGWR)。LGWR 定期将内存中撤销日志段的内容复制到磁盘上的撤销日志文件。此外,当重做日志文件已满时,LGWR 会发出检查点信号。检查点将所有已提交的事务写入磁盘上的日志文件,并向后台写入器进程 (DBWR) 发出信号,以将脏缓冲区写入磁盘。
每个日志切换都用一个日志序列号进行标记,该日志序列号写入数据文件头和控制文件,以便在恢复过程中使用适当的日志文件。
在 Oracle 中,事务被写入内存中的重做日志缓冲区。LGWR 进程会定期将重做日志缓冲区写入重做日志文件,如果数据库以归档模式运行,则 ARCn 进程会将重做日志文件写入脱机存储。
上图描述了与日志记录相关的内存、磁盘和进程。
日志记录进程 (LGWR) 将信息从重做日志缓冲区写入日志文件。日志文件是所有对数据库进行的更改的记录。这些文件在恢复时至关重要,因此它们被复制,并且重做日志信息被写入两个成员(多路复用)。日志文件中存储的信息是所有更改表和索引的 DML、所有 DDL(例如创建、删除和更改)以及所有提交。
然后,多路复用的日志文件被组织成组。当一组日志文件填满时,Oracle 会进行检查点和切换,并且组中的下一组文件会被写入(称为日志切换)。数据库至少有两组日志文件组,通常有三个,最大可以有 255 个。日志文件以循环方式写入,因此当一组日志文件填满时,就会写入该系列中的下一组文件。当该系列中的最后一组文件被写入时,该过程会从该系列中的第一组文件重新开始。
可以通过在日志文件填满时对其进行归档来获得额外的安全级别,以便在再次写入它们时不会覆盖数据 - 这称为归档模式。您需要确保有足够的存储空间来保存归档的日志文件,因为如果数据库试图归档到已满的目录,它将会挂起。归档器进程 (ARCn) 负责归档日志文件,它会在每次日志切换时将重做日志文件复制到脱机存储。归档器进程只存在于启用了日志归档的实例中,并且由 LGWR 根据系统负载发出信号。
每次 Oracle 切换到一组新的重做日志文件时,它都会生成一个日志序列号,该序列号被写入控制文件。此日志序列号用于确定在恢复过程中使用哪些日志文件。控制文件包含数据库的结构,并且每个数据库至少应该有 3 个。它们包含诸如数据库名称、创建日期、所有数据文件的完整路径以及每个数据库的检查点信息等内容。它们用于挂载数据库、打开数据库以及访问数据库。它们在数据库需要恢复时存储同步数据。由于控制文件和日志文件存储了有关数据库的如此重要的信息,因此它们应该位于不同的驱动器和控制器上。
日志写入器 (LGWR) 将数据从重做日志缓冲区池写入当前组的联机撤销日志。当事务提交时,日志写入器会写入重做日志条目提交记录,然后将提交以及与该提交相关的所有更改写入磁盘。当重做日志条目被写入磁盘时,只有自上次 LGWR 写入以来添加到缓冲区的条目才会被写入磁盘(这样就不会写入重复项)。LGWR 每三秒钟写入磁盘一次,并且在重做日志变为三分之一满时也会写入磁盘。如果数据库写入器进程 (DBWn) 将脏缓冲区写入磁盘,LGWR 也会写入磁盘。在 DBWn 写入磁盘之前,LGWR 会写入与已更改数据相关的所有重做条目。LGWR 通过发出检查点 (CKPT) 信号来实现这一点。CKPT 向更新的已提交块发出一个后台写入 (DBWn) 信号,以便写入磁盘上的数据文件,并确保日志文件中的已提交事务被写入磁盘。