博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

acle联机日志文件的维护

Posted on 2015-02-14 10:55  徐正柱-  阅读(443)  评论(0编辑  收藏  举报

1、刷新重做日志缓存的时机

     a.commit

     b.缓存满了

     c.checkpoint,checkpoint的触发有两种机制:

           定时触发,由log_checkpoint_interval[1]参数决定间隔的时间,单位秒;0表示禁用

           定量触发,由log_checkpoint_timeout[2]参数决定,表示故障恢复所需要的时间,单位秒;0表示禁用。

2、切换日志的归档方式

   a.archive log list (查看日志的日志的归档方式)

   b.startup mount

   c.alter database archivelog/noarchivelog

   d.shutdown immediate ;顺便进行脱机全备份

   e.startup

   f.archive log start 启用自动归档(当前有效)

     alter system set log_archive_start=true scope=spifle;重启后生效

   g.修改log_archive_dest_n,指定归档路径

3、日志切换和检查点

   日志切换触发检查点,检查点会做一下操作:更新数据文件头、更新控制文件头、刷新数据缓存、刷新日志缓存。【另外dbwn会定时或定量刷新数据缓存,定量:fast_start_io_target(脏数据块的数量),定时:fast_sart_mttr_target(单位秒),数据库能够在该时间内open】

   切换日志的命令:alter system switch logfie;

   强制检查点(也会导致日志的切换):alter system checkpoint local;对当前实例

               alter system checkpoint global;对全局有效

               alter tablespace XXX begin backup;  --对表空间做检查点

               alter tablespace XXX offline;  

4、日志归档的时机

   当启用日志自动归档时,日志切换会自动归档日志。

   当没有启用日志自动归档时,日志切换到最后一个日志时,会造成等待,等待手动归档日志。

 

5、新增、删除日志组和日志成员

   增加日志成员:

   Alter database add logfile member ‘filename’ to group groupnumber;

   增加日志组:

   Alter database add logfile group ‘filename’;

   删除日志成员:

   Alter database drop logfile member ‘filename’;

   删除日志组:

   Alter database drop logfile group groupnumber;

 

5、修改归档日志文件目录

Alter  system set log_archive_dest_1=’location=d:/log/’;

Alter  system set log_archive_dest_1=’service=tnsname’;

 

6、重命名重做日志

Alter database clear logfile group n

Shutdown immediate

Copy 日志文件到另一个目录

Alter database rename file “XXXXXX” to “XXXXXX”

Startup

备份控制文件

 

 

一、联机重做日志
 
    1、重做线程
 
    每个数据库实例的联机重做日志组都是一个联机重做的实例线程。
    不管有没有多路复用,一般每个Oracle都只有一个重做线程,当然RAC中每个实例都包含一个重做线程。
 
    2、联机重做日志内容
 
    重做条目记录了可以对数据库重新构造的所有修改数据,包括回滚段。
    重做记录在SGA重做日志缓存区中缓冲,并由LGWR进程写入某个联机重做日志文件。
 
    事务被提交时,必定需要用LGWR将日志全部从SGA缓存中写入联机重做日志文件,然后才被告知提交完成。
    LGWR还会为每个事务分配一个识别重做记录的系统修改号(SCN)。
 
    当重做日志缓存填满时LGWR也会将重做条目写入到重做日志文件,这些是可以回滚的。
 
    3、联机重做日志写入方式
 
    数据库的联机重做日志组务必要有两个或两个以上,这样可以保持其中一个一直用于写入,另一个用于归档。
 
    LGWR采用循环写入的方式,即写满一个换下一个。或归档模式则写满了之后归档,否则则直接覆盖。
 
    4、活动与非活动
 
    当前正在写入的联机重做日志文件成为“当前的”联机重做日志文件。
    实例恢复时所需的联机重做日志文件称为“活动的”联机重做日志文件。
    实例恢复不用的联机重做日志文件称为“非活动的”联机重做日志文件。
 
    已经进行存档的联机重做日志文件不能重新使用或重写,知道ARCn存储了这个文件内容。
 
    5、日志切换 & 日志顺序号
 
    一般默认在一个文件写满时切换到写一个文件,但是也可以规定时间进行切换,这样就不用理会是否写满。
    也可以手动进行强制切换。
 
    每次日志切换都会分配一个新的日志顺序号,归档时也将顺序号进行保存。
    每个联机或存档的重做日志文件都通过它的日志顺序号进行唯一标识。
 
 
二、规划联机重做日志
 
    1、多路复用(Group)
 
    多路复用是避免损坏联机重做日志文件。
    多路复用时LGWR将同一重做日志信息同时写入多个同样的联机重做日志文件。
 
    建议必须要使用多路复用(至少两个组)。
 
    LOG-1.JPG
 
    注:当某个成员不可用,则标记为INVALID,并向LGWR跟踪文件和数据报警文件中写入错误信息。不同问题会不同反映。
      * 一个操作成功一个操作失败时:按正常过程进行,忽略不可用成员
      * 日志切换时需要存档而不能访问下一个组时:暂时中断操作,直到归档完成
      * 介质失败,切换时不能访问下一组:关闭数据库,并返回错误信息
      * LGWR写入时不能访问文件:关闭数据库,并返回错误信息
 
    注:不同的组中不一定需要相同个数的成员。只含有1个组的多路复用是非法的。
 
    2、日志成员存放在不同磁盘
 
    设置多路复用时,将日志组成员放置到不同的磁盘上。这样当某磁盘失败时,可以跳过这个成员继续工作。
 
    另外将成员放置到不同磁盘上可以消除LGWR和ARCn在后台进程对联机重做日志成员的争夺。
 
    注:数据文件和联机重做日志文件也应该放在不同磁盘上,以减少写数据块和写记录之间出现的竞争。
 
    3、联机重做日志成员的大小
 
    规定联机重做日志的大小,以便将填满的组存档到脱机存档介质(磁带或磁盘)的某个单元中。
    例如磁盘上有一个填满的联机重做日志组,且磁盘还有49%的未使用存储空间,此时最好降低联机重做日志文件的大小。
 
    多路复用时,同一个组中的多有成员比用拥有同样的大小!
    不同组的成员大小不同,但是这样没有什么好处,而且会对检验点的设置带来不便。
 
    4、联机重做日志文件的数量
 
    联机日志文件数量的确定最好的方法是测试不同的配置的效果。
    最佳配置:在不妨碍LGWR向重做日志写入信息的前提下,使用尽可能少的组(至少2个组)。
 
    仔细检查LGWR跟踪文件和数据库报警文件的内容,如果消息表明:因为检验点还没有完成或者组还没有存档的缘故,LGWR不得不频繁得等待组,那么就需要添加组来解决问题。
 
    注:MAXLOGFILES-最大组数;MAXLOGMEMBERS-最大成员数;要修改这两个参数需要重建数据库或控制文件,所以创建数据库时要慎重。
 
    5、控制存档延迟
 
    在数据库中使用联机重做日志归档,然后将归档日志放到备用数据库,通过查询日志来进行和数据库中同样的操作。这两个操作之间存在一个时间间隔,就叫做存档延迟。可以通过ARCHIVE_LAG_TARGET初始化参数来严格限定延迟的时间长度。
 
    设置了ARCHIVE_LAG_TARGET之后,Oracle将定期检查实例当前的联机重做日志,在发生一下情况时切换日志:
    * n秒钟前创建了当前日志,并估计当前日志存档时间为m秒,而n+m值超过ARCHIVE_LAG_TARGET的值
    * 当前日志包含重做记录
 
    ARCHIVE_LAG_TARGET = 1800  单位是秒,默认为0,表示禁止该功能
 
    在选择数值时考虑一下因素:
    * 切换日志所消耗的系统开销
    * 作为日志完整条件的结果,通常日志切换发生的频率
    * 备用数据库可以人寿多少重做损失
 
    注:当数据库本身就经常切换时,设置这个值没有什么意义,而且当设置值很低时,对性能会产生负面影响。