重做日志管理

重做日志是对用户的DML和DDL操作所做的记录,它是保证数据库安全的一种重要手段
当用户执行DML或DDL命令时,数据库服务器将生成重做日志,并将其记录在重做日志文件中。
为了保证重做日志文件的安全,需要对它们进行归档

如果数据库出现故障,可以利用重做日志文件和归档日志文件进行实例恢复或者介质恢复。
无论是重做日志文件还是归档日志文件,都是以二进制的形式记录重做日志的。
用户如果需要了解这些文件的内容,就需要对它们进行分析,将日志信息转化为文本形式。
下面主要内容包括重做日志文件的管理、归档日志文件的管理以及日志分析等内容。

与重做日志有关的内容较多,接下来首先对这些内容做一次综合介绍,以使对重做日志有个全面、深刻的认识。
当用户执行SQL语句时,在用户进程和服务器进程之间需要建立一条连接。

用户进程向服务器进程发送SQL语句,服务器进程对这些SQL语句进行解析,并生成执行计划,然后将解析代码和执行计划存储在SGA 的库缓冲区中,然后按照执行计划执行SQL语句。
在执行阶段,服务器进程首先检查用户访问的数据是否已经位于数据库高速缓存中。
如果是,则直接在数据库高速缓存的缓冲区中访问数据,否则,需要从数据文件中将对应的数据块读到数据库高速缓存中。
如果用户的SQL命令是DML或DDL ,那么在访问数据之前首先生成重做日志,并将重做日志记录在重做日志缓冲区中,然后修改数据库高速缓存中的缓冲区。
被修改的缓冲区叫做脏缓冲区。
重做日志缓冲区是SGA的一部分,它的作用是记录数据库中的重做日志

重做日志是对用户执行的DML或DDL操作的记录,其中包括被修改的数据块、修改的位置以及修改后的数据等信息。
重做日志缓冲区的大小由初始化参数LOG_BUFFER指定。

当实例启动时,在内存中按照这个参数的值为重做日志缓冲区分配内存空间。

从上面的描述可以看到,当用户在修改数据时,服务器进程首先生成重做日志,然后才修改缓冲区中的数据。
无论是重做日志还是被修改后的数据,都是位于内存中的。

由于内存中的数据是易消失的, Oracle提供了两个后台进程,用于将这些数据写入磁盘上的文件中。
其中DBWR 的作用是在一定的时机下将数据库高速缓存中的脏缓冲区写入数据文件, LGWR进程的作用是在一定的时机下将重做日志缓冲区中的内容写入重做日志文件。
DBWR和LGWR 进程的执行时机并不是同步的,但是在DBWR 工作之前, LGWR一定将重做日志写入了重做日志文件中。
用户在进行一次数据访问时,尽管被修改的数据可能已经写入了数据文件,重做日志也可能写入了重做日志文件,但这次访问并不一定是一个有效的事务,因为对数据库所做的任何修改都必须同时记录在数据文件、控制文件和重做日志文件中。
Oracle是通过SCN来维护这个一致状态的。

数据库服务器每执行一个事务,都将产生一个新的、递增的SCN 。

如果用户没有提交事务,新的SCN是不被写入任何一个文件的。
这时如果系统突然断电,那么数据库服务器在重新启动时, SMON后台进程将检查数据文件、控制文件和重做日志文件中的SCN ,并回滚所有的未提交事务,然后打开数据库。
如果用户在访问数据之后提交了事务,那么重做日志缓冲区的重做日志连同最新的SCN一起被写入重做日志文件。
既然SCN和重做日志一起被写入了重做日志文件,实例恢复和介质恢复就成为可能
如果发生了系统断电或者数据文件损坏等情况,可以根据重做日志文件的内容对数据库中的数据进行恢复。
用户提交事务后,最新的SCN仅仅写入了重做日志文件,而数据文件和控制文件中SCN的写入则依赖于检查点
检查点是一种数据库事件,当数据库服务器发生检查点时, DBWR进程将数据库高速缓存中的所有脏缓冲区写入数据文件,并且使数据文件、控制文件和重做日志文
件中的SCN达到一致状态

检查点是由后台进程CKPT发出的, CKPT进程在一定的时机发生检查点,同步数据文件、控制文件和重做日志文件的状态。
假设在用户提交事务后CKPT进程恰好发出一个检查点,这时三种文件的状态完全一致,如果这时系统突然断电,那么数据库服务器在重新启动时,可以直接打开数据库,不需要进行实例恢复,所以这次启动会很快。
如果在用户提交事务后CKPT还没有来得及发出检查点时系统突然断电,那么数据库服务器在重新启动时就需要进行实例恢复。
在这种情况下,数据文件和控制文件中的SCN应该是一致的,并且小于重做日志文件中的SCN 。
SMON后台进程将检测到三个文件中的SCN 不一致,于是将两个SCN之间的所有已经提交的事务重新执行一遍,并回滚所有未提交的事务,然后再打开数据库。
Oracle利用这种方法来保证用户已经提交的事务不受系统故障的影响。

当用户执行DML操作时,服务器进程将修改前的数据首先写入回滚段,然后在数据库高速缓存中对数据进行修改。
如果用户提交了事务,回滚段中的数据成为无效数据。

