Oralce重做日志(Redo Log)

1.简介

Oracle引入重做日志的目的:数据库的恢复。

Oracle相关进程:重做日志写进程(LGWR)。

重做日志性质:联机日志文件,oracle服务器运行时需要管理它们。

相关数据字典:v$log ; v$logfile 。

操作者权限:具有sys用户或system用户权限。

重做日志文件:

日志文件的数据文件类型:在线日志文件(又叫联机日志)与归档日志文件(在线日志文件的历史备份),每个重做日志组中有一个或多个重做日志文件。每个势力至少要有两个重做日志组。

日志运行的模式:归档模式、非归档模式(是否自动归档)

日志的运行流程:写文件是依靠LGWR后台进程

日志按照有序循环的方式被使用,即当一组日志文件被填满后,循环覆盖下一组日志文件,不断循环。

重做日志文件的目的:1. 记录数据的改变 2. 提供数据恢复 3. 维护数据库完整性。

2. 什么是Oracle归档模式?

Oracle数据库有联机重做日志,这个日志是记录对数据库所做的修改,比如插入,删除,更新数据等,对这些操作都会记录在联机重做日志里。一般数据库至少要有2个联机重做日志组。当一个联机重做日志组被写满的时候,就会发生日志切换,这时联机重做日志组2成为当前使用的日志,并且把这些文件分布在不同的物理磁盘,当联机重做日志组2写满的时候,又会发生日志切换,去写联机重做日志组1,就这样反复进行。

,当前在使用联机重做日志如果数据库处于非归档模式,联机日志在切换时就会丢弃. 而在归档模式下,当发生日志切换的时候,被切换的日志会进行归档。比如1,当1写满的时候,发生日志切换,开始写联机重做日志 2,这时联机重做日志1的内容会被拷贝到另外一个指定的目录下。这个目录叫做归档目录,拷贝的文件叫归档重做日志。 数据库使用归档方式运行时才可以进行灾难性恢复。

归档日志模式和非归档日志模式的区别: 非归档模式只能做冷备份,并且恢复时只能做完全备份.最近一次完全备份到系统出错期间的数据不能恢复. 归档模式可以做热备份,并且可以做增量备份,可以做部分恢复. 用ARCHIVE LOG LIST 可以查看期模式状态时归档模式还是非归档模式.

3. 重做日志工作原理

后台进程LGWR负责把重做日志缓冲区中的日志条目写到重做日志文件中。当用户提交一个事务时,LGWR把这个事务的重做条目写入到重做日志文件,并赋予一个标识符(System change number SCN),SCN用于标识事务的重做日志条目。只有当事务的“重做日志条目”被成功写入到磁盘上的重做日志文件中,事务的提交才算完成。

以下情况LGWR会自动把重做日志缓冲区的日志条目写入到重做日志文件中:

》每隔3秒钟

》一个用户提交一个事务

》日志缓冲区(Redo Log Buffer)被填满三分之一

》日志缓冲区将有1MB的日志数据

》发生校验点checkpoint

以下情况发生check point:
a.每次日志切换时
b.实例通过normal,transactional,immediate选项关闭时
c.通过设置初始化参数FAST_START_MTTR_TARGET强制发生
d.数据库管理员手工设置ALTER SYSTEM CHECKPOINT、alter tablespace ,datafile offline
e.使用alter tablespace[OFFLINE NORMAL|READ ONLY|BEGIN
BACKUP] 语句导致指定数据文件发生检查点
注:如果参数LOG_CHECKPOINTS_TO_ALERT
设置为true,则每次检查点信息将记录在alert_SID.log文件中.

4.重做日志状态

Current
表示正在LGWR写的重做日志组

Active
表示重做日志组记录的改变还没有写入到数据文件中,实例恢复时需要用到Active的重做日志组;

Inactive表示实例恢复时不需要状态为inactive的重做日志组;

Unused表示该重做日志组是新建的,还未被使用;

5. 实例恢复

如果数据库突然断电,对数据库的改变没有真正写入到数据库文件中,但是Oracle保证对数据库的改变已经记录到重做日志文件中。例程失败类似于执行SHUTDOWN ABORT命令关闭数据库,解决了硬件问题和电源断电等问题之后,DBA只需要执行STARTUP命令启动例程就可以了,而不需要执行任何恢复命令。当执行STARTUP命令启动例程并装载了数据库之后,后台进程SMON会自动执行例程恢复,最终使数据库所有文件(数据文件、控制文件、重做日志)完全同步。实例恢复会自动把记录在重做日志文件中的改变应用到数据文件中,就不会有数据的丢失

6. 重做日志组操作

1.1   
 数据库日志归档操作

1. 查看oracle数据库是否为归档模式:

