Oracle数据库在运行当中,用户更改的数据首先会存放在数据库高速缓冲区当中,为了提升磁盘读写,oracle机制不会频繁的将缓冲区的数据写到磁盘,而是等到检查点或者数据高速缓冲区达到一定数量时才会写入数据库文件;倘若在检查点或者数据量等条件还没满足系统就挂了,那么此时用户提交的数据就会丢失,因为数据还在内存里,为了防止数据丢失,oracle提出了重做日志。
重做日志的目的是用来做数据恢复的,LGWR进程负责优先把用户更改的数据写到重做日志文件中。
LGWR的触发条件:
在事务提交的时候(COMMIT)
Redo Log Buffer 三分之一满
Redo Log Buffer 多于一兆的变化记录
在DBWn写入数据文件之前
如果数据库开启了归档(查看是否归档archive log list),那么重做日志会在写满后,关闭当前日志文件并把重做日志文件中的内容移动到归档文件中,归档完毕后轮询下一组可用重做日志组;也叫归档重做日志。
查看系统当前的重做日志文件信息
如上图数据库有5个日志组,每组日志组有2个日志成员;目测数据库开启了归档模式,当前正在使用的重做日志为第4组重做日志;
查看重做日志文件位置
重做日志组内的每一个重做日志文件称为一个成员,一个组内的每一个成员具有相同的日志序列号(log sequence number)并且成员的文件大小相同。
来个自画原理图
在实际生产中,会需要添加多个重做日志组,且每个日志组至少有一个以上的重做日志成员,并存放于不同的磁盘分区。
实战:添加重做日志组和日志成员。
alter database add logfile group 6 ('/u01/app/oracle/oradata/orcl/redo0601.log','/u01/app/oracle/oradata/orcl/redo0602.log') size 5M;
以上添加一个重做日志组6,重做日志成员有两个redo0601.log和redo0602.log都为5M大小。
查看刚才添加的日志组使用情况,新添加的是未使用Unused
实战:删除重做日志组
alter database drop logfile group 6——若active状态不可删除
重做日志组有六种状态:
UNUSED : 表示该联机重做日志文件组对应的文件还从未被写入过数据,通常是刚刚创建的联机重做日志文件或重建后的联机重做日志文件。
CURRENT : 表示当前正在使用的日志文件组。该联机重做日志组是活动的。
ACTIVE : 表示该组是活动的但不是当前组,实例恢复时需要这组日志。如果处于这一状态,表示虽然当前并未使用,文件中的数据没有全部写入数据文件,一旦需要实例恢复,必须借助该文件中保存的内容。可以是已归档或没归档。
INACTIVE: 表示实例恢复已不再需要这组联机重做日志组了,文件中的数据全部写入数据文件。该组联机重做日志当前处于空闲状态。可以是已归档或没归档。
CLEARING:在执行了 ALTER DATABASE CLEAR LOGFILE 后,表示该组重做日志文件正被重建(重建后该状态会变成UNUSED)。
CLEARING_CURRENT:表示该组重做日志重建时出现错误,如io错误。
实战:添加重做日志成员
alter database add logfile member '/u01/app/oracle/oradata/orcl/redo0603.log' to group 6
实战:删除重做日志成员
alter database drop logfile member '/u01/app/oracle/oradata/orcl/redo0603.log'
实战:切换日志
执行:alter system switch logfile
切换后变成当前可用状态
如果要重设重做日志文件大小,需要删除日志组重建重做日志组并设置新的重做成员大小;
1.alter database drop logfile group 6
2.alter database add logfile group 6 ('/u01/app/oracle/oradata/orcl/redo0603.log') size 100M
如果无法删除重做日志组,请执行alter system switch logfile(可以多次执行切换)并查看日志组状态,如果为INACTIVE则可以删除;也可以执行alter database checkpoint,此检查点的功能是LGWR进程把重做日志缓冲区数据写入重做日志文件中,同时通知DBWR进程将数据库高速缓冲区提交的数据写入数据文件中。
重做日志的目的是用来做数据恢复的,LGWR进程负责优先把用户更改的数据写到重做日志文件中。
LGWR的触发条件:
在事务提交的时候(COMMIT)
Redo Log Buffer 三分之一满
Redo Log Buffer 多于一兆的变化记录
在DBWn写入数据文件之前
如果数据库开启了归档(查看是否归档archive log list),那么重做日志会在写满后,关闭当前日志文件并把重做日志文件中的内容移动到归档文件中,归档完毕后轮询下一组可用重做日志组;也叫归档重做日志。
查看系统当前的重做日志文件信息
![Oracle的重做日志](https://i-blog.csdnimg.cn/blog_migrate/09be08d1b31eff595455422f0446adcf.png)
如上图数据库有5个日志组,每组日志组有2个日志成员;目测数据库开启了归档模式,当前正在使用的重做日志为第4组重做日志;
查看重做日志文件位置
![Oracle的重做日志](https://i-blog.csdnimg.cn/blog_migrate/c5154edde6b3bba4b07dc88c6f1bb63c.png)
重做日志组内的每一个重做日志文件称为一个成员,一个组内的每一个成员具有相同的日志序列号(log sequence number)并且成员的文件大小相同。
![Oracle的重做日志](https://i-blog.csdnimg.cn/blog_migrate/88c7db11d00330f51b62a75026dd944e.png)
来个自画原理图
![Oracle的重做日志](https://i-blog.csdnimg.cn/blog_migrate/234b19f3a1035e0a20640fad09a768ce.png)
在实际生产中,会需要添加多个重做日志组,且每个日志组至少有一个以上的重做日志成员,并存放于不同的磁盘分区。
实战:添加重做日志组和日志成员。
alter database add logfile group 6 ('/u01/app/oracle/oradata/orcl/redo0601.log','/u01/app/oracle/oradata/orcl/redo0602.log') size 5M;
![Oracle的重做日志](https://i-blog.csdnimg.cn/blog_migrate/380855cf16f483939b685b5314a03dd8.png)
以上添加一个重做日志组6,重做日志成员有两个redo0601.log和redo0602.log都为5M大小。
查看刚才添加的日志组使用情况,新添加的是未使用Unused
![Oracle的重做日志](https://i-blog.csdnimg.cn/blog_migrate/42ebbf863f2f9dd08da3c08cc5ec03b8.png)
实战:删除重做日志组
alter database drop logfile group 6——若active状态不可删除
重做日志组有六种状态:
UNUSED : 表示该联机重做日志文件组对应的文件还从未被写入过数据,通常是刚刚创建的联机重做日志文件或重建后的联机重做日志文件。
CURRENT : 表示当前正在使用的日志文件组。该联机重做日志组是活动的。
ACTIVE : 表示该组是活动的但不是当前组,实例恢复时需要这组日志。如果处于这一状态,表示虽然当前并未使用,文件中的数据没有全部写入数据文件,一旦需要实例恢复,必须借助该文件中保存的内容。可以是已归档或没归档。
INACTIVE: 表示实例恢复已不再需要这组联机重做日志组了,文件中的数据全部写入数据文件。该组联机重做日志当前处于空闲状态。可以是已归档或没归档。
CLEARING:在执行了 ALTER DATABASE CLEAR LOGFILE 后,表示该组重做日志文件正被重建(重建后该状态会变成UNUSED)。
CLEARING_CURRENT:表示该组重做日志重建时出现错误,如io错误。
实战:添加重做日志成员
alter database add logfile member '/u01/app/oracle/oradata/orcl/redo0603.log' to group 6
实战:删除重做日志成员
alter database drop logfile member '/u01/app/oracle/oradata/orcl/redo0603.log'
实战:切换日志
![Oracle的重做日志](https://i-blog.csdnimg.cn/blog_migrate/799b5dc1ab4fae93137e1501abfc4715.png)
执行:alter system switch logfile
![Oracle的重做日志](https://i-blog.csdnimg.cn/blog_migrate/23df784eb5d0f860cef134bacba3c6ca.png)
切换后变成当前可用状态
![Oracle的重做日志](https://i-blog.csdnimg.cn/blog_migrate/aa58e5c0d7e1c8cd2c0cf2e2031ba552.png)
如果要重设重做日志文件大小,需要删除日志组重建重做日志组并设置新的重做成员大小;
1.alter database drop logfile group 6
2.alter database add logfile group 6 ('/u01/app/oracle/oradata/orcl/redo0603.log') size 100M
如果无法删除重做日志组,请执行alter system switch logfile(可以多次执行切换)并查看日志组状态,如果为INACTIVE则可以删除;也可以执行alter database checkpoint,此检查点的功能是LGWR进程把重做日志缓冲区数据写入重做日志文件中,同时通知DBWR进程将数据库高速缓冲区提交的数据写入数据文件中。
本文转自 rm_rf_db 51CTO博客,原文链接:http://blog.51cto.com/12185273/2054957,如需转载请自行联系原作者