广告
返回顶部
首页 > 资讯 > 数据库 >Oracle联机如何重做日志文件
  • 706
分享到

Oracle联机如何重做日志文件

oracle 2022-10-18 21:10:52 706人浏览 安东尼
摘要

oracle联机如何重做日志文件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。-Oracle 联机重做日志文件(ONLINE LOG FILE

oracle联机如何重做日志文件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

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

一、Oracle中的几类日志文件

    Redo log files     
-->联机重做日志

    ArcHive log files  
-->归档日志

    Alert log files    
-->告警日志

    Trace files         -->跟踪日志

        user_dump_dest          -->用户跟踪日志

        backupground_dump_dest  -->进程跟踪日志

    --查看后台进程相关目录

        sql> show parameter
dump

        NAME                                
TYPE        VALUE

        ------------------------------------ ----------- ------------------------------

        background_core_dump                 string      partial

        background_dump_dest                 string     
/u01/app/oracle/admin/orcl/bdump

        core_dump_dest                       string     
/u01/app/oracle/admin/orcl/cdump

        max_dump_file_size                   string      UNLIMITED

        shadow_core_dump                     string      partial

        user_dump_dest                       string     
/u01/app/oracle/admin/orcl/udump  

二、联机重做日志的规划管理

    1.联机重做日志     

        记录了数据的所有变化(DML,DDL或管理员对数据所作的结构性更改等)

        提供恢复机制(对于意外删除或宕机利用日志文件实现数据恢复)

        可以被分组管理

    2.联机重做日志组

        由一个或多个相同的联机日志文件组成一个联机重做日志组

        至少两个日志组,每组一个成员(建议每组两个成员,分散放开到不同的磁盘)

        由LGWR后台进程同时将日志内容写入到一个组的所有成员

            LGWR的触发条件

                在事务提交的时候(COMMIT)

                Redo Log Buffer 三分之一满

                Redo Log Buffer 多于一兆的变化记录

                在DBWn写入数据文件之前

    3.联机重做日志成员

        重做日志组内的每一个联机日志文件称为一个成员

        一个组内的每一个成员具有相同的日志序列号(log sequence number),且成员的大小相同

        每次日志切换时,Oracle服务器分配一个新的LSN号给即将写入日志的日志文件组

        LSN号用于唯一区分每一个联机日志组和归档日志

        处于归档模式的联机日志,LSN号在归档时也被写入到归档日志之中

    4.日志文件的工作方式

        日志文件采用按顺序循环写的方式

        当一组联机日志组写满,LGWR则将日志写入到下一组,当最后一组写满则从第一组开始写入

        写入下一组的过程称为日志切换

        切换时发生检查点过程

        检查点的信息同时写入到控制文件

    5.联机日志文件的规划

        总原则

            分散放开,多路复用

            日志所在的磁盘应当具有较高的I/O

            一般日志组大小应满足自动切换间隔至少15-20分钟左右业务需求

            建议使用rdo结尾的日志文件名,避免误删日志文件。如redo1.rdo,redo2.rdo

        规划样例

            Redo Log Group1     Redo
Log Group2     Redo
Log Group3

            Member1             Member1              Member1           
-->Physical Disk 1

            Member2             Member2              Member2           
-->Physical Disk 2

            Member3             Member3              Member3           
-->Physical Disk 3

    6.日志切换和检查点切换

        ALTER SYSTEM SWITCH LOGFILE;  
--强制手动切换

        ALTER SYSTEM CHECKPOINT;

        强制设置检查点间隔

        ALTER SYSTEM
SET FAST_START_MTTR_TARGET = n

    7.添加日志文件组

        ALTER
DATABASE ADD LOGFILE [GROUP n]

            ('$ORACLE_BASE/oradata/u01/logn1.rdo',

             '$ORACLE_BASE/oradata/u01/logn2.rdo')

            SIZE mM;

    8.添加日志成员

        ALTER
DATABASE ADD LOGFILE MEMBER

        '$ORACLE_BASE/oradata/u01/logn1.rdo'
TO GROUP 1,

        '$ORACLE_BASE/oradata/u01/logn2.rdo'
TO GROUP 2;

    9.删除日志成员

        不能删除组内的唯一一个成员

        不能删除处于active 和current 状态组内的成员

        删除处于active 和current 状态组内的成员,应使用日志切换使其处于INACTIVE状态后再删除

        对于组内如果一个成员为NULL 值,一个为INVALID,且组处入INACTIVE,仅能删除INVALID状态成员

        删除日志成员,物理文件并没有真正删除,需要手动删除

        删除日志文件后,控制文件被更新

        对于处于归档模式下的数据库,删除成员时确保日志已被归档,查看v$log视图获得归档信息

        ALTER
DATABASE DROP LOGFILE MEMBER
'$ORACLE_BASE/oradata/u01/logn1.rdo'

    10.删除日志组

        一个实例至少需要两个联机日志文件组

        活动或当前的日志组不能被删除

        组内成员状态有NULL 值或INVALID状态并存,组不可删除

        日志组被删除后,物理文件需要手动删除(对于非OMF)

        ALTER
DATABASE DROP LOGFILE
GROUP n

    11.日志的重定位及重命名

        所需权限

            ALTER
DATABASE 系统权限

            复制文件到目的位置操作系统权限(写权限)

        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
--使用unarchived 避免归档

    13.日志周期循环及切换分析

        Group 1     
Group 2      Group 3

        Current      Inactive     Inactive

        ---------- Log Switch -------------

        Active       Current      Inactive

        ---------- Log Switch -------------

        Active       Active       Current

        ---------- Log Switch -------------

        Current      Inactive     Inactive

        --Active 和Current
称之为在一个循环周期之内(按顺序写日志)

        --Inactive 称为一个周期之外(一个新的循环)

        --新一轮循环开始如在归档状态则先归档再清空,否则直接清空日志

        --数据库启动时Active
和Current 状态的日志不能丢失,否则出错

    14.日志的监视

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

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

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

            SQL> ho df
-h

        查看组内是否存在多个成员,如为单一成员应考虑增加日志成员

        日志切换的间隔时间,应满足15-20分钟业务需求,如果切换间隔很短,应当增加日志文件的大小

            增加方法,先删除日志组,再重建该组(对于current和active的需要切换再做处理)

        --查看切换时间间隔(下面的示例中为手工切换的时间,不作考虑)

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

        TO_CHAR(FIRST_TIME,     GROUP#

        ------------------- ----------

        2010-07-20 09:43:18          1

        2010-07-19 22:44:30          2

        2010-07-19 22:44:32          3         

    15.日志的异常处理(参照演示中9小节)

        不一致的情况(启动时)

            ALTER
DATABASE CLEAR LOGFILE GROUP n

            ALTER
DATABASE CLEAR UNARCHIVED LOGFILE GROUP n

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

        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 :表明文件正在使用

四、演示

    --1.查看当前数据库的日志

        SQL>
SELECT * FROM v$log;

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

        ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------

                 1          1          5   52428800          1
NO  CURRENT                2758062 19-JUL-10

                 2          1          3   52428800          2 YES INACTIVE               2695010 16-JUL-10

                 3          1          4  104857600          2 YES INACTIVE               2716552 18-JUL-10

        SQL>
SELECT * FROM v$logfile
ORDER BY group#;  

            GROUP# STATUS  TYPE    MEMBER                                                  IS_

        ---------- ------- ------- ------------------------------------------------------- ---

                 1         ONLINE  /u01/app/oracle/oradata/orcl/redo01.log                
NO

                 2 STALE   ONLINE  /u01/app/oracle/oradata/orcl/redo02.log                
NO

                 2 STALE   ONLINE  /u01/app/oracle/oradata/orcl/redo2.log                 
NO

                 3 STALE   ONLINE  /u01/app/oracle/oradata/orcl/redo03.log                
NO

                 3 STALE   ONLINE  /u01/app/oracle/oradata/orcl/redo3.log                 
NO  

    --2.添加日志组

        SQL>
SELECT * FROM v$logfile;

            GROUP# STATUS  TYPE    MEMBER                                                  IS_

        ---------- ------- ------- ------------------------------------------------------- ---

                 2 STALE   ONLINE  /u01/app/oracle/oradata/orcl/redo2.log                 
NO

                 2 STALE   ONLINE  /u01/app/oracle/oradata/orcl/redo02.log                
NO

                 1         ONLINE  /u01/app/oracle/oradata/orcl/redo01.log                
NO

                 3 STALE   ONLINE  /u01/app/oracle/oradata/orcl/redo3.log                 
NO

                 3 STALE   ONLINE  /u01/app/oracle/oradata/orcl/redo03.log                
NO

                 4         ONLINE  /u01/app/oracle/oradata/orcl/redo4.log                 
NO

                 4         ONLINE  /u01/app/oracle/oradata/orcl/redo04.log                
NO

    --3.添加日志成员

        SQL>
ALTER DATABASE ADD LOGFILE MEMBER
'/u01/app/oracle/oradata/orcl/redo1.log'
TO GROUP 1;

        Database altered.

        SQL>
SELECT * FROM v$logfile
WHERE group# = 1
;

            GROUP# STATUS  TYPE    MEMBER                                                  IS_

        ---------- ------- ------- ------------------------------------------------------- ---

                 1         ONLINE  /u01/app/oracle/oradata/orcl/redo01.log                
NO

                 1 INVALID ONLINE  /u01/app/oracle/oradata/orcl/redo1.log                 
NO

    --4.删除日志成员

        SQL>
ALTER DATABASE DROP LOGFILE MEMBER
'/u01/app/oracle/oradata/orcl/redo01.log';

        ALTER
DATABASE DROP LOGFILE MEMBER
'/u01/app/oracle/oradata/orcl/redo01.log'

        *

        ERROR at line 1: 
--redo01.log处于NULL状态且该日志组为current状态不能删除

        ORA-00362: member
is required to fORM a valid logfile
in group 1

        ORA-01517:
log member:
'/u01/app/oracle/oradata/orcl/redo01.log'

        SQL>
ALTER DATABASE DROP LOGFILE MEMBER
'/u01/app/oracle/oradata/orcl/redo04.log';

        Database altered.

        SQL> 
ALTER DATABASE DROP LOGFILE MEMBER
'/u01/app/oracle/oradata/orcl/redo4.log';

         ALTER
DATABASE DROP LOGFILE MEMBER
'/u01/app/oracle/oradata/orcl/redo4.log'

        *

        ERROR at line 1:  
--最后一个日志成员不能被删除

        ORA-00361: cannot remove last
log member /u01/app/oracle/oradata/orcl/redo4.log
for group 4

    --5.日志切换

        SQL>
SELECT * FROM v$log; 
--当前的日志组处于CURRENT状态

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

        ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------

                 1          1          5   52428800          2
NO  CURRENT                2758062 19-JUL-10

                 2          1          3   52428800          2 YES INACTIVE               2695010 16-JUL-10

                 3          1          4  104857600          2 YES INACTIVE               2716552 18-JUL-10

                 4          1          0   31457280          1 YES UNUSED                       0

        SQL>
ALTER SYSTEM SWITCH LOGFILE; 
--进行日志切换

        System altered.

        SQL>
SELECT * FROM v$log;   
--原来的日志组4的unused状态变为current状态

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

        ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------

                 1          1          5   52428800          2 YES ACTIVE                 2758062 19-JUL-10

                 2          1          3   52428800          2 YES INACTIVE               2695010 16-JUL-10

                 3          1          4  104857600          2 YES INACTIVE               2716552 18-JUL-10

                 4          1          6   31457280          1
NO  CURRENT                2759277 19-JUL-10

        SQL>
ALTER SYSTEM SWITCH LOGFILE;  
--再次进行日志切换

        System altered.

        SQL>
SELECT * FROM v$log;         
--日志组1变为current且组4变为active 状态

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

        ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------

                 1          1          5   52428800          2 YES ACTIVE                 2758062 19-JUL-10

                 2          1          7   52428800          2
NO  CURRENT                2759293 19-JUL-10

                 3          1          4  104857600          2 YES INACTIVE               2716552 18-JUL-10

                 4          1          6   31457280          1 YES ACTIVE                 2759277 19-JUL-10       

    由上可得知,在日志切换时对于unused组将优先作为下一组切换对象

        --再次删除redo01.log还是收到错误提示

        SQL>
ALTER DATABASE DROP LOGFILE MEMBER
'/u01/app/oracle/oradata/orcl/redo01.log';

        ALTER
DATABASE DROP LOGFILE MEMBER
'/u01/app/oracle/oradata/orcl/redo01.log'

        *

        ERROR at line 1:

        ORA-00362: member
is required to form a valid logfile
in group 1

        ORA-01517:
log member:
'/u01/app/oracle/oradata/orcl/redo01.log'

        SQL>
ALTER SYSTEM SWITCH LOGFILE; 
--再次进行日志切换

        System altered.

        SQL>
SELECT * FROM v$log;         
--group1变为inactive

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

        ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------

                 1          1          5   52428800          2 YES INACTIVE               2758062 19-JUL-10

                 2          1          7   52428800          2 YES ACTIVE                 2759293 19-JUL-10

                 3          1          8  104857600          2
NO  CURRENT                2759420 19-JUL-10

                 4          1          6   31457280          1 YES INACTIVE               2759277 19-JUL-10

        --反复多切几次日志之后redo01.log被成功删除     

        SQL> 
ALTER DATABASE DROP LOGFILE MEMBER
'/u01/app/oracle/oradata/orcl/redo01.log';

    Database altered.

    --6.删除日志组(CURRENT和ACTIVE状态的不能被删除)

        SQL>
SELECT * FROM v$log;

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

        ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------

                 1          1          9   52428800          1 YES ACTIVE                 2759487 19-JUL-10

                 2          1         11   52428800          2
NO  CURRENT                2759502 19-JUL-10

                 3          1          8  104857600          2 YES ACTIVE                 2759420 19-JUL-10

                 4          1         10   31457280          1 YES ACTIVE                 2759499 19-JUL-10

        SQL>
ALTER DATABASE DROP LOGFILE
GROUP 4;

        ALTER
DATABASE DROP LOGFILE
GROUP 4

        *

        ERROR at line 1:  
--处于活动状态的group4 用于灾难恢复,不能被删除

        ORA-01624:
log 4 needed for crash recovery
of instance orcl (thread 1)

        ORA-00312: online
log 4 thread 1:
'/u01/app/oracle/oradata/orcl/redo4.log'

        SQL>
ALTER SYSTEM SWITCH LOGFILE;  
--进行日志切换

        System altered.

        SQL>
/

        System altered.

        SQL>
SELECT * FROM v$log;    --group 4的状态变为inactvie

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

        ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------

                 1          1         13   52428800          1
NO  CURRENT                2759720 19-JUL-10

                 2          1         11   52428800          2 YES ACTIVE                 2759502 19-JUL-10

                 3          1         12  104857600          2 YES ACTIVE                 2759718 19-JUL-10

                 4          1         10   31457280          1 YES INACTIVE               2759499 19-JUL-10

        SQL>
ALTER DATABASE DROP LOGFILE
GROUP 4;  
--成功删除group 4

        Database altered.

        SQL> ho ls
/u01/app/oracle/oradata/orcl/redo*

        /u01/app/oracle/oradata/orcl/redo01.log 
/u01/app/oracle/oradata/orcl/redo1.log

        /u01/app/oracle/oradata/orcl/redo02.log 
/u01/app/oracle/oradata/orcl/redo2.log

        /u01/app/oracle/oradata/orcl/redo03.log 
/u01/app/oracle/oradata/orcl/redo3.log

        /u01/app/oracle/oradata/orcl/redo04.log 
/u01/app/oracle/oradata/orcl/redo4.log

        SQL> ho rm
/u01/app/oracle/oradata/orcl/redo04.log  
--删除物理文件

        SQL> ho rm
/u01/app/oracle/oradata/orcl/redo4.log   
--删除物理文件

    --7.日志的重定位及重命名(仅演示ALTER DATABASE RENAME FILE 命令)

        SQL>
SELECT name,log_mode
FROM v$database;

        NAME      LOG_MODE

        --------- ------------

        ORCL      ARCHIVELOG

        SQL>
SELECT * FROM v$logfile
ORDER BY group#;

            GROUP# STATUS  TYPE    MEMBER                                                  IS_

        ---------- ------- ------- ------------------------------------------------------- ---

                 1         ONLINE  /u01/app/oracle/oradata/orcl/redo01.log                
NO

                 2         ONLINE  /u01/app/oracle/oradata/orcl/redo02.log                
NO

                 2         ONLINE  /u01/app/oracle/oradata/orcl/redo2.log                 
NO

                 3 STALE   ONLINE  /u01/app/oracle/oradata/orcl/redo03.log                
NO

                 3 STALE   ONLINE  /u01/app/oracle/oradata/orcl/redo3.log                 
NO

        SQL> ho cp
/u01/app/oracle/oradata/orcl/redo01.log
/u01/app/oracle/oradata/redo01.rdo      

        SQL>
ALTER DATABASE RENAME
FILE '/u01/app/oracle/oradata/orcl/redo01.log'

          2    TO
'/u01/app/oracle/oradata/redo01.rdo';

        Database altered.

        SQL>
SELECT * FROM v$logfile
WHERE group# = 1;

            GROUP# STATUS  TYPE    MEMBER                                                  IS_

        ---------- ------- ------- ------------------------------------------------------- ---

                 1         ONLINE  /u01/app/oracle/oradata/redo01.rdo                     
NO

    --8.清空日志文件组(只有非active 和非current状态的组才能被清空)

        SQL>
SELECT * FROM v$log;

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

        ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------

                 1          1         13   52428800          1 YES ACTIVE                 2759720 19-JUL-10

                 2          1         14   52428800          2
NO  CURRENT                2761383 19-JUL-10

                 3          1         12  104857600          2 YES INACTIVE               2759718 19-JUL-10

        SQL>
ALTER DATABASE CLEAR LOGFILE
GROUP 1;

        ALTER
DATABASE CLEAR LOGFILE GROUP 1

        *

        ERROR at line 1:    
--active 状态不能被清空

        ORA-01624:
log 1 needed for crash recovery
of instance orcl (thread 1)

        ORA-00312: online
log 1 thread 1:
'/u01/app/oracle/oradata/redo1.rdo'

        SQL> 
ALTER DATABASE CLEAR LOGFILE
GROUP 2;

         ALTER
DATABASE CLEAR LOGFILE GROUP 2

        *

        ERROR at line 1:   
--current 状态不能被清空

        ORA-01624:
log 2 needed for crash recovery
of instance orcl (thread 1)

        ORA-00312: online
log 2 thread 1:
'/u01/app/oracle/oradata/orcl/redo2.log'

        ORA-00312: online
log 2 thread 1:
'/u01/app/oracle/oradata/orcl/redo02.log'

        SQL> 
ALTER DATABASE CLEAR LOGFILE
GROUP 3;

        Database altered.

        SQL>
SELECT * FROM v$log;  
--group 3被清空后状态变为unused

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

        ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------

                 1          1         13   52428800          1 YES INACTIVE               2759720 19-JUL-10

                 2          1         14   52428800          2
NO  CURRENT                2761383 19-JUL-10

                 3          1          0  104857600          2 YES UNUSED                 2759718 19-JUL-10

    --9.日志异常处理

        --启动时提示日志不一致

        SQL> startup

        ORACLE instance started.

        Total System Global Area  251658240 bytes

        Fixed Size                  1218796 bytes

        Variable Size              83887892 bytes

        Database Buffers          163577856 bytes

        Redo Buffers                2973696 bytes

        Database mounted.

        ORA-00341:log 1
of thread 1,wrong
log # in header

        ORA-00312:online
log 1 thread 1:'/u01/app/oracle/oradata/orcl/redo1a.rdo'  

        ORA-00312:online
log 1 thread 1:'/u01/app/oracle/oradata/orcl/redo1b.rdo'

        SQL>
ALTER DATABASE CLEAR LOGFILE
GROUP 1;

        Database altered.

        SQL>
ALTER DATABASE OPEN;

        Database opened.

        --日志文件丢失(非current状态日志组)

        SQL> startup

        ORACLE instance started.

        Total System Global Area  251658240 bytes

        Fixed Size                  1218796 bytes

        Variable Size              88082196 bytes

        Database Buffers          159383552 bytes

        Redo Buffers                2973696 bytes

        Database mounted.

        ORA-00313:
open failed for members
of log
group 1 of thread 1

        ORA-00312: online
log 1 thread 1:
'/u01/app/oracle/oradata/orcl/redo1a.rdo'

        ORA-00312: online
log 1 thread 1:
'/u01/app/oracle/oradata/orcl/redo1b.rdo'

        SQL>
ALTER DATABASE CLEAR LOGFILE
GROUP 1;

        Database altered.

        SQL>
ALTER DATABASE OPEN;

        Database altered.

        --日志文件丢失(current状态日志组)

        SQL> startup

        ORACLE instance started.

        Total System Global Area  251658240 bytes

        Fixed Size                  1218796 bytes

        Variable Size              83887892 bytes

        Database Buffers          163577856 bytes

        Redo Buffers                2973696 bytes

        Database mounted.

        ORA-00313:
open failed for members
of log
group 3 of thread 1

        ORA-00312: online
log 3 thread 1:
'/u01/app/oracle/oradata/orcl/redo3a.rdo'

        ORA-00312: online
log 3 thread 1:
'/u01/app/oracle/oradata/orcl/redo3b.rdo'

        --查看告警日志

        SQL> ho tail
-n 30 /u01/app/oracle/admin/orcl/bdump/alert_orcl.log

        ORA-27037: unable
to obtain file status

        linux Error: 2:
No such file
or directory

        Additional information: 3

        ORA-00312: online
log 3 thread 1:
'/u01/app/oracle/oradata/orcl/redo3a.rdo'

        ORA-27037: unable
to obtain file status

        Linux Error: 2:
No such file
or directory

        Additional information: 3

        Tue Jul 20 10:45:58 2010

        Errors in
file /u01/app/oracle/admin/orcl/bdump/orcl_lgwr_4112.trc:

        ORA-00313:
open failed for members
of log
group 3 of thread 1

        ORA-00312: online
log 3 thread 1:
'/u01/app/oracle/oradata/orcl/redo3b.rdo'

        ORA-27037: unable
to obtain file status

        Linux Error: 2:
No such file
or directory

        Additional information: 3

        ORA-00312: online
log 3 thread 1:
'/u01/app/oracle/oradata/orcl/redo3a.rdo'

        ORA-27037: unable
to obtain file status

        Linux Error: 2:
No such file
or directory

        Additional information: 3

        Tue Jul 20 10:45:58 2010

        ARC0: STARTING ARCH PROCESSES

        Tue Jul 20 10:45:58 2010

        ARC1: Becoming the
'no FAL' ARCH

        ARC1: Becoming the
'no SRL' ARCH

        Tue Jul 20 10:45:58 2010

        ARC2: Archival started

        ARC0: STARTING ARCH PROCESSES COMPLETE

        ARC0: Becoming the heartbeat ARCH

        ARC2 started with pid=18, OS id=4137

        Tue Jul 20 10:45:58 2010

        ORA-313 signalled during:
ALTER DATABASE
OPEN...

        --查看物理日志文件是否存在

        SQL> ho ls
/u01/app/oracle/oradata/orcl/redo3a.rdo

        ls:
/u01/app/oracle/oradata/orcl/redo3a.rdo:
No such file
or directory

        SQL> ho ls
/u01/app/oracle/oradata/orcl/redo3b.rdo

        ls:
/u01/app/oracle/oradata/orcl/redo3b.rdo:
No such file
or directory

--尝试使用清空日志组命令

        SQL>
ALTER DATABASE CLEAR LOGFILE
GROUP 3;

        ALTER
DATABASE CLEAR LOGFILE GROUP 3

        *

        ERROR at line 1:  
--系统处于非归档模式,且group 3状态为CURRENT

        ORA-00350:
log 3 of instance orcl
(thread 1) needs
to be archived

        ORA-00312: online
log 3 thread 1:
'/u01/app/oracle/oradata/orcl/redo3a.rdo'

        ORA-00312: online
log 3 thread 1:
'/u01/app/oracle/oradata/orcl/redo3b.rdo'

        --尝试使用不归档清空日志

        SQL>
ALTER DATABASE CLEAR UNARCHIVED LOGFILE
GROUP 3;

        ALTER
DATABASE CLEAR UNARCHIVED LOGFILE GROUP 3

        *

        ERROR at line 1:  

        ORA-00313:
open failed for members
of log
group 3 of thread 1

        ORA-00312: online
log 3 thread 1:
'/u01/app/oracle/oradata/orcl/redo3b.rdo'

        ORA-27037: unable
to obtain file status

        Linux Error: 2:
No such file
or directory

        Additional information: 3

        ORA-00312: online
log 3 thread 1:
'/u01/app/oracle/oradata/orcl/redo3a.rdo'

        ORA-27037: unable
to obtain file status

        Linux Error: 2:
No such file
or directory

        Additional information: 3

        --使用带控制文件的介质恢复

        SQL> RECOVER
DATABASE USING BACKUP CONTROLFILE;

        ORA-00279: change 2835232 generated at 07/20/2010 10:40:23
needed for thread 1

        ORA-00289: suggestion
: /u01/app/oracle/flash_recovery_area/ORCL/archivelog/2010_07_20/o1_mf_1_39_%u_.arc

        ORA-00280: change 2835232
for thread 1 is
in sequence #39

        Specify log:
{<RET>=suggested
| filename |
AUTO | CANCEL}

        ORA-00308: cannot
open archived log
'/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2010_07_20/o1_mf_1_39_%u_.arc'

        ORA-27037: unable
to obtain file status

        Linux Error: 2:
No such file
or directory

        Additional information: 3

        --使用resetlogs选项打开数据库

        SQL>
ALTER DATABASE OPEN RESETLOGS;

        Database altered.      

        SQL>
SELECT * FROM v$log;  
--系统重建group 3

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

        ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------

                 1          1          2   31457280          2
NO  CURRENT                2835234 20-JUL-10

                 2          1          1   31457280          2 YES INACTIVE               2835233 20-JUL-10

                 3          1          0   31457280          2 YES UNUSED                       0          

        SQL>
SELECT * FROM v$logfile;  
--为group 3增加了两个成员redo3a.rdo ,redo3b.rdo  

            GROUP# STATUS  TYPE    MEMBER                                                  IS_

        ---------- ------- ------- ------------------------------------------------------- ---

                 2         ONLINE  /u01/app/oracle/oradata/orcl/redo2a.rdo                
NO

                 2         ONLINE  /u01/app/oracle/oradata/orcl/redo2b.rdo                
NO

                 1         ONLINE  /u01/app/oracle/oradata/orcl/redo1a.rdo                
NO

                 3         ONLINE  /u01/app/oracle/oradata/orcl/redo3a.rdo                
NO

                 3         ONLINE  /u01/app/oracle/oradata/orcl/redo3b.rdo                
NO

                 1         ONLINE  /u01/app/oracle/oradata/orcl/redo1b.rdo                
NO      

        对于CURRENT组的也可以使用隐藏参数来解决

        步骤:

            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 =
'*'

        对于归档模式下的日志文件丢失,同样可以按上述步骤处理

看完上述内容,你们掌握Oracle联机如何重做日志文件的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网数据库频道,感谢各位的阅读!

您可能感兴趣的文档:

--结束END--

本文标题: Oracle联机如何重做日志文件

本文链接: https://www.lsjlt.com/news/61687.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle联机如何重做日志文件
    Oracle联机如何重做日志文件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。-Oracle 联机重做日志文件(ONLINE LOG FILE...
    99+
    2022-10-18
    oracle
  • 修改oracle重做日志文件大小
    创建3个新的日志组SQL> ALTER DATABASE ADD LOGFILE GROUP 4 ('/u01/app/oracle/oradata/orcl/redo06.log') SI...
    99+
    2022-10-18
    oracle 日志组大小
  • Online Redo Log File(联机重做日志)
    Online Redo Log File(联机重做日志) 一.Online Redo Log File作用1.记录对数据所做的所有更改。2.提供恢复机制。二.Redo Log File Group...
    99+
    2022-10-18
    log file online
  • 如何理解Oracle归档日志比联机重做日志小很多的情况
    本篇内容介绍了“如何理解Oracle归档日志比联机重做日志小很多的情况”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够...
    99+
    2022-10-18
    oracle
  • 如何为oracle添加重做日志组及重做日志成员
    本篇内容主要讲解“如何为oracle添加重做日志组及重做日志成员”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何为oracle添加重做日志组及重做日志成员”吧...
    99+
    2022-10-18
    oracle
  • Oracle联机日志文件与归档文件详细介绍
    管理联机日志文件: 联机日志文件以组为单位工作 数据库正常工作至少需要2组日志 联机日志记录所有数据块的变化,用来做实例recover 同一组下的成员之间是镜像关系 more情况日志成员写满redo时发生切换 日志切换时...
    99+
    2022-11-22
    Oracle联机日志文件 Oracle归档文件
  • 康哥教你如何有效管理重做日志文件
    有的人可能还不知道什么是重做日志文件,其实就是你的oradata目录下面的那几个redo.log文件。作用:当你的数据库崩溃的时候,管理员可以通过重做日志文件和数据库备份文件,把数据库恢复到最近一次记录日志...
    99+
    2022-10-18
    日志文件 重做 管理维护
  • Oracle日志组中如何添加冗余文件和日志组
    这篇文章将为大家详细讲解有关Oracle日志组中如何添加冗余文件和日志组,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 rac中需要指定th...
    99+
    2022-10-19
    oracle
  • CentOS7日志文件及journalctl日志如何查看
    这篇文章主要介绍了CentOS7日志文件及journalctl日志如何查看的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇CentOS7日志文件及journalctl日志如何查看文章都会有所收获,下面我们一起来看...
    99+
    2023-07-05
  • mongodb如何清理日志文件
    mongodb清理日志文件的方法:1、使用mongodb数据库命令“db.runCommand({logRotate:1})”登录到mongod和mongos实例中;2、然后使用“cat /dev/null > [文件名]”系统命令清...
    99+
    2022-10-22
    mongodb
  • python如何处理日志文件
    使用python处理日志文件的方法:1.新建python项目;2.使用open()函数打开日志文件;3.使用readlines()方法遍历日志;4.使用open()函数新建文件,在通过write()方法将数据输出到文件;具体步骤如下:首先,...
    99+
    2022-10-16
    python
  • centos如何查看日志文件
    centos中查看日志文件的方法:1、打开centos终端;2、通过“cat 文件名”或“tail -f 文件名”命令查看日志文件即可。具体操作步骤:在centos系统桌面中使用快捷键【Ctrl+Alt+T】打开终端命令行模式。在cento...
    99+
    2022-10-05
    centos
  • redis如何配置日志文件
    redis配置日志文件的方法:打开redis的配置文件。找到logfile或直接搜logfile " "。将路径填入logfile后面的引号内,例如:logfile "d:/redislog/redis.log...
    99+
    2022-10-09
    redis redis日志文件
  • 如何清理redis日志文件
    要清理Redis日志文件,可以按照以下步骤进行操作:1. 停止Redis服务:可以使用`redis-cli`命令连接到Redis,执...
    99+
    2023-09-11
    redis
  • win10日志文件如何删除
    这篇文章主要讲解了“win10日志文件如何删除”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“win10日志文件如何删除”吧!win10日志文件删除方法:找到“c盘” 右击c盘选择“属性” 点...
    99+
    2023-07-01
  • 如何掌握SpringBoot日志文件
    这篇“如何掌握SpringBoot日志文件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何掌握SpringBoot日志文件...
    99+
    2023-07-05
  • 如何处理日志文件丢失
    select group#,members from v$log;查看日志文件的状态select  group#,status ...
    99+
    2022-10-18
    日志文件 active current
  • mysql中如何清除日志文件
    这篇文章将为大家详细讲解有关mysql中如何清除日志文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。数据库会将用户操作记录到日志当中,日志数量不对增加势必会占用大量的磁...
    99+
    2022-10-18
    mysql
  • mysql的日志文件如何查看
    mysql的日志文件如何查看?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先,介绍一下mysql日志的种类。一般来说,日志有五种,分别为...
    99+
    2022-10-18
    mysql 如何查看
  • 如何用PHP同步日志文件?
    日志文件是应用程序开发和维护中非常重要的一部分,它可以帮助我们记录应用程序的运行状态、错误日志和调试信息。然而,随着应用程序的不断发展和数据量的增长,日志文件的大小也会越来越大,这给日志文件的同步和备份带来了很多挑战。本文将介绍如何使用P...
    99+
    2023-07-09
    日志 文件 同步
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作