Oracle中的Redo和Undo简单介绍
2009-06-23 17:48
323 查看
Redo(重做)
除了用于保存数据的数据文件外,每个oracle数据库都会有一组(两个或多个)重做日志文件。重做日志用于保存对数据的所有修改,包括提交的和未提交的修改。在把对数据的修改写到数据文件之前,所有的修改都被写到重做日志中。
重做日志的主要目的是在实例失败或者介质损坏时,帮助把数据库恢复到一个合理的状态。例如:当进行实例恢复时,重做日志可以重做那些已经提交但是还没有把修改写入到数据文件中的事务。
重做日志由两部分组成:在线重做日志和归档重做日志。为了避免发生单点故障,Oracle会创建多组在线重做日志文件。如果数据库工作在ARCHIVELOG模式,Oracle将在每个检查点创建归档日志,他们可以用于磁盘损坏时的数据库恢复。所以对于生产系统来说,归档重做日志是很重要的,应该把生产系统设置为ARCHIVELOG模式。归档重做日志应该定期的备份和删除。
Oracle会重用重做日志文件,当一个日志文件写满时就会切换到另一个日志文件,因此在进行日志切换之前,需要确保前一个日志可以被重写,这是通过建立检查点来实现的,这时DBWn进程将把该日志文件保护的所有脏块写入到磁盘。因此,重做日志文件的大小直接影响建立检查点的频率和性能,建立检查点的频率会根据系统活动发生很大的变化,但是通常情况下是2到3个小时建立一次。
Undo(撤消)
Oracle把所有即将被修改(即执行update,delete等)的数据记录到undo段中,即在数据被修改之前,Oracle把他们记录到undo段中。
Undo信息有两个用途:1.实现Oracle中的多版本机制,从而使读不阻塞写,写也不阻塞读。2.当回滚一个事务时用于把数据库恢复到该事务执行前的状态。
回滚段也会被重用,因此应该把回滚段设置成足够大。否则,有可能发生ORA-01555:snapshot too old错误,发生这种错误的一般是因为回滚段设置的太小。例如:你在读取一个数据表中的记录,另一个用户更新该表中你正要读取的记录并且提交了更新,这时你读取那个时点的数据就会被写入到回滚段中,你将从回滚段中读取这些记录,如果这些数据所在的回滚段被覆盖了,就会发生snapshot too old错误。
除了用于保存数据的数据文件外,每个oracle数据库都会有一组(两个或多个)重做日志文件。重做日志用于保存对数据的所有修改,包括提交的和未提交的修改。在把对数据的修改写到数据文件之前,所有的修改都被写到重做日志中。
重做日志的主要目的是在实例失败或者介质损坏时,帮助把数据库恢复到一个合理的状态。例如:当进行实例恢复时,重做日志可以重做那些已经提交但是还没有把修改写入到数据文件中的事务。
重做日志由两部分组成:在线重做日志和归档重做日志。为了避免发生单点故障,Oracle会创建多组在线重做日志文件。如果数据库工作在ARCHIVELOG模式,Oracle将在每个检查点创建归档日志,他们可以用于磁盘损坏时的数据库恢复。所以对于生产系统来说,归档重做日志是很重要的,应该把生产系统设置为ARCHIVELOG模式。归档重做日志应该定期的备份和删除。
Oracle会重用重做日志文件,当一个日志文件写满时就会切换到另一个日志文件,因此在进行日志切换之前,需要确保前一个日志可以被重写,这是通过建立检查点来实现的,这时DBWn进程将把该日志文件保护的所有脏块写入到磁盘。因此,重做日志文件的大小直接影响建立检查点的频率和性能,建立检查点的频率会根据系统活动发生很大的变化,但是通常情况下是2到3个小时建立一次。
Undo(撤消)
Oracle把所有即将被修改(即执行update,delete等)的数据记录到undo段中,即在数据被修改之前,Oracle把他们记录到undo段中。
Undo信息有两个用途:1.实现Oracle中的多版本机制,从而使读不阻塞写,写也不阻塞读。2.当回滚一个事务时用于把数据库恢复到该事务执行前的状态。
回滚段也会被重用,因此应该把回滚段设置成足够大。否则,有可能发生ORA-01555:snapshot too old错误,发生这种错误的一般是因为回滚段设置的太小。例如:你在读取一个数据表中的记录,另一个用户更新该表中你正要读取的记录并且提交了更新,这时你读取那个时点的数据就会被写入到回滚段中,你将从回滚段中读取这些记录,如果这些数据所在的回滚段被覆盖了,就会发生snapshot too old错误。
相关文章推荐
- 本文详细介绍从Undo, Redo, DataFile看Oracle中的事务过程
- 【Python Oracle】使用cx_Oracle 连接oracle的简单介绍
- [转]Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍
- Simple Undo/redo library for C#/.NET(简单的C#.Net撤销、重做库)
- oracle的正则表达式(regular expression)简单介绍——转贴
- Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍
- undo表空间与redo日志文件在oracle中的作用
- oracle 的redo和undo
- 【Python Oracle】使用cx_Oracle 连接oracle的简单介绍
- Oracle Sales Cloud中有关沙盒的简单介绍
- Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍
- oracle的正则表达式(regular expression)简单介绍
- Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍
- oracle exits和in的简单介绍
- Oracle 9i & 10g编程艺术-深入数据库体系结构——第9章:redo与undo
- Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍
- oracle lob 简单介绍
- Oracle 重做(Redo)日志介绍
- Oracle Core 学习笔记一 -- Redo 和 Undo 机制详解
- 数据库临时表简单介绍(ORACLE and SQL SERVER)