如何清理Oracle11g RAC日志文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何清理Oracle11g RAC日志文件相关的知识,希望对你有一定的参考价值。

参考技术A 1.库日志
SQL> show parameter audit_file_dest
NAME TYPE VALUE
----------------------------------------------- ------------------------------
audit_file_dest string /oracle/admin/ora11g/adump
SQL> show parameter dump_dest
NAME TYPE VALUE
----------------------------------------------- ------------------------------
background_dump_dest string /oracle/diag/rdbms/ora11g/ora11g/trace
core_dump_dest string /oracle/diag/rdbms/ora11g/ora11g/cdump
user_dump_dest string /oracle/diag/rdbms/ora11g/ora11g/trace
2.集群日志

alert日志:
$CRS_HOME/grid/log/[hostname]/alert*.log
后台进程日志:
crsd.Log: $ORA_CRS_HOME/grid/log/[hostname]/crsd/crsd.Log
ocssd.Log: $ORA_CRS_HOME/grid/log/[hostname]/cssd/ocsd.Log
evmd.Log: $ORA_CRS_HOME/grid/log/[hostname]/evmd/evmd.Log

RAC 添加和删除日志文件组


首先oracle 日志文件组有六种状态:

日志文件组的状态一般有INACTIVE、ACTIVE、CURRENT、UNUSED、CLEARING、CLEARING_CURRNT等六种状态:

v$log 保存控制文件中的日志文件信息。

SQL> SELECT STATUS FROM V$LOG;

UNUSED : 表示该联机重做日志文件组对应的文件还从未被写入过数据,通常是刚刚创建的联机重做日志文件或重建后的联机重做日志文件。

CURRENT : 表示当前正在使用的日志文件组。该联机重做日志组是活动的。

ACTIVE : 表示该组是活动的但不是当前组,实例恢复时需要这组日志。如果处于这一状态,表示虽然当前并未使用,文件中的数据没有全部写入数据文件,一旦需要实例恢复,必须借助该文件中保存的内容。可以是已归档或没归档。

INACTIVE: 表示实例恢复已不再需要这组联机重做日志组了,文件中的数据全部写入数据文件。该组联机重做日志当前处于空闲状态。可以是已归档或没归档。如果数据库在归档模式,在未完成归档之前,日志文件也不允许被覆盖,这时候活动进程会处于Log File Switch(Archiving Needed)等待之中。

CLEARING:在执行了 ALTER DATABASE CLEAR LOGFILE 后,表示该组重做日志文件正被重建(重建后该状态会变成UNUSED)。

 

 

1.查看日志文件位置

SQL> set linesize 1200;

SQL> col status for a10

col type for a10

col member for a50

 

SQL> select group#,status,member from v$logfile; --这个命令主要是查看日志文件的位置和状态,可以看到日志文件一个存放的位置是在+DATA盘,另外一个日志文件是在+FRA盘。

GROUP#  STATUS     MEMBER

2     ONLINE      +DATA/oradb/onlinelog/group_2.262.981988427

2     ONLINE      +FRA/oradb/onlinelog/group_2.258.981988429

1     ONLINE      +DATA/oradb/onlinelog/group_1.261.981988425

1     ONLINE      +FRA/oradb/onlinelog/group_1.257.981988425

3     ONLINE      +DATA/oradb/onlinelog/group_3.266.981989841

3     ONLINE      +FRA/oradb/onlinelog/group_3.259.981989845

4     ONLINE      +DATA/oradb/onlinelog/group_4.267.981989849

4     ONLINE      +FRA/oradb/onlinelog/group_4.260.981989851

 

 

SQL> select group#,thread#,bytes/1024/1024 from v$log;  --这里可以看到一号节点对应有两个日志组1,2(thread#代表节点名称)。节点2对应两个日志文件组3,4。

 

    GROUP#    THREAD# BYTES/1024/1024

 1          1        50

 2          1        50

 3          2        50

 4          2        50

 

1.添加日志文件文件(每个节点都有自己的redo log file,在添加日志文件的时候要制定在哪个节点添加)

SQL> alter database add logfile thread 2 group 5 (+DATA/oradb/onlinelog/group5,+FRA/oradb/onlinelog/group5) size 50M;

Database altered.

之后查看是否添加成功

SQL> select group#,thread#,bytes/1024/1024 from v$log;

 

    GROUP#    THREAD# BYTES/1024/1024

 1     1         50

 2     1         50

 3     2         50

 4     2         50

 5     2         50  --可以看到多个一个日志组,属于节点2

 

 

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

GROUP#               MEMBER

2       +DATA/oradb/onlinelog/group_2.262.981988427

2    +FRA/oradb/onlinelog/group_2.258.981988429

1    +DATA/oradb/onlinelog/group_1.261.981988425

1    +FRA/oradb/onlinelog/group_1.257.981988425

3    +DATA/oradb/onlinelog/group_3.266.981989841

3    +FRA/oradb/onlinelog/group_3.259.981989845

4    +DATA/oradb/onlinelog/group_4.267.981989849

4    +FRA/oradb/onlinelog/group_4.260.981989851

5    +DATA/oradb/onlinelog/group5

5    +FRA/oradb/onlinelog/group5

