Oracle数据库中Redo、Undo、控制文件、SCN、DBWR和LBWR、Checkpoint

Redo

Redo:redo log file,即重做日志文件,用于恢复数据,是恢复实例失败后的数据。redo是指在失败时重放事务。oracle数据库维护着两类重做日志文件,在线(online)重做日志文件和归档(archive)重做日志文件,这两类重做日志文件都用于恢复,其主要目的就是万一示例失败或介质失败,它们能够恢复数据。

undo

Undo:  用于回滚事务,即将数据回滚到对该数据进行操作之前的样子,其实际作用就是取消一条语句或一组语句。在对数据库数据进行修改时,数据库会生成undo信息,以防事务或语句执行失败时,数据还能恢复到修改之前的样子,或者在执行rollback语句时可以回滚数据。但是要注意的是undo只是让数据库逻辑地恢复到原来的样子,其数据结构以及数据库块本身在回滚后可能大不相同。

示例:

当update一条数据,未提交时就断电了,等数据库重新启动时,数据库会利用undo信息回滚数据,将数据回滚到未修改时的状态,然后就不会再执行update了。

而当uodate一条数据,commit了后,但是数据还在内存中没有写入到文件中,此时断电,当数据库重启时数据库会先回滚数据到原来的样子,然后再执行update,将数据写入到文件中。

注意:oracle中redo信息包含undo。

oracle数据库事务中的数据变化写入数据文件步骤:

  1. 事务开始;
     
  2. 在buffer cache 中找到需要的数据块,如果没有找到,则从数据文件中载入到buffer cache中;
     
  3. 事务修改buffer cache中的数据块,该数据被标识为脏数据,并被写入log buffer中;
     
  4. 事务提交,LGWR进程将log buffer中的脏数据写入到redo log file中;
     
  5. 当发生checkpoint,checkpoint进程更新所有数据文件中的文件头信息,DBWR进程则负责将buffer cache中的脏数据写入到数据文件中。

 

控制文件

控制文件:就是一个跟踪数据库的物理组成的二进制结构文件,仅与一个数据库相关联,意味着一个数据库就只有一个对应的控制文件。其包含的信息有:

  • 数据库名称和数据库唯一标识符DBID;
     
  • 创建数据库的时间戳;
     
  • 有关数据库文件、联机重做日志、归档日志的信息;
     
  • 表空间信息;
     
  • RMAN备份信息;

在数据库使用期间,oracle数据库不断读取和写入控制文件,并且只要数据库处于打开状态,控制文件就必须是可用的,以便可以写入。例如,恢复数据库涉及控制文件读取读取数据库中包含的所有数据文件名称,其他的操作,如添加数据文件,会更新存储在控制文件的信息中。

控制文件详细信息链接:https://www.cnblogs.com/baisha/p/6292943.html

SCN

SCN:System change number,是当oracle数据库更新后,由DBMS自动维护去累计递增的一个数字。在oracle数据库中,SCN分为四种,分别为:系统检查点SCN、数据文件检查点SCN、启动SCN、终止SCN。

  • 系统检查点SCN:当一个检查点动作完成后,oracle就把系统检查点的SCN存储到控制文件中。该SCN是全局范围的,当发生文件级别的SCN时,例如将表空间置于只读状态,则不会更新系统检查点SCN。
     
  • 数据文件检查点SCN:当一个检查点动作完成后,oracle就把每个数据文件的SCN单独存放在控制文件中。其包括全局范围的(比如日志切换)以及文件级别的检查点(将表空间置为只读、begin backup或将某个数据文件设置为offline等)
  • 启动SCN:oracle把这个检查点的SCN存储在每个数据文件的文件头中,这个值称为启动SCN,因为它用于在数据库实例启动时检查是否需要执行数据库恢复。
     
  • 终止SCN:每个数据的终止SCN都存储在控制文件中。

SCN最大值是多少

Oracle使用6 Bytes记录SCN,也就是48位,其最大值是:281,474,976,710,656。

SCN是用来精确区别操作的先后顺序的。

SCN参考:http://czmmiao.iteye.com/blog/1010267

 

DBWR

DBWR:数据库书写器(database write)的缩写,该服务器进程在缓冲存储区(buffer cache)中记录所有的变化和数据,DBWR把来自数据库的buffer cache中的脏数据写到数据文件中,以便确保buffer cache中有足够的空闲的buffer cache空间。

脏数据就是正在使用但是没有写到数据文件中的数据。

DBWR执行写的情况:

  • 没有可用的缓冲区时;
  • 脏缓冲区过多;
  • 遇到三秒超时;
  • 遇到检查点;

LGWR

LGWR:日志书写器(log write)的缩写,LGWR负责把重做日志缓冲存储区中的数据写入到重做日志文件。

LGWR执行写情况:

  • 执行commit;
  • 超过日志缓冲区1/3或者超过1M;
  • DBWR正要执行写之前

 

checkpoint

checkpoint:检查点,该进程可以用来同步化数据库中的文件。其激活以后会触发DBWR进程将数据缓冲中的脏数据写入到数据文件。其实进行一致的数据库关闭、实例恢复和oracle数据库通用操作的关键机制。

下面这些操作将触发checkpoint事件:

  • 日志切换,通过alter system switch log file;
  • DBA发出checkpoint命令,通过alter system checkpoint
  • 对数据文件进行热备时,针对该数据文件的checkpoint也会进行,alter tablespace ts_name begin backup/end backup;
  • 当运行alter tavlespaace/datafile read only的时候
  • shutdown命令发出时

版权声明:本文为博主原创文章,转载请注明,谢谢。 https://mp.csdn.net/postedit/82379704

 

你可能感兴趣的:(oracle数据库学习)