优于别人,并不高贵,真正的高贵应该是优于过去的自己。-------海明威
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
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内容研究和故障问题深入解决。
领取专属 10元无门槛券
私享最新 技术干货