SQL> select name,log_mode from v$database;

NAME LOG_MODE
--------- ------------
PTLDB NOARCHIVELOG

2.查看数据库中的重做日志组

SQL> select * from v$log;

GROUP#  THREAD# SEQUENCE#  BYTES  MEMBERS
ARC  STATUS  FIRST_CHANGE# FIRST_TIME

1        1          1558 
315392000            1  NO   INACTIVE   
  459785223 20-JUL-14

2        1          1559 
315392000            1  NO
  CURRENT   
  460781485 21-JUL-14

3        1          1557 
315392000            1  NO
  INACTIVE  
   458700182 19-JUL-14

3.查看数据库中的重做日志文件

知道有哪些重做日志文件,以及每个重做日志文件属于哪一组。

SQL> select * from v$logfile;

GROUP#  STATUS 
TYPE   MEMBER                                   IS_

3       ONLINE       
/opt/oracle/oradata/ptldb/redo03.log       NO

2       ONLINE       
/opt/oracle/oradata/ptldb/redo02.log       NO

1       ONLINE       
/opt/oracle/oradata/ptldb/redo01.log       NO

4.创建重做日志组

ALTER DATABASE ADD LOGFILE GROUP 4
(‘/dev/rlv_vgdb9_data22‘,‘/dev/rlv_vgdb9_data23‘,‘/dev/rlv_vgdb9_data24‘) SIZE
8191m;
--这样,就最增一个日志组,且这个日志组里有3个成员每个成员8191MB大小。

5:给某个日志组新增一个成员
ALTER
DATABASE ADD LOGFILE MEMBER ‘/dev/rlv_vgdb9_data25‘ TO GROUP 4;
--注意,这里不需要指定日志组成员的大小。
6:删除日志组
ALTER
DATABASE DROP LOGFILE GROUP 4;
--注意:当前日志组不能删,活动的日志组不能删,没有归档的日志组不能删。
7:删除日志组成员
ALTER
DATABASE DROP LOGFILE MEMBER ‘/dev/rlv_vgdb9_data25‘;
--注意:每个组至少要保留一个成员;

8.改变重做日志组的状态

Alter system switch
logfile;

从Active状态变为Inactive状态

Alter system checkpoint;

配置数据库的归档模式

改变非归档模式到归档模式:

1)SQL>SHUTDOWN NORMAL/IMMEDIATE;

2)SQL>START MOUNT;

3)SQL>ALTER DATABASE ARCHIVELOG;

4)SQL>ALTER DATABASE OPEN;

5)SQL>做一次完全备份,因为非归档日志模式下产生的备份日志对于归档模式已经不可用了.这一步非非常重要!

改变归档模式到非归档模式:

1)SQL>SHUTDOWN NORMAL/IMMEDIATE;

2)SQL>START MOUNT;

3)SQL>ALTER DATABASE NOARCHIVELOG;

4)SQL>ALTER DATABASE OPEN;

3.启用自动归档: LOG_ARCHIVE_START=TRUE

归档模式下,日志文件组不允许被覆盖(重写),当日志文件写满之后,如果没有进行手动归档,那么系统将挂起,知道归档完成为止.

这时只能读而不能写.

运行过程中关闭和重启归档日志进程

SQL>ARCHIVE LOG STOP

SQL>ARCHIVE LOG START

4.手动归档: LOG_ARCHIVE_START=FALSE

归档当前日志文件

SQL>ALTER SYSTEM
ARCHIVE LOG CURRENT;

归档序号为052的日志文件

SQL>ALTER SYSTEM
ARCHIVE LOG SEQUENCE 052;

归档所有日志文件

SQL>ALTER SYSTEM
ARCHIVE LOG ALL;

改变归档日志目标

SQL>ALTER SYSTEM
ARCHIVE LOG CURRENT TO ‘&PATH‘;

1.2   
 日志切换

ALTER SYSTEM SWITCH LOGFILE;
--所谓日志切换就是停止写当前组,转而写一个新组,系统可以自动发生,也可以手工完成。
--当发生SWITCH LOGFILE时,系统会在后台完成CHECKPOINT的操作
--手动切换日志组
--日志组A:当前正在写。
--日志组B:可写。
--CHECKPOINT保证控制文件,数据文件头,日志文件头的SCN一致是数据库保持数据完整性的一个重要机制
--手动切换日志组后,ORACLE开始往日志组B写日志,并进行一次CHECKPOINT,把日志组A里没有经过CHECKPOINT的那部分日志对应的DIRTY
BUFFER从BUFFER CACHE里写到
--数据文件里。CHECKPOING完成后
--日志组A:可写。
--日志组B:当前正在写。
--另外,ALTER TABLESPACE USER
BEGIN BACKUP,DROP TABLE,TRUNCATE TABLE都会引发CHECKPOINT操作
--除了以上所手动,及自动CHECKPOINT之外,还可以通过一些参数来控制CHECKPOINT
--FAST_START_MTTR_TARGET(MTTR:数据恢复的时间间隔)
--checkpoints用来同步,同步频率越高,发生系统错误时所需RECOVERY时间越短
--同步相关的参数:FAST_START_MTTR_TARGET(数据库通过它来改变后面3个参数),fast_start_io_target,log_checkpoint_interval,log_checkpoint_timeout

