oracle_重做日志文件--笔记

重做日志文件(redo log file)

目录
       重做日志文件相关。
       重做日志文件简介。
       查询重做日志文件的信息。
       日志切换。
       管理日志文件组
       增删日志文件组。
       增删日志文件成员。
       归档与非归档模式。

一.重做日志文件相关。
    
    Oracle引入重做日志的目的:数据库的恢复。
    Oracle相关进程:重做日志写进程(LGWR)。
    重做日志性质:联机日志文件,oracle服务器运行时需要管理它们。
    相关数据字典:v$log ; v$logfile。
    操作者权限:具有sys用户或system用户权限。

1.1重做日志文件的规划。
(于网络上收集)
联机日志文件的规划原则如下:
1:分散放开,多路复用。一般会将同一组的不同日志成员文件放到不同的磁盘或不同的裸设备上。以提高安全性。
2:把重做日志放在速度最快的硬盘上(即:日志所在的磁盘应当具有较高的I/O),一般会将日志文件放在裸设备上。
3:把重做日志文件设为合理大小:例如,增大日志文件大小可以加快一些大型的INSERT、UPDATE、DELETE操作,也能降低日志文件切换频率。减少一些日志等待事件。一般根据具体业务情况有所不同。一般日志组大小应满足自动切换间隔至少15-20分钟左右业务需求
4:ORACLE推荐,同一个重做日值组下的所有重做日志文件大小、成员个数一致.

二.重做日志文件简介。
      2.1重做日志
      重做日志文件又叫联机日志文件,记录了对数据库修改的信息,包括用户对数据修改和数据库管理员对数据库结构的修改。

2.2重做日志的作用。
      它主要用于在oracle发生故障的时候和数据库备份文件配合恢复数据库。
      一般来说,数据库故障丢失数据,有两种情况。
      一是,因为停电或死机,脏块未写入磁盘,造成该数据丢失。
      二是,磁盘损坏,数据全完蛋。
       对应第一种情况,oracle会使用实例恢复,使用重做日志自动恢复数据,不需要用户干预。没错,实例恢复,它是自动的。
       对应第二种情况,便需要DBA使用备份,重做日志,归档日志来恢复数据了。下面有讲恢复的步骤。
       
       2.3重做日志文件的组织概念。

重做日志是以组为单位管理。每个数据库至少有两个日志文件组,每组至少包含1个或者多个日志文件成员,且日志文件成员的内容大小一致。(多个成员,内容一致的原因是,在日志文件损坏时,能及时提高备份恢复。)

----------------------------------------------------------------------------------------------------------------------------
注意!   组里的日志文件分别存储在不同的分区上, 若有一个日志文件出现问题时,并不会影响其他分区的日志文件。
             oracle只对可用的日志文件写入数据,并将出问题的成员标记为invalid,同时把错误信息记录到控制文件和警告文件去。
             这样对数据库的运行没有影响。        
----------------------------------------------------------------------------------------------------------------------------

联机重做日志文件是循环使用的(见下图)。当第一个日志文件达到一定数量时,就会停止写入,而转向第二个日志文件,第二个满转向第三个日志文件.第三个满就向第一个日志文件写入。
       而第一个日志文件有没有自动备份就涉及到归档或者不归档的问题.当数据库自动对原来的日志文件进行备份的话就叫归档模式,不需要对数据库进行自动备份就叫非归档模式。

----------------------------------------------------------------------------------------------------------------------------
注意!   负责把日志信息写入日志文件的进程,是LGWR    (日志写进程)。每次对数据的DML操作,都会生成日志信息,
             存储在log buffer(日志缓存区) 里,再由一些情况触发LGWR进程把日志信息写入redo logfile。     
----------------------------------------------------------------------------------------------------------------------------

什么情况会触发LGWR    写日志呢?

◆ 当发出commit命令的时候
◆ 当log buffer的空间写满到1/3的时候或者当log buffer的空间写满1MB的记录的时候
◆ 当每3秒钟超时的时候    (周期性)
◆ 当DBWn需要写入数据文件的操作之前的时候  (DBWn,负责把内存区中的数据写入数据文件的进程。重要的一个进程)
◆ 当切换日志文件的时候

三.查询重做日志文件的信息。

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

3.1 v$log     记录数据库中有多少个重做日志组,每个组中有多少个成员、日志大小及状态。

