redo联机重做日志
2012-03-23 19:48
225 查看
Oracle通过Redo来保证数据库的事务可以被重演,从而使得在故障之后,数据可以被恢复。Redo对于Oracle数据库来说至关重要。
在数据库中,Redo的功能主要通过3个组件来实现:Redo Log Buffer、LGWR后台进程和Redo Log File(在归档模式下,Redo Log File最终会写出为归档日志文件)
在Oracle的SGA中,存在一块共享内存,称为Redo Log Buffer。
Redo Log Buffer位于SGA之中,是一块循环使用的内存区域,其中保存数据库变更的相关信息。这些信息以重做条目(Redo Entries)形式存储(Redo Entries也经常被称为Redo Records)。Redo Entries包含重构、重做数据库变更的重要信息,这些变更包括INSERT、UPDATE、DELETE、CREATE、ALTER或者DROP等。在必要的时候Redo
Entries被用于数据库恢复。
Redo Entries的内容被Oracle数据库进程从用户的内存空间复制到SGA中的Redo Log Buffer之中。Redo Entries在内存中占用连续的顺序空间,由于Redo Log Buffer是循环使用的,Oracle通过一个后台进程LGWR不断地把Redo Log Buffer的内容写出到Redo Log File中。
当用户在Buffer Cache中修改数据时,Oracle并不会立即将修改数据写出到数据文件上,因为那样做效率会很低,到目前为止,计算机系统中最繁忙的部分是磁盘的I/O操作,Oracle这样做的目的是为了减少IO的次数,当修改过的数据达到一定数量之后,可以进行高效地批量写出。
大部分传统数据库(当然包括Oracle)在处理数据修改时都遵循no-force-at-commit策略。也就是说,在提交时并不强制写。那么为了保证数据在数据库发生故障时(例如断电)可以恢复,Oracle引入了Redo机制,通过连续的、顺序的日志条目的写出将随机的、分散的数据块的写出推延。这个推延使得数据的写出可以获得批量效应的性能提升.
同Redo Log Buffer类似,Redo Log File也是循环使用的,Oracle允许使用最少两个日志组。缺省情况下,数据库创建时会建立3个日志组。
SQL> select group#,members,status from v$log;
GROUP# MEMBERS STATUS
---------- ---------- ----------------
1 1 INACTIVE
2 1 CURRENT
3 1 INACTIVE
当一个日志文件写满之后,会切换到另外一个日志文件,这个切换过程称为Log Switch。Log Switch会触发一个检查点,促使DBWR进程将写满的日志文件保护的变更数据写回到数据库。在检查点完成之前,日志文件是不能够被重用的。
由于Redo机制对于数据的保护,当数据库发生故障时,Oracle就可以通过Redo重演进行数据恢复。那么一个非常重要的问题是,恢复应该从何处开始呢?
如果读取的Redo过多,那么必然导致恢复的时间过长,在生产环境中,我们必需保证恢复时间要尽量得短。Oracle通过检查点(Checkpoint)来缩减恢复时间。检查点只是一个数据库事件,它存在的根本意义在于减少恢复时间。
当检查点发生时(此时的SCN被称为Checkpoint SCN)Oracle会通知DBWR进程,把修改过的数据,也就是此Checkpoint SCN之前的脏数据(Dirty Buffer)从Buffer Cache写入磁盘,在检查点完成后CKPT进程会相应地更新控制文件和数据文件头,记录检查点信息,标识变更。
在检查点完成之后,此检查点之前修改过的数据都已经写回磁盘,重做日志文件中的相应重做记录对于崩溃/实例恢复不再有用。如果此后数据库崩溃,那么恢复只需要从最后一次完成的检查点开始恢复即可。如果数据库运行在归档模式(所有生产数据库,都建议运行在归档模式),日志文件在重用之前必须写出到归档日志文件,归档日志在介质恢复时可以用来恢复数据库故障。
1. 建议创建5组redo log文件,每组2个成员并分别放到不同的磁盘上。
2. 检查点
检查点到了会触发DBWR进程将数据库数据高速缓冲区的数据写入到datafile中
fast_start_mttr_target参数设置预期期望的instance恢复的时长,一般都不用。
一般都是用log_checkpoint_timeout参数设置检查点的执行周期。
手工执行检查点:alter system checkpoint; 一般在做数据库维护的时候用。
3. 强制执行日志切换
强制地执行日志切换,以使当前的日志组由活动状态变为不活动状态。这样做的目的是可以对该日志执行一系列的维护操作。
alter system switch logfile;
4. 增加联机重做日志组和成员
SQL>connect / as sysdba
SQL> alter database add logfile [group 3] ‘/db/cyy/redo03a.log’ size 4m; 添加组
SQL>alter database add logfile member ‘/db/cyy/redo03b.log’ to group 3; 添加组成员
5. 删除日志组
删除规则:当数据库中只剩下2个日志组时,不能删除任一个日志组;不能删除处于活动状态的日志组。
alter database drop logfile group 3;
alter database drop logfile ‘/db/cyy/redo03a.log’;
6. 删除日志组成员
删除规则:如果日志组只有一个成员,不能删除;如果日志组处于活动状态,不能删除。
alter database drop logfile member ’/db/cyy/redo03a.log’;
7. 重命名日志成员
connect / as sysdba
cp [source_logfile] [desc_lofile]
alter database rename file [source_logfile] to [desc_lofile];
8. 与logfile相关的一些视图
select * from v$logfile;
select * from v$log;
select * from v$log_history;
在数据库中,Redo的功能主要通过3个组件来实现:Redo Log Buffer、LGWR后台进程和Redo Log File(在归档模式下,Redo Log File最终会写出为归档日志文件)
在Oracle的SGA中,存在一块共享内存,称为Redo Log Buffer。
Redo Log Buffer位于SGA之中,是一块循环使用的内存区域,其中保存数据库变更的相关信息。这些信息以重做条目(Redo Entries)形式存储(Redo Entries也经常被称为Redo Records)。Redo Entries包含重构、重做数据库变更的重要信息,这些变更包括INSERT、UPDATE、DELETE、CREATE、ALTER或者DROP等。在必要的时候Redo
Entries被用于数据库恢复。
Redo Entries的内容被Oracle数据库进程从用户的内存空间复制到SGA中的Redo Log Buffer之中。Redo Entries在内存中占用连续的顺序空间,由于Redo Log Buffer是循环使用的,Oracle通过一个后台进程LGWR不断地把Redo Log Buffer的内容写出到Redo Log File中。
当用户在Buffer Cache中修改数据时,Oracle并不会立即将修改数据写出到数据文件上,因为那样做效率会很低,到目前为止,计算机系统中最繁忙的部分是磁盘的I/O操作,Oracle这样做的目的是为了减少IO的次数,当修改过的数据达到一定数量之后,可以进行高效地批量写出。
大部分传统数据库(当然包括Oracle)在处理数据修改时都遵循no-force-at-commit策略。也就是说,在提交时并不强制写。那么为了保证数据在数据库发生故障时(例如断电)可以恢复,Oracle引入了Redo机制,通过连续的、顺序的日志条目的写出将随机的、分散的数据块的写出推延。这个推延使得数据的写出可以获得批量效应的性能提升.
同Redo Log Buffer类似,Redo Log File也是循环使用的,Oracle允许使用最少两个日志组。缺省情况下,数据库创建时会建立3个日志组。
SQL> select group#,members,status from v$log;
GROUP# MEMBERS STATUS
---------- ---------- ----------------
1 1 INACTIVE
2 1 CURRENT
3 1 INACTIVE
当一个日志文件写满之后,会切换到另外一个日志文件,这个切换过程称为Log Switch。Log Switch会触发一个检查点,促使DBWR进程将写满的日志文件保护的变更数据写回到数据库。在检查点完成之前,日志文件是不能够被重用的。
由于Redo机制对于数据的保护,当数据库发生故障时,Oracle就可以通过Redo重演进行数据恢复。那么一个非常重要的问题是,恢复应该从何处开始呢?
如果读取的Redo过多,那么必然导致恢复的时间过长,在生产环境中,我们必需保证恢复时间要尽量得短。Oracle通过检查点(Checkpoint)来缩减恢复时间。检查点只是一个数据库事件,它存在的根本意义在于减少恢复时间。
当检查点发生时(此时的SCN被称为Checkpoint SCN)Oracle会通知DBWR进程,把修改过的数据,也就是此Checkpoint SCN之前的脏数据(Dirty Buffer)从Buffer Cache写入磁盘,在检查点完成后CKPT进程会相应地更新控制文件和数据文件头,记录检查点信息,标识变更。
在检查点完成之后,此检查点之前修改过的数据都已经写回磁盘,重做日志文件中的相应重做记录对于崩溃/实例恢复不再有用。如果此后数据库崩溃,那么恢复只需要从最后一次完成的检查点开始恢复即可。如果数据库运行在归档模式(所有生产数据库,都建议运行在归档模式),日志文件在重用之前必须写出到归档日志文件,归档日志在介质恢复时可以用来恢复数据库故障。
1. 建议创建5组redo log文件,每组2个成员并分别放到不同的磁盘上。
2. 检查点
检查点到了会触发DBWR进程将数据库数据高速缓冲区的数据写入到datafile中
fast_start_mttr_target参数设置预期期望的instance恢复的时长,一般都不用。
一般都是用log_checkpoint_timeout参数设置检查点的执行周期。
手工执行检查点:alter system checkpoint; 一般在做数据库维护的时候用。
3. 强制执行日志切换
强制地执行日志切换,以使当前的日志组由活动状态变为不活动状态。这样做的目的是可以对该日志执行一系列的维护操作。
alter system switch logfile;
4. 增加联机重做日志组和成员
SQL>connect / as sysdba
SQL> alter database add logfile [group 3] ‘/db/cyy/redo03a.log’ size 4m; 添加组
SQL>alter database add logfile member ‘/db/cyy/redo03b.log’ to group 3; 添加组成员
5. 删除日志组
删除规则:当数据库中只剩下2个日志组时,不能删除任一个日志组;不能删除处于活动状态的日志组。
alter database drop logfile group 3;
alter database drop logfile ‘/db/cyy/redo03a.log’;
6. 删除日志组成员
删除规则:如果日志组只有一个成员,不能删除;如果日志组处于活动状态,不能删除。
alter database drop logfile member ’/db/cyy/redo03a.log’;
7. 重命名日志成员
connect / as sysdba
cp [source_logfile] [desc_lofile]
alter database rename file [source_logfile] to [desc_lofile];
8. 与logfile相关的一些视图
select * from v$logfile;
select * from v$log;
select * from v$log_history;
相关文章推荐
- Oracle 联机重做日志文件OnlineRedoLogFile
- 调整联机重做日志大小(change redo log size)
- Oracle 联机重做日志文件OnlineRedoLogFile 推荐
- oracle 重做联机日志文件 七步重建redo联机日志 五分钟重建redo日志重建
- 丢失当前的联机重做日志文件(redo文件)
- oracle 联机重做日志文件(online redo log file)
- Oracle为何会发生归档日志archivelog大小远小于联机重做日志online redo log size的情况?
- Oracle为何会发生归档日志archivelog大小远小于联机重做日志online redo log size的情况?
- Online Redo Log File(联机重做日志)
- oracle 联机重做日志文件(online redo log file)
- Oracle 联机重做日志文件(ONLINE LOG FILE)
- 联机重做日志的配置过程
- Oracle 联机重做日志文件(ONLINE LOG FILE)
- 估算的redo重做日志产生量
- rman实验之归档模式无备份,正常关机丢失当前联机重做日志文件的恢复
- rman恢复之丢失非当前联机重做日志文件(读书笔记)
- 理解redo(8)redo和undo的一点关系及删除联机日志文件组的注意事项
- ORACLE归档日志比联机重做日志小很多的情况总结
- Oracle使用MF来管理数据库的联机重做日志
- oracle12c 管理联机重做日志