这里可以发现创建的这个日志文件名字和之前默认日志文件名字不一样,只是group5,并不是默认的group_5.xxxxxxx。

[root@RAC1 ~]# su - grid

[grid@RAC1 ~]$ asmcmd

ASMCMD> ls -l

Type       Redund  Striped  Time             Sys  Name

N    group5 => +FRA/ORADB/ONLINELOG/group_5.281.984242583

ONLINELOG  UNPROT  COARSE   AUG 15 16:00:00  Y    group_1.257.981988425

ONLINELOG  UNPROT  COARSE   AUG 15 16:00:00  Y    group_2.258.981988429

ONLINELOG  UNPROT  COARSE   AUG 15 16:00:00  Y    group_3.259.981989845

ONLINELOG  UNPROT  COARSE   AUG 15 16:00:00  Y    group_4.260.981989851

ONLINELOG  UNPROT  COARSE   AUG 15 16:00:00  Y    group_5.281.984242583

通过上面可以看出添加的group5其实是一个链接,指向了真正的日志文件group_5.281.984242583,这个才是真实的物理文件。

 

 

2.删除,注意:如果删除的日志组状态为current或active,让其变为inactive。

SQL> select GROUP#,THREAD#,MEMBERS,ARCHIVED,STATUS from v$log;

 

    GROUP#    THREAD#  MEMBERS ARC STATUS

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

 1          1        2        NO  CURRENT

 2          1        2       YES INACTIVE

 3          2        2       YES INACTIVE

 4          2        2       YES INACTIVE

 5          2        2       YES INACTIVE

这里要删除实例1的group1里面的日志。因为处于CURRET状态,需要切换日志让其变为INACTIVE状态。。

 

SQL> alter system switch logfile;

 

System altered.

 

SQL> select GROUP#,THREAD#,MEMBERS,ARCHIVED,STATUS from v$log;

 

    GROUP#    THREAD#  MEMBERS ARC STATUS

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

 1     1               2    YES INACTIVE

 2     1               2    NO  CURRENT

 3     2               2    YES INACTIVE

 4     2               2    YES INACTIVE

 5     2               2    YES INACTIVE

我这里就不删除group1了,删除group1和删除group5的是一样,这里删除group5。

 

SQL> alter database drop logfile group 5;

Database altered.

SQL> select GROUP#,THREAD#,MEMBERS,ARCHIVED,STATUS from v$log;

 

    GROUP#    THREAD#  MEMBERS ARC STATUS

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

 1     1              2     YES  INACTIVE

 2     1              2      NO  CURRENT

 3     2              2     YES  INACTIVE

 4     2              2     YES  INACTIVE

这里可以看到日志组确实是删除了,但是这里有一个问题,其实在这里只是删除定义,即数据字典里面的信息,实际日志组里面的文件并没有删除,下次再去添加group5会报错。

SQL> alter database add logfile thread 2 group 5 (+DATA/oradb/onlinelog/group5,+FRA/oradb/onlinelog/group5) size 50M;

alter database add logfile thread 2 group 5 (+DATA/oradb/onlinelog/group5,+FRA/oradb/onlinelog/group5) size 50M

*

ERROR at line 1:

ORA-00301: error in adding log file +DATA/oradb/onlinelog/group5 - file

cannot be created

ORA-17502: ksfdcre:4 Failed to create file +DATA/oradb/onlinelog/group5

ORA-15005: name "oradb/onlinelog/group5" is already used by an existing alias

 

再去FRA和DATA下面查看。

[grid@RAC1 ~]$ asmcmd

ASMCMD> cd +FRA/oradb/onlinelog/

ASMCMD> ls

group5

group_1.257.981988425

group_2.258.981988429

group_3.259.981989845

group_4.260.981989851

group_5.281.984242583

可以group5对应的实际的物理文件并没有被删除,还是存在的,这里要删除这些物理文件。

ASMCMD> rm -rf group_5.281.984242583

ASMCMD> rm -rf group5

ASMCMD> ls

group_1.257.981988425

group_2.258.981988429

group_3.259.981989845

group_4.260.981989851

这里看到这样才算是删除了日志组对应的日志文件,要在+FRA/oradb/onlinelog/和+DATA/oradb/onlinelog/下面都要删除。这样才算删除干净了。

 

下次如果再去添加group5就不会报错了。

SQL> alter database add logfile thread 2 group 5 (+DATA/oradb/onlinelog/group5,+FRA/oradb/onlinelog/group5) size 50M;

Database altered.

SQL> select GROUP#,THREAD#,MEMBERS,ARCHIVED,STATUS from v$log;

 

    GROUP#    THREAD#  MEMBERS ARC STATUS

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

 1     1               2    YES INACTIVE

 2     1               2     NO  CURRENT

 3     2               2    YES INACTIVE

 4     2               2    YES INACTIVE

 5     2               2    YES UNUSED

 

以上是关于如何清理Oracle11g RAC日志文件的主要内容,如果未能解决你的问题,请参考以下文章

如何清理Oracle11g RAC日志文件

『ORACLE』 清理监听日志(11g)

oracle 11g rac开启归档日志和闪回

Oracle如何查看日志

oracle rac 监听日志在啥位置

Oracle11g监听器日志 listener.log文件过大处理