SQL> desc v$log
 Name                                  
 ----------------------------
 GROUP#                                   --日志文件组号#        
 THREAD#                                  
 SEQUENCE#                              --序号       
 BYTES                                        --大小      
 BLOCKSIZE                                       
 MEMBERS                                  --组成员数量          
 ARCHIVED                                           
 STATUS                                     --状态        
 FIRST_CHANGE#                                     
 FIRST_TIME                                         
 NEXT_CHANGE#                                     
 NEXT_TIME

SQL> select group#,sequence#,bytes/1024/1024 sizeMB,members,status from v$log;

GROUP#  SEQUENCE#     SIZEMB    MEMBERS STATUS
---------- ---------- ---------- ---------- ----------------
         1         28         50          1 INACTIVE
         2         29         50          1 CURRENT
         3         27         50          1 INACTIVE

status     -----状态表示的含义。

inactive:表示实例恢复已不再需要这组联机重做日志组了。
         active:表示该组是活动的但不是当前组,实例恢复时需要这组日志。
         current:表示该组日志是当前组,该联机重做日志组是活动的。
         unused:表示该日志组从未写过,是重做日志刚刚添加到状态。

3.2  v$logfile    如名,记录着每个日志组成员的属性。路径,文件名,状态等。

SQL> desc v$logfile
 Name                                      
 ------------------------
 GROUP#                                 ----文件组      
 STATUS                                   ----状态                      (与v$log不同)          
 TYPE                                        ---类型       
 MEMBER                                  ---成员数量           
 IS_RECOVERY_DEST_FILE

SQL> select group#,status,type,member from v$logfile;

GROUP# STATUS  TYPE    MEMBER
---------- ------- ------- ---------------------------------------------
         3         ONLINE  /home/app/oracle/oradata/orcl/redo03.log
         2         ONLINE  /home/app/oracle/oradata/orcl/redo02.log
         1         ONLINE  /home/app/oracle/oradata/orcl/redo01.log

status     -----状态表示的含义。

空白:表示该文正在使用。
       stale:表示该文件中的内容是不完全的。
        invalid:表示该文件是不可以被访问的。
       deleted:表示该文件已不再有用了。

四。日志切换。

上面提到重做日志是循环使用的,当一组联机重做日志文件被写满时,LGWR将开始写下一组日志文件,这被称为日志切换。
你也可以任何时候,手动日志切换。

强制重做日志切换命令: alter system switch logfile;

------------
实验!
------------
1.当前的日志组是3。
SQL> select group#,sequence#,bytes/1024/1024 MB,members,status,first_change# from v$log;
    GROUP#  SEQUENCE#         MB    MEMBERS STATUS           FIRST_CHANGE#
---------- ---------- ---------- ---------- ---------------- -------------
         1         28         50          1 INACTIVE               1164439
         2         29         50          1 INACTIVE               1188272
         3         30         50          1 CURRENT                1192137

2.alter system switch logfile 日志切换后、(注意!日志切换,SCN(system change number)会发生改变。)
SQL> select group#,sequence#,bytes/1024/1024 MB,members,status,first_change# from v$log;
    GROUP#  SEQUENCE#         MB    MEMBERS STATUS           FIRST_CHANGE#
---------- ---------- ---------- ---------- ---------------- -------------
         1         31         50          1 CURRENT                1193775
         2         29         50          1 INACTIVE               1188272
         3         30         50          1 ACTIVE                 1192137

五。管理日志文件组。

5.1增加和删除日志组。

5.1.1增加一个日志组。

新添加一个日志组的语句:
    alter database add logfile group {组编号}      --不加group 参数,会默认依序编号. 
    (‘路径01.log‘,‘路径02.log‘,‘路径03.log‘)
    size 大小
 
下面是一个实例:
SQL> alter database add logfile group 4
  2  (‘/oracle1/redo4_01.log‘,‘/oracle1/redo4_02.log‘)
  3  size 10m
  4  /
----添加了日志组4,有两个个成员,大小统一10m。

5.1.2删除一个日志组。

删除日志组的语句:
alter database drop logfile group [组号];

下面是一个实例:
SQL> alter database drop logfile group 4;
Database altered.

----------------------------------------------------------------------------------------------------------------------------
注意!   1.日志组被删除时,并同时删除日志文件,要手动在操作系统上删除。不然,只会留下一堆垃圾文件占用磁盘。
             2.CURRENT  状态的日志组不能被删除,必须手动切换当前日志组才能删除。
             3.确保你的oracle上至少拥有两组以上的日志组。
             4.生产环境中,删除日志组时,确保你的日志组先归档。
----------------------------------------------------------------------------------------------------------------------------

