发布网友
共2个回答
热心网友
第一步,查看当前日志
select a.group#,a.bytes/1024/1024||'M' log_size,a.status,b.member from v$log a
left join v$logfile b on A.GROUP#=b.group#
第二步,删除原有日志
注意事项:
a. 日志的当前状态必须是inactive的才可以删除,active状态说明日志中的记录还没有被同步到数据文件中,这个需要等待一定时间之后才会变成inactive状态;current状态是当前正在写的日志,也不能删除。
b. 日志组的数量不能低于2组。
删除日志命令:
如果当前只有group 2是inactive,所以只能删除group 2,使用以下删除命令:
alter database drop logfile group 2
当只剩下两组日志时,因为日志组不能低于2组,所以不能再删除,只能添加日志组之后再删除。
c. 执行删除之后该日志的物理文件还是存在的,可以删除,但是这个动作很危险,需要小心。
也可以不删除,如果再行创建的日志文件和原来的日志文件名称相同,可以在增加日志组(或者日志组成员)的命令中添加一个reuse选项。
第三步,添加新的日志
可以使用批量命令:
alterdatabaseaddlogfile group4'/data/log/REDO_LOG04.log'size 500M,
group5'/data/log/REDO_LOG05.log'size 500M,
group6'/data/log/REDO_LOG06.log'size 500M;
当日志状态为active的时候,我们要改变它的大小,但是又无法删除,我们需要使用命令:
altersystemswitchlogfile;改变current log
改变之后,currentlog变成第2组日志,第1组日志状态为active,再等待一定时间其状态变为inactive的时候就可以删除了。
如果日志组1的状态长时间不改变,可以执行手动生成检查点命令:altersystemcheckpoint
热心网友
1.查看当前日志组成员
SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
/u01/oracle/oradata/orcl/redo03.log
/u01/oracle/oradata/orcl/redo02.log
/u01/oracle/oradata/orcl/redo01.log
2. 查看当前日志组状态:
SQL> select group#,members,bytes/1024/1024,status from v$log;
GROUP# MEMBERS BYTES/1024/1024 STATUS
---------- ---------- --------------- ----------------
1 1 50 ACTIVE
2 1 50 CURRENT
3 1 50 INACTIVE
现在有三个日志成员,大小为50M,欲更改为100M
增加日志组
SQL>alter database add logfile group 4 ('/u01/oracle/oradata/orcl/redo04.log') size 100M;
SQL>alter database add logfile group 5 ('/u01/oracle/oradata/orcl/redo05.log') size 100M;
SQL>alter database add logfile group 6 ('/u01/oracle/oradata/orcl/redo06.log') size 100M;
3.切换到新增的日志组上
SQL> alter system switch logfile;
System altered.
SQL> alter system switch logfile;
System altered.
SQL> select group#,members,bytes/1024/1024,status from v$log
GROUP# MEMBERS BYTES/1024/1024 STATUS
---------- ---------- --------------- ----------------
1 1 50 INACTIVE
2 1 50 INACTIVE
3 1 50 ACTIVE
4 1 100 CURRENT
5 1 100 UNUSED
6 1 100 UNUSED
a. CURRENT指当前的日志文件,在进行实例恢复时是必须的;
b. ACTIVE是指活动的非当前日志,在进行实例恢复时会被用到。Active状态意味着,Checkpoint尚未完成,因此该日志文件不能被覆盖。
c. INACTIVE是非活动日志,在实例恢复时不再需要,但在介质恢复时可能需要。
d. UNUSED表示该日志从未被写入,可能是刚添加的,或RESETLOGS后被重置。
4.删除旧的日志组
SQL> alter database drop logfile group 1;
Database altered.
SQL> alter database drop logfile group 2
2 /
Database altered.
SQL> alter database drop logfile group 3;
alter database drop logfile group 3
*
ERROR at line 1:
ORA-01624: log 3 needed for crash recovery of instance dbserver (thread 1)
ORA-00312: online log 3 thread 1: '/u01/oracle/oradata/orcl/redo03.log'
由于log 3 日志成员还出去active 状态,所以不能drop掉的,再次执行 alter system switch logfile;
SQL> select group#,members,bytes/1024/1024,status from v$log;
GROUP# MEMBERS BYTES/1024/1024 STATUS
---------- ---------- --------------- ----------------
3 1 50 INACTIVE
4 1 100 ACTIVE
5 1 100 CURRENT
6 1 100 UNUSED
SQL> alter database drop logfile group 3;
Database altered.
SQL> select group#,members,bytes/1024/1024,status from v$log;
GROUP# MEMBERS BYTES/1024/1024 STATUS
---------- ---------- --------------- ----------------
4 1 100 ACTIVE
5 1 100 ACTIVE
6 1 100 CURRENT
在操作系统下删除掉redolog 日志文件
mv /u01/oracle/oradata/orcl/redo0[1-3].log /tmp