Oracle日志文件



优于别人,并不高贵,真正的高贵应该是优于过去的自己。-------海明威


Oracle日志文件相当于数据库的日记,记录着每一个对数据库的更改,当发生数据库记忆丢失的情况时(如数据文件意外删除,数据表意外删除,数据文件块损坏等),oracle只要规规矩矩地按照日志文件记载一步一步把曾经执行过的操作再重做一遍,数据库还是可以回到应用的状态。

Oracle日志文件分为redo日志文件和归档日志文件,归档日志文件可以看成是redo日志文件的备份累积,在数据库开启归档模式下才会产生。redo日志文件中,将按照scn先后顺序,以重做条目的形式记录数据库的操作。



一、redo日志文件

1.1,查看redo日志文件

SQL> select group#,sequence#,status,first_change#,next_change# from v$log


    GROUP#  SEQUENCE#  STATUS    FIRST_CHANGE#  NEXT_CHANGE#

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

         1                   52           INACTIVE           2074299              2094768

         2                   53           INACTIVE           2094768              2099479

         3                   54           CURRENT           2099479      281474976710655


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


    GROUP# STATUS  TYPE    MEMBER

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

         1         ONLINE  /oracle/app/data/ORCL/redo01.log

         3         ONLINE  /oracle/app/data/ORCL/redo03.log

         2         ONLINE  /oracle/app/data/ORCL/redo02.log


1.2,增加减少日志成员或者组

增加日志组:

SQL>alter database add logfile group 4 '/oracle/app/data/ORCL/redo04.log' size 50M;


增加日志组成员:

SQL>alter database add logfile member '/oracle/app/oradata/redo04_b.log' size 50M;


删除日志组:

SQL>alter database drop logfile group 4;


删除日志组成员:

SQL>alter database drop logfile member '/oracle/app/oradata/redo04_b.log' size 50M;


注意:删除日志组和日志文件成员时,状态为current及active的日志文件不要操作,否则会导致数据库不一致,数据库报错而实例崩溃,数据库无法打开。


二、归档日志文件

Oracle数据库有两种模式,一种是非归档模式,另一种是非归档模式。归档模式下,数据库将会把redo记录写入到归档文件中,从而把数据库所有操作记录记录下来(redo日志文件是循环使用的,历史的日志记录会被覆盖),而非归档模式就不会拥有归档文件。

2.1,查看是否开启归档

SQL> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     53

Next log sequence to archive   55

Current log sequence           55


Database log mode记录了数据库是否开启归档模式。Automatic archival表示自动归档为Enabled;Archive destination代表归档文件存放位置;Oldest online log sequence代表归档文件最老序列号;


查看v$database视图:

SQL> select log_mode from v$database;


LOG_MODE

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

ARCHIVELOG


查看v$instance视图:

SQL> select archiver from v$instance;


ARCHIVE

-------

STARTED


2.2,查看其它视图

查看归档文件信息:

SQL>select * from v$archived_log;


查看归档文件目标位置信息:

SQL>select * from v$archive_dest;


查看归档进程信息:

SQL>select * from v$archive_processes;


查看已备份的归档文件信息

SQL>select * fro v$backup_redolog;


2.3,归档操作

归档模式切换:

非归档模式转换归档模式:mount状态下,执行alter database archivelog,再打开数据库即可;归档模式转非归档:mount状态下,执行alter database noarchivelog,再打开数据库即可。


执行手动归档:

(1)对所有没有归档的重做日志进行归档:

SQL>ALTER SYSTEM ARCHIVE LOG ALL;


(2)当前的重做日志文件进行归档:

SQL>ALTER SYSTEM ARCHIVE CURRENT;


(3)指定日志序列号的重做日志文件进行归档

SQL>ALTER SYSTEM ARCHIVE LOG SEQUCNE 56;


(4)指定日志组编号的重做日志文件进行归档

SQL>ALTER SYSTEM ARCHIVE LOG GROUP 2;


(5)指定联机的重做日志文件进行归档

SQL>ALTER SYSTEM ARCHIVE LOG LOGFILE 'D:\oracle\oradata\work\REDO01.LOG ';


(6)将下一个没有归档的重做日志文件组进行归档:

SQL>ALTER SYSTEM ARCHIVE LOG NEXT


三、故障解决

3.1,日志不一致

对于unused和inactive的日志文件出现不一致情况,可以执行以下命令进行清空(active和current日志组不能进行清除):

SQL>alter database clear logfile group 4;


对于active状态的日志文件,在数据库启动过程中报不一致情况,可以执行:

SQL>alter database clear unarchived logfile group 4;


3.2,数据库因日志文件错误无法打开

数据库打开时,ora-00312和ora-00313错误,报日志文件丢失,不存在。如果数据库是正常关闭的,执行以下命令:

SQL>alter database clear logfile group n;


如果数据库非正常关闭,执行以下命令:

SQL>alter database clear logfile group n;

或者

SQL>alter database unarchived logfilegroup n;

执行完成后,日志文件报错,执行恢复:

SQL>recover database using backup controlfile;

再执行:

SQL>alter database open resetlog(归档模式下使用);


如果数据库能够打开,那么数据库可以正常使用。

如果是非归档模式下,就需要使用非常规手段打开数据库了。



后续将会继续学习日志文件dump内容研究和故障问题深入解决。



喜欢的朋友可以扫描以下二维码进行关注,公众号将每天更新文章:





  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值