如果用户回滚了该事务,那么回滚段中的数据将被写回原来位置,用户对这些数据所做的修改便宣告无效。
因为重做日志缓冲区的大小是有限的,而且它不能永久存储数据,因此重做日志需要被写入重做日志文件。
在数据库中一般有若干个重做日志组,每个日志组中有若干个日志成员,数据库服务器以循环的方式将重做日志写入这些重做日志组。
当一组重做日志文件被写满后,数据库服务器自动切换到下一个日志组。
当最后一组重做日志文件被写满后,数据库服务器又自动切换到第-组。
在数据库服务器切换日志时,新的重做日志被写入重做日志文件,文件中原来的内容将被覆盖。
为了保留以前的重做日志,需要对重做日志文件进行归档。

重做日志文件的归档是由后台进程ARCH完成的。

时间: 2024-10-12 11:43:53

重做日志管理的相关文章

Oracle重做日志管理与深入解析_超越OCP精通Oracle视频课程培训14

oracle视频教程目标 Oracle视频教程,风哥本套oracle教程培训学习oracle数据库Redo log日志文件作用与概念解析,重做日志日常维护与优化优化,Redo Log的增加/删除/镜像,DDL/DML操作与REDO的关系,详解update.truncate.select的redo过程,oracle redo转储日志文件深入分析等日常管理与维护. 适用人群 IT相关从业人员.Oracle数据库技术人员.想加工资的.想升职的都可以. 视频在线学习地址: http://edu.51ct

重做日志文件组和重做日志文件组成员的管理

一.重做日志文件组: 1.添加重做日志组的指令: alter database [数据库名称] add logfile[group 正整数] 文件名称 [,[group 正整数]文件名称]] 不是有group选项时oracle系统会自动在当前最大的组号上加1来产生新的组号 ex:alter database add logfile ('D:\REDO04.LOG','D:\REDO05.LOG') size 15m; 增加新的重做日志组并且添加两个重做日志成员,大小设置为15M 2.删除重做日志

ORACLE - 管理重做日志文件

ORACLE重做日志文件用于在数据库崩溃等情况下用于恢复数据,默认情况下为三个文件redo01.log/redo02.log/redo03.log,文件组循环使用,在录入与更新操作比较多的应用中,日志文件更新比较繁忙. 1. 查询日志文件: SQL>select * from v$logfile; SQL>select group# as gid,bytes,status,members from v$log; --status 为current则代表正在使用 2. 在挂载新的磁盘时可考虑创建

康哥教你如何有效管理重做日志文件

有的人可能还不知道什么是重做日志文件,其实就是你的oradata目录下面的那几个redo.log文件. 作用:当你的数据库崩溃的时候,管理员可以通过重做日志文件和数据库备份文件,把数据库恢复到最近一次记录日志时的状态. 在创建oracle数据库的时候,默认创建了3个重做日志组(对于数据库来说,至少需要2个重做日志组),每一个日志组包含一个或者多个重做日志文件. 每一个重做日志组都有自己的内部序号,oracle按照序号从小到大的顺序向日志组中写入日志信息.当一个重做日志组写满后,后台进程LGWR开

Oracle 11g 管理重做日志文件

重做日志也称联机重做日志.引入重做日志的目的是数据恢复.在数据库运行过程中,用户更改的数据会暂时存放在数据库的高速缓冲区中.为了提高写数据的速度,并不是一旦有数据变化,就把变化的数据写到数据文件中.频繁的读写磁盘文件会使数据库系统效率降低,所以要等到数据库高速缓冲区中的数据达到一定的量或者满足一定的条件时,DBWR进程才会将变化了的数据写到数据文件中.这种情况下如果在DBWR把变化了的更改写到数据文件之前发生了宕机,那么数据高速缓冲区中的数据就会全部丢失.如果在数据库重新启动后无法恢复这部分用户

Overview of the Online Redo Log --- 在线重做日志概述

对于 oracle 恢复来说最重要的数据结构莫过于online redo log(在线重做日志), 在线重做日志包含至少两个预先分配好的,用来存储数据库变化的文件.在线重做日志记录着数据文件中的变化. Online Redo Log有什么作用 Oracle 数据库通过在线重做日志文件来确保数据不丢失.特别是当实例失败后, oracle数据库可以通过在线重做日志文件恢复已经提交但尚未写到数据文件中的数据. Oracle 数据库把每个事务先同步写到 redo log buffer,然后再写到在线重做

Oracle重做日志文件

http://blog.csdn.net/leshami/article/details/5749556 一.Oracle中的几类日志文件 Redo log files      -->联机重做日志 Archive log files   -->归档日志 Alert log files     -->告警日志 Trace files         -->跟踪日志 user_dump_dest          -->用户跟踪日志 backupground_dump_dest

oracle redo 重做日志文件

以下易容翻译自oracle dba官方文档,不足之处还望指出. 管理重做日志文件 学习目标:1.解释重做日志文件的目的2.描述重做日志文件的结构3.学会控制日志切换与检查点4.多元化管理重做日志文件5.使用OMF管理重做日志文件 1.概念介绍:重做日志文件通过记录数据的所有改变情况对系统或介质故障提供恢复机制.1)重做日志文件以组的形式存在2)一个oracle数据库至少需要两组,每组至少有一文件3)在一组里的每一重做日志文件叫做成员The redo log files are used only

SQL Server中的事务日志管理(7/9):处理日志过度增长

当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会告诉你每个DBA应该知道的具体细节. 这篇文章会列出导致事务日志过度增长的常见的问题和错误管理形式,包括: 在完整恢复模式里,没有进行日志备份 进行索引维护 长时间运行或未提交的事务阻止事务日志里空间重用 当然,如果增长没检查,日志文件会扩展直到吞没所有可用磁盘空间或日志文件的最大大小,在这个时候你