5.2增加和删除和移动日志成员。

5.2.1增加一个日志成员。

语句:
alter database 
add logfile member ‘路径.log‘
to group {组号}

下面一个实列:
SQL> alter database
  2  add logfile member ‘/oracle1/redo4_o3.log‘
  3  to group 3
  4  /

---给日志组3,添加了一个日志成员。不需要指定size,oracle会根据其他成员大小默认。

5.2.2删除一个日志成员。
语句:
alter database
drop logfile member ‘路径,log‘;

下面一个实例:
SQL> alter database
  2  drop logfile member ‘/oracle1/redo4_o3.log‘
  3  /
Database altered.

-----删除了一个成员,但其日志文件并未被删除,如下所示。要在操作系统内手动删除。
SQL> ! ls /oracle1
control01.ctl  redo4_o3.log  test01.dbf

SQL> ! rm -r /oracle1/redo4_o3.log

注意!
删除日志成员时要注意以下几点!
1.日志成员处于current状态不能被删除。
2.删除时,要保证日志组至少拥有一个成员。
3.因故障需要删除成员后,需要立刻补加成员,以保证镜像关系。
4.删除成员时,其日志文件并未被删除,要在操作系统上手动删除。

5.3移动重做日志文件。

1.关闭数据库,重启mount模式。
SQL> shutdown immediate
SQL> startup mount

2.移动重做日志文件到所需位置。
SQL> ! mv /home/app/oracle/oradata/orcl/redo02.log /oracle1

3.重命名日志文件。
SQL> alter database rename file
  2  ‘/home/app/oracle/oradata/orcl/redo02.log‘
  3  to
  4  ‘/oracle1/redo02.log‘
  5  /
Database altered.

4.启动数据库。

六.归档与不归档模式。

当数据库自动对原来的日志文件进行压缩备份的话就叫归档模式。
没有对数据库日志文件进行自动压缩备份就叫非归档模式。

不归档模式                                归档模式
只能冷备份。(关闭数据库才能备份)                                           可以热备份,增量备份,部分恢复。
恢复可能不尽全。                                                                        可以做完全恢复而且可以将数据库恢复到特定的点。

6.1.查询当前数据库是否归档模式
6.1.1   archive log list 显示数据库是否归档模式和联机重做文件组的信息。----权限SYSDBA

SQL> archive log list
Database log mode              No Archive Mode                 ------不归档模式。
Automatic archival             Disabled                                 -------自动存档             禁用
Archive destination            USE_DB_RECOVERY_FILE_DEST       --存档终点            
Oldest online log sequence     30                                          ----最早联机日志序号
Current log sequence           32                                             ----当前日志序号

6.1.2 v$database    ----system权限可以查询,其log_mode列记录了数据库是否处于归档模式。

SQL> select name,log_mode from v$database;

NAME      LOG_MODE
--------- ------------
ORCL      NOARCHIVELOG

6.2 查询归档日志文件的信息。
6.2.1 v$log_history    记录已归档日志文件的序列号,SCN等信息。

SQL> desc v$log_history
 Name                                    
 -------------------------------
 RECID                                              
 STAMP                                           
 THREAD#                                           
 SEQUENCE#                                       
 FIRST_CHANGE#                                     
 FIRST_TIME                                       
 NEXT_CHANGE#                                    
 RESETLOGS_CHANGE#                       
 RESETLOGS_TIME

6.2.2 v$archived_log 同是记录归档日志文件的信息,更详细。

自行desc,熟悉一下,如何?

6.2.3 归档日志存放的目录。---(db_recovery_file_dest 参数记录着归档日志的路径)
----如何更改归档日志存放的路径?----详见6.4
SQL> show parameter db_recovery_file_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      /home/app/oracle/flash_recover
                                                 y_area

6.3切换归档模式

由6.1.1知道,我的oracle并没有开启归档模式,现在手动开启归档模式。

1.关闭数据库。
SQL> shutdown immediate

2.重启mount模式。(不加载数据文件,只加载控制,日志文件模式。)
SQL> startup mount

3.查看数据库当前模式。
SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     30
Current log sequence           32

4.设置数据库为归档模式。
SQL> alter database archivelog;

5.加载数据文件。
SQL> alter database open;

6.查看日志归档模式。
SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     30
Next log sequence to archive   32
Current log sequence           32

时间: 01-14

oracle_重做日志文件--笔记的相关文章

数据库恢复之丢失联机重做日志文件的恢复

