忠告:
- 在下述操作前进行数据库完全备份
- 在下述操作后进行控制文件(control file)的备份
查询logfile相关信息:
- 查询日志文件位置和状态
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER
---------- ------- ------- --------------------------------------------------
3 ONLINE /u01/app/Oracle/oradata/knitter/redo03.log
2 ONLINE /u01/app/oracle/oradata/knitter/redo02.log
1 ONLINE /u01/app/oracle/oradata/knitter/redo01.log
4 ONLINE /u01/app/oracle/oradata/knitter/redo04.rdo
4 INVALID ONLINE /u01/app/oracle/oradata/knitter/redo04_02.rdo
- 查询日志组序号和状态
SQL> SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;
GROUP# ARC STATUS
---------- --- ----------------
1 NO CURRENT
2 YES INACTIVE
3 YES INACTIVE
4 YES INACTIVE
- 查询日志历史
SQL> select * from V$LOG_HISTORY;
RECID STAMP THREAD# SEQUENCE# FIRST_CHANGE# FIRST_TIM NEXT_CHANGE#
---------- ---------- ---------- ---------- ------------- --------- ------------
1 716304893 1 1 158900 01-APR-10 260498
2 716317218 1 2 260498 14-APR-10 296893
3 716317260 1 3 296893 14-APR-10 296990
4 716319163 1 4 296990 14-APR-10 303247
5 716319176 1 5 303247 14-APR-10 303252
6 716384800 1 6 303252 14-APR-10 332583
7 716384854 1 7 332583 15-APR-10 332775
8 716384882 1 8 332775 15-APR-10 332881
9 716384892 1 9 332881 15-APR-10 332889
============================================================================================
- 不指定组号(将自动使用组号: 当前最大组号+1)
ALTER DATABASE
ADD LOGFILE ('/oracle/dbs/log1c.rdo', '/oracle/dbs/log2c.rdo') SIZE 500K;
- 指定组号
ALTER DATABASE
ADD LOGFILE GROUP 10 ('/oracle/dbs/log1c.rdo', '/oracle/dbs/log2c.rdo')
SIZE 500K;
- 指定组号
ALTER DATABASE ADD LOGFILE MEMBER
'/oracle/dbs/log2b.rdo'
TO GROUP 2;
ALTER DATABASE ADD LOGFILE MEMBER
'/u01/app/oracle/oradata/knitter/redo05_3.rdo',
'/u01/app/oracle/oradata/knitter/redo05_4.rdo' TO GROUP 5;
- 不指定组号,指定所有组成员
ALTER DATABASE ADD LOGFILE MEMBER '/oracle/dbs/log2c.rdo'
TO ('/oracle/dbs/log2a.rdo', '/oracle/dbs/log2b.rdo');
说明: 在增加组成员的时候, 不能指定logfile文件大小,因为同一组(logGroup)中所有member文件是完全一样的(大小、内容),Oracle将自动根据已有组员确定其大小。如果指定了大小,将会出错,如:
SQL> alter database add logfile member '/oracle/dbs/log1f.rdo' size 100k to group 5;
alter database add logfile member '/oracle/dbs/log1f.rdo' size 100k to group 5
*
ERROR at line 1:
ORA-00946: missing TO keyword
前提条件:
- 无法删除组中的最后一个成员
- 所在组状态不能为 active 或 current, 否则必须先进行日志切换(log switch)
- 如果数据库处于归档模式,必须(通过强制日志切换)先确保待删除组成员中的信息已经被归档
- 强制切换日志
ALTER SYSTEM SWITCH LOGFILE;
然后通过如下语句查询,确保待操作组不为active或current状态:
SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;
- 删除组成员
ALTER DATABASE DROP LOGFILE MEMBER '/oracle/dbs/log3c.rdo';
说明:
- 上述操作完成后,只是删除了Oracle中的相关记录信息,
还应该使用操作系统删除指令,删除硬盘上相应的日志文件
前提条件:
- 最起码要有两个组
- 所在组状态不能为 active 或 current, 否则必须先进行日志切换(log switch)
- 如果数据库处于归档模式,必须(通过强制日志切换)先确保待删除组成员中的信息已经被归档
- 强制切换日志
ALTER SYSTEM SWITCH LOGFILE;
然后通过如下语句查询,确保待操作组不为active或current状态:
SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;
- 删除组
ALTER DATABASE DROP LOGFILE GROUP 3;
说明:
- 上述操作完成后,只是删除了Oracle中的相关记录信息,
还应该使用操作系统删除指令,删除硬盘上相应的日志文件
说明:
- 上述操作完成后,只是删除了Oracle中的相关记录信息,
还应该使用操作系统删除指令,删除硬盘上相应的日志文件
- 方法一
增加一个新的日志组成员,删除原有组成员, 以达到移动和重命名的效果
- 方法二
SQL> shutdown;
SQL> startup mount;
ALTER DATABASE
RENAME FILE '/diska/logs/log1a.rdo', '/diska/logs/log2a.rdo'
TO '/diskc/logs/log1c.rdo', '/diskc/logs/log2c.rdo';
SQL> alter database open;
忠告: 在清空未归档日志文件前,进行数据库完全备份
使用场景:
日志文件无法Drop, 常见有如下情况
- 只有两组日志文件(不允许Drop)
- 待处理日志文件处于current状态组
指令:
- 清空前自动归档:
ALTER DATABASE CLEAR LOGFILE GROUP 3;
- 如果待清空日志文件数据已经损坏,同时数据库处于归档模式。此时,为了避免该损坏日志文件被归档,可使用如下指令:
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 3;