Oracle联机重做日志文件

2/13/2017来源:SQL技巧人气:1741

一、Oracle中的几类日志文件

Redo log files —->联机重做日志 Archive log files —->归档日志 Alert log files —->告警日志 Trace files —->跟踪日志 User_dump_dest —->用户跟踪日志 Backupground_dump_dest —->进程跟踪日志

二、联机重做日志的规划管理 1.联机重做日志 记录了数据的所有变化(DML,DDL或管理员对数据所做的结构性更改等) 提供了恢复机制(对以外删除宕机利用日志文件实现数据恢复) 可以被分组管理

2.联机重做日志组 由一个或多个相同的联机日志文件组成一个联机重做日志组 至少两个日志组,每组至少一个成员 由LGWR后台进程同时将日志内容写入到一个组的所有成员 PS:LGWR的触发条件 在事务提交的时候 Redo Log Buffer 三分之一满 Redo Log Buffer 多于1M的变化记录

3.联机重做日志成员 重做日志组内的每一个联机日志文件称为一个成员 一个组内的每一个成员具有相同的日志序列号(log sequence number),且成员的大小相同 每次日志切换时,Oracle服务器分配一个新的LSN号给即将写入日志的日志文件组 LSN号用于唯一区分每一个联机日志组和归档日志 处于归档模式的联机日志,LSN号在归档时也被写入到归档日志之中

4.日志文件的工作方式 日志文件采用按顺序循环写的方式 当一组联机日志组写满,LGWR则将日志写入到下一组,当最后一组写满则从第一组开始写入 写入下一组的过程称为日志切换 切换时发生检查点过程

5.联机日志文件的规划 分散放开,多路复用 日志所在的磁盘应当具有较高的I/O 一般日志组大小应满足自动切换间隔至少15-20分钟左右业务需求 建议使用rdo结尾的日志文件名,避免误删日志文件。如redo01.rdo,redo02.rdo

6.日志切换和检查点切换 ALTER SYSTEM SWITCH LOGFILE

7.添加日志文件组

ALTER DATABASE ADD LOGFILE [GROUP n] ('$ORACLE_BASE/oradata/orcl/redo01.rdo', '$ORACLE_BASE/oradata/orcl/redo02.rdo') SIZE nM;

8.添加日志成员

ALTER DATABASE ADD LOGFILE MEMBER '$ORACLE_BASE/oradata/orcl/redo01.rdo' TO GROUP 1, '$ORACLE_BASE/oradata/orcl/redo02.rdo' TO GROUP 2;

9.删除日志成员 不能删除组内的唯一一个成员 不能删除处于active 和current 状态组内的成员 删除处于active 和current 状态组内的成员,应使用日志切换使其处于INACTIVE状态后再删除 对于组内如果一个成员为NULL 值,一个为INVALID,且组处入INACTIVE,仅能删除INVALID状态成员 删除日志成员,物理文件并没有真正删除,需要手动删除 删除日志文件后,控制文件被更新 对于处于归档模式下的数据库,删除成员时确保日志已被归档,查看v$log视图获得归档信息

ALTER DATABASE DROP LOGFILE MEMBER '$ORACLE_BASE/oradata/orcl/redo01.rdo'

11.日志的重命名

CURRENT状态组内的成员不能被重命名 建议该行为之前备份数据库 重命名或重定位之后建议立即备份控制文件 重定位及重命名的两种方法 添加一个新成员到日志组,然后删除一个旧的成员 使用ALTER DATABASE RENAME FILE 命令(不区分归档与非归档模式) 复制联机日志文件到新路径:

ho cp 'oldfile' 'newfile'

执行

ALTER DATABASE RENAME FILE 'oldfile' TO 'newfile'

对于处于CURRENT状态的需要改名且不切换的情况下 办法是切换到MOUNT状态下再执行上述操作

12.清空日志文件组

ALTER DATABASE CLEAR LOGIFLE GROUP n ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n

13.日志的监视 查看日志视图中的物理日志文件是否存在、位置、大小等

SELECT 'ho cp '||member FROM v$logfile;

查看日志文件所处的磁盘空间是否足够

SQL> ho df -h

查看组内是否存在多个成员,如为单一成员应考虑增加日志成员 日志切换的间隔时间,应满足15-20分钟业务需求,如果切换间隔很短,应当增加日志文件的大小 增加方法:先删除日志组,再重建该组(对于current和active的需要切换再做处理)

查看切换时间间隔

SELECT TO_CHAR(first_time,'yyyy-mm-dd hh24:mi:ss'),group# FROM v$log;

15.日志的异常处理 不一致的情况(启动时)

ALTER DATABASE CLEAR LOGFILE GROUP n ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n

使用隐藏参数来解决(使用完记得删除隐藏参数) 步骤:

alter system set "_allow_resetlogs_corruption" = true scope = spfile; recover database using bakcup controlfile; alter database open resetlogs; shutdown immediate; startup mount; alter database open resetlogs; alter system reset "_allow_resetlogs_corruption" scope = spfile sid = '*'

三、与日志有关的动态性能视图

V$LOG V$LOGFILE

V$LOG中STATUS的状态值

UNUSED: 从未对该联机日志写入任何内容,一般为新增加联机日志文件或是使用resetlog后的状态 CURRENT:当前重做日志文件,表示该重做日志文件为活动状态,能够被打开和关闭 ACTIVE:处于活动状态,不属于当前日志,崩溃恢复需要该状态,可用于块恢复,可能归档,也可能未归档 CLEARING:表示在执行alter database clear logfile命令后正将该日志重建为一个空日志,重建后状态变为unused CLEARING_CURRENT:当前日志处于关闭线程的清除状态。如日志某些故障或写入新日志标头时发生I/O错误 INACTIVE:实例恢复不在需要联机重做文件日志组,可能归档也可能未归档

V$LOGFILE中STATUS的状态值

INVALID :表明该文件不可访问 STALE :表明文件内容不完全 DELETED : 表明该文件不再使用 NULL :表明文件正在使用

本人写博客主要为了对学习的知识点的巩固,若文中有什么不足的地方欢迎提出!