联机重做日志文件用来循环记录ORACLE数据库的所有操作,几乎时刻都在读写,因此单纯备份某个时间点的联机重做日志文件没有意义,恢复时根本用来上.RMAN的备份里根本就没有备份联机重做日志的功能,而且不止RMAN,所有的备份软件都没有备份联机重做日志文件的说法.因此,丢失联机重做日志后的数据库恢复也用不到RMAN. 如果ORACLE数据库在启动时发现丢失某一某一联机重做日志文件,则直接报错.ORACLE通过文件冗余的方式来确保联机重做日志文件的安全.即每组联机重做日志创建 多个文件,至少两个,每个

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

oracle redo 重做日志文件

以下易容翻译自oracle dba官方文档,不足之处还望指出. 管理重做日志文件 学习目标:1.解释重做日志文件的目的2.描述重做日志文件的结构3.学会控制日志切换与检查点4.多元化管理重做日志文件5.使用OMF管理重做日志文件 1.概念介绍:重做日志文件通过记录数据的所有改变情况对系统或介质故障提供恢复机制.1)重做日志文件以组的形式存在2)一个oracle数据库至少需要两组,每组至少有一文件3)在一组里的每一重做日志文件叫做成员The redo log files are used only

重做日志文件组和重做日志文件组成员的管理

一.重做日志文件组: 1.添加重做日志组的指令: alter database [数据库名称] add logfile[group 正整数] 文件名称 [,[group 正整数]文件名称]] 不是有group选项时oracle系统会自动在当前最大的组号上加1来产生新的组号 ex:alter database add logfile ('D:\REDO04.LOG','D:\REDO05.LOG') size 15m; 增加新的重做日志组并且添加两个重做日志成员,大小设置为15M 2.删除重做日志

InnoDB存储引擎的表空间文件,重做日志文件

存储引擎文件:因为MySQL表存储引擎的关系,每个存储引擎都会有自己的文件来保存各种数据.这些存储引擎真正存储了数据和索引等数据. 表空间文件 InnoDB存储引擎在存储设计上模仿了Oracle,将存储的数据按表空间进行存放.默认配置下,会有一个初始化大小为10MB.名为ibdata1的文件.该文件就是默认的表空间文件(tablespace file).你可以通过参数innodb_data_file_path对其进行设置.格式如下: innodb_data_file_path=datafile_

13_Oracle_Admin_联机重做日志文件和检查点

在数据库中所有的文件都可以丢失,唯有OnlineRedo Log Files和Archive RedoLog Files不可以丢失,否则数据库将无法恢复. 一.什么是联机重做日志文件 联机重做日志文件的主要用于数据库的备份和恢复,它记录了数据的所有变化情况,提供了数据的恢复机制(Oracle在对数据进行操作时,会先写入联机重做日志),它被组织成组,至少有两组日志. Oracle先写第一组,当第一组写满了,再写第二组,依此类推,如果第三组也写满了,就重新从第一组写起,每一组要保证有两个联机重做日志

14_Oracle_Admin_联机重做日志文件的增删改

一.增加联机重做日志的组和组成员 1. 增加组 SQL> desc v$logfile;  Name                                     Null?    Type  ------------------------------------------------- --------------------  GROUP#                                          NUMBER  STATUS              

15_Oracle_Admin_联机重做日志文件的配置和归档

一.配置RedoLog File 上图中的配置存在以下错误: 1.不对称,Group3只有一个成员,这样会导致写入错误: 2.将一组中的多个成员都放在了一个磁盘上,这样不但导致频繁写入的负荷都集中在一个磁盘上,同时也没有实现磁盘的冗余,起不到备份的作用. 有关联机重做日志文件的配置,有如下建议: 1.配多组Redo LogFile,每组至少两个成员,不同的成员放在不同的磁盘上(即使一组中的成员发生了损坏,只要有一个成员还是正常的,数据库就仍然能正常工作).具体的的数量根据具体情况来定,如果数据并

重做日志文件

所有数据库高速缓存区中已经提交的数据都会被写入重做日志缓存区中,然后被LGWR后台进程写入重做日志文件中.oracle服务器能保证所有被提交的数据都会被写入重做日志文件中.一旦数据库崩溃就可以利用重做日志文件实现数据库的完全恢复.引入重做日志文件的目的就是为了实现数据库的恢复. 1.每个重做日志文件组的成员中存储的内容时完全相同的,在同一时刻LGWR只能往一个重做日志文件组中写入数据,然后将相同的数据复制到同组的其他成员文件中.要保证oracle服务器可以正常运行至少要存在两个重做日志组 2.o