Oralce重做日志(Redo Log)

时间: 2024-10-12 21:04:22

Oralce重做日志(Redo Log)的相关文章

Oracle重做日志REDO

什么是重做? 重做日志包含所有数据产生的历史改变记录. 重做日志目的是保证数据的安全,如果数据因特殊原因没有写到磁盘上,可以通过重做日志来恢复. 重做日志文件通常用于 恢复(实例恢复和介质恢复) 日志挖掘:可以通过oracle工具分析日志里面的内容 流:通过分析redo,从redo获取实时数据,应用到远程数据库. 数据库产生的每个改动: 写入数据库缓存之前,先写入重做日志--内存 写入数据文件之前先写入日志文件 ----数据文件 内存里操作,重做日志的内存区叫Redo buffer 当提交后,日

MySQL-重做日志 redo log -原理

[redo log buffer][redo log file]-原理 目录: 1.重做日志写入过程图 2.相关知识点汇总图 3.redo_log_buffer 原理 4.redo_log_file 原理 1. 重做日志写入过程: 2. 相关知识点汇总: 3. redo log buffer 原理 重做日志缓冲(redo log buffer)是Innodb存储引擎的内存区域中的一部分. [重做日志信息--(1)-->redo log buffer--(2)-->重做日志文件] 在(2)中涉及

MySQL的日志(二):事务日志(redo log和undo log)

本文目录:1.redo log 1.1 redo log和二进制日志的区别 1.2 redo log的基本概念 1.3 日志块(log block) 1.4 log group和redo log file 1.5 redo log的格式 1.6 日志刷盘的规则 1.7 数据页刷盘的规则及checkpoint 1.8 LSN超详细分析 1.9 InnoDB的恢复行为 1.10 和redo log相关的变量2.undo log 2.1 undo log的基本概念 2.2 undo log的存储方式

mysql日志redo log 和binlog

在上一篇中我们说到了mysql的基础架构,通常一个查询操作只会涉及到基础架构中的那几部分: 首先连接数据库,分析器进行语义.语法分析,优化器生成执行计划和索引选择.执行器执行对应的语句.存储引擎查看内存中是否有对应的数据,有的话直接返回,没有的话从磁盘查找(不考虑查询缓存):但是对于更新操作的话还需要用到日志来辅助 日志的作用:1.数据恢复需要用到binlog 2.数据库重启后需要redo log来保证数据的可靠,会出现数据还没写入磁盘服务器异常重启的情况 一.redo log(重做log) 由

mysql物理日志redo log和逻辑日志 binlog

1.redo log(InnoDB引擎特有的日志)1.1.有了 redo log,InnoDB 就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为 crash-safe.具体来说,当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log里面,并更新内存,这个时候更新就算完成了.同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做1.2.innodb_flush_log_at_trx_commit

重做日志与归档日志区别

重做日志redo log file是LGWR进程从Oracle实例中的redo log buffer写入的,是循环利用的.就是说一个redo log file(group) 写满后,才写下一个.归档日志archive log是当数据库运行在归档模式下时,一个redo log file(group)写满后,由ARCn进程将重做日志的内容备份到归档日志文件下,然后这个redo log file(group)才能被下一次使用. 不管数据库是否是归档模式,重做日志是肯定要写的.而只有数据库在归档模式下,

[转] 增大oracle重做日志的大小

重做日志(redo log)是由LGWR来进行控制的.Oracle对于DML操作数据的时候,并不会马上去修改数据块,而是产出redo记录,并记录到联机的redo log里,当redo Log用满,或者启动全局checkpoint,也或者alter system switch logfile; 这时都会切换redo log group,(如果redo log状态为current,是当前redo log,如果是inactive就是已经有DBWN写入数据块,Inactive还没有写入)redo log

Oracle 联机重做日志文件(ONLINE LOG FILE)

--========================================= -- Oracle 联机重做日志文件(ONLINE LOG FILE) --========================================= 一.Oracle中的几类日志文件 Redo log files      -->联机重做日志 Archive log files   -->归档日志 Alert log files     -->告警日志 Trace files        

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