RAC 添加和删除日志文件组
Posted wx5bcd2f496a1cf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于RAC 添加和删除日志文件组的主要内容,如果未能解决你的问题,请参考以下文章
Oracle Rac数据文件和归档日志文件在ASM磁盘组上出现双份现象分析解决