Oracle11g redo log创建、添加、删除(重做日志组,重做日志文件)

一、获取redo log信息
1、v$log视图常用信息查询:
select group#, sequence#, members, bytes, status, archived from v$log;

select * from v$log;

查询输出:

SQL> select group#, sequence#, members, bytes, status, archived
from v$log;  2  

    GROUP#  SEQUENCE#	 MEMBERS      BYTES STATUS	 ARC
---------- ---------- ---------- ---------- -------- ---
	 1	  140	       2  104857600 CURRENT	   	     NO
	 2	  133	       2  104857600 INACTIVE	     NO
	 3	  137	       2  104857600 INACTIVE	     NO
	 4	  134	       2  104857600 INACTIVE	     NO
	 5	  135	       2  104857600 INACTIVE	     NO
	 6	  136	       2  104857600 INACTIVE	     NO
	 7	  138	       2  104857600 INACTIVE	     NO
	 8	  139	       2  104857600 INACTIVE	     NO

8 rows selected.

SQL>

其中各列含义
group:redo log组号
sequence:数据库产生的,每个redo log都有唯一的序列编号,以供将来进行数据库恢复使用
members:redo log中redo logfile数量
bytes:文件大小
status:redo log状态有以下几种:

  1. inactive:表示实例恢复已不再需要这组redo log了;(redo log在这个状态下才可以删除)
  2. active: 表示这组联机redo log是活动的但不是当前组,在实例恢复时需要这组联机redo log,如这组redo log正在归档;
  3. current: 表示这组联机redo log是当前组,并也隐含该联机redo log是活动的;
  4. unused: 表示Oracle服务器从来没有写过该组联机redo log,这是redo log刚被添加到数据库中状态。
2、v$logfile视图查询
col member for a45
select group#, status, type, member
from v$logfile;

该视图获取数据库中每一个redo log的每个成员、所在的目录、文件名以及他们的状态信息等
查询输出:

SQL> col member for a45
select group#, status, type, member
from v$logfile;SQL>   2  

    GROUP# STATUS  TYPE    MEMBER
---------- ------- ------- ---------------------------------------------
	 2	 		   ONLINE  /u01/app/oracle/oradata/orcl/redo02a.log
	 1	  		   ONLINE  /u01/app/oracle/oradata/orcl/redo01a.log
	 3	  		   ONLINE  /u01/app/oracle/oradata/orcl/redo03a.log
	 2	   		   ONLINE  /u01/app/oracle/oradata/orcl/redo02b.log
	 1	   		   ONLINE  /u01/app/oracle/oradata/orcl/redo01b.log
	 4	  		   ONLINE  /u01/app/oracle/oradata/orcl/redo04a.log
	 4	   		   ONLINE  /u01/app/oracle/oradata/orcl/redo04b.log
	 5	   		   ONLINE  /u01/app/oracle/oradata/orcl/redo05a.log
	 5	   		   ONLINE  /u01/app/oracle/oradata/orcl/redo05b.log
	 6	   		   ONLINE  /u01/app/oracle/oradata/orcl/redo06a.log
	 6	   		   ONLINE  /u01/app/oracle/oradata/orcl/redo06b.log

    GROUP# STATUS  TYPE    MEMBER
---------- ------- ------- ---------------------------------------------
	 7	   		   ONLINE  /u01/app/oracle/oradata/orcl/redo07a.log
	 7	   		   ONLINE  /u01/app/oracle/oradata/orcl/redo07b.log
	 8	  		   ONLINE  /u01/app/oracle/oradata/orcl/redo08a.log
	 8	  		   ONLINE  /u01/app/oracle/oradata/orcl/redo08b.log
	 3	  	       ONLINE  /u01/app/oracle/oradata/orcl/redo03b.log

16 rows selected.

SQL> 

在v$logfile视图中的redo log的status有以下几种:
空白:表示该文件正在使用。
stale:表示该文件中的内容是不完全的。
invalid:表示该文件不可以被访问。
deleted:表示该文件已不再有用了。

二、创建redo log

注意:在创建redo logfile时,会自动按照顺序创建新的redo log,如果之前的组号有缺失(比如没有第二组,本次创建的组号即为2组)

ALTER DATABASE ADD LOGFILE ('新创建redo logfile路径') SIZE 数值K/M/G;

例如:添加一个redo log,按照组号顺序排列为9组,redo log大小为100M,
其中只有一个redo logfile。

这里首先要明确一个概念,redo log与redo logfile的大小关系
一个redo log由可以由多个redo logfile组成,redo log的大小决定了其中每个redo logfile的大小,不是相加的关系,更像是并列的关系,
因为lgwt要在一个redo log中同时写其中的redo logfile,所以每一个redo logfile必须是一样大的,相当于给redo logfile做一个备份

alter database add logfile
('/u01/app/oracle/oradata/orcl/redo09a.log')
size 100M;

查询输出:

SQL> select group#, sequence#, members, bytes, status, archived
from v$log;  2  

    GROUP#  SEQUENCE#	 MEMBERS   BYTES STATUS	    	 ARC
---------- ------------ --------- ------ ---------- -------
	 1	  140	   		    2  104857600 CURRENT	     NO
	 2	  133	      		2  104857600 INACTIVE	     NO
	 3	  137	   		    2  104857600 INACTIVE	     NO
	 4	  134	     	    2  104857600 INACTIVE	     NO
	 5	  135	     	    2  104857600 INACTIVE	     NO
	 6	  136	      	    2  104857600 INACTIVE	     NO
	 7	  138	       		2  104857600 INACTIVE	     NO
	 8	  139	      	    2  104857600 INACTIVE	     NO
	 9	    0	            1  104857600 UNUSED	     	YES

9 rows selected.

SQL> 

刚刚添加的磁盘组状态为UNUSED,切换redo log即可使用
注意:在“CURRENT”状态的重组日志组不可修改,只有将CURRENT切换到其他组时才可以添加、删除redo log。

切换redo log命令:

alter system switch logfile;
三、添加redo logfile

在刚刚建好的第9组redo log中,再加入一个redo logfile(成员)

ALTER DATABASE ADD LOGFILE MEMBER '新创建redo logfile名路径' TO GROUP 组号;

示例:

alter database add logfile member '/u01/app/oracle/oradata/orcl/redo09b.log' to group 9;

查询输出:

SQL> select group#, sequence#, members, bytes, status, archived
from v$log;  2  

    GROUP#  SEQUENCE#	 MEMBERS      BYTES STATUS	     ARC
---------- ---------- ---------- ---------- ---------------- ---
	 1	  140	       2  104857600 CURRENT	     NO
	 2	  133	       2  104857600 INACTIVE	     NO
	 3	  137	       2  104857600 INACTIVE	     NO
	 4	  134	       2  104857600 INACTIVE	     NO
	 5	  135	       2  104857600 INACTIVE	     NO
	 6	  136	       2  104857600 INACTIVE	     NO
	 7	  138	       2  104857600 INACTIVE	     NO
	 8	  139	       2  104857600 INACTIVE	     NO
	 9	    0	       2  104857600 UNUSED	     YES

9 rows selected.

SQL> 

查询结果可以看到MEMBERS已经变成了2,这说明该组中有两个redo logfile(成员),使用v$logfile查看更直观一些
查询输出:

SQL> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER					                     IS_
---------- ------- ------- --------------------------------------------- ---
	 2	  			ONLINE  /u01/app/oracle/oradata/orcl/redo02a.log	 NO
	 1	   			ONLINE  /u01/app/oracle/oradata/orcl/redo01a.log	 NO
	 3	  			ONLINE  /u01/app/oracle/oradata/orcl/redo03a.log	 NO
	 2	   			ONLINE  /u01/app/oracle/oradata/orcl/redo02b.log	 NO
	 1	   			ONLINE  /u01/app/oracle/oradata/orcl/redo01b.log	 NO
	 4	   			ONLINE  /u01/app/oracle/oradata/orcl/redo04a.log	 NO
	 4	  			ONLINE  /u01/app/oracle/oradata/orcl/redo04b.log	 NO
	 5	   			ONLINE  /u01/app/oracle/oradata/orcl/redo05a.log	 NO
	 5	   			ONLINE  /u01/app/oracle/oradata/orcl/redo05b.log	 NO
	 6	  			ONLINE  /u01/app/oracle/oradata/orcl/redo06a.log	 NO
	 6	   			ONLINE  /u01/app/oracle/oradata/orcl/redo06b.log	 NO

    GROUP# STATUS  TYPE    MEMBER					                     IS_
---------- ------- ------- --------------------------------------------- ---
	 7	  			ONLINE  /u01/app/oracle/oradata/orcl/redo07a.log	 NO
	 7	   			ONLINE  /u01/app/oracle/oradata/orcl/redo07b.log	 NO
	 8	   			ONLINE  /u01/app/oracle/oradata/orcl/redo08a.log	 NO
	 8	   			ONLINE  /u01/app/oracle/oradata/orcl/redo08b.log	 NO
	 3	   			ONLINE  /u01/app/oracle/oradata/orcl/redo03b.log	 NO
	 9	   			ONLINE  /u01/app/oracle/oradata/orcl/redo09a.log	 NO
	 9 	   INVALID  ONLINE  /u01/app/oracle/oradata/orcl/redo09b.log	 NO

18 rows selected.

SQL> 

刚刚添加的redo09b.log文件的状态INVALID,日志文件组为UNUSED状态,切换redo log即可

四、删除redo logfile

在redo log 处于不活动的状态时,使用以下命令删除redo logfile

ALTER DATABASE DROP LOGFILE MEMBER'redo logfile路径名';

注意:这只是在数据库中删除了redo logfile,但redo logfile依然存在于存储中,需手动将存储中redo logfile删除。即彻底删除。

示例:删除第9组redo log 中的redo logfile

alter database drop logfile member'/u01/app/oracle/oradata/orcl/redo09b.log';

查询输出:

SQL> select group#, sequence#, members, bytes, status, archived
from v$log;
  2  
    GROUP#  SEQUENCE#	 MEMBERS      BYTES STATUS	     ARC
---------- ---------- ---------- ---------- ---------------- ---
	 1	  140	       2  104857600 CURRENT	    	 NO
	 2	  133	       2  104857600 INACTIVE	     NO
	 3	  137	       2  104857600 INACTIVE	     NO
	 4	  134	       2  104857600 INACTIVE	     NO
	 5	  135	       2  104857600 INACTIVE	     NO
	 6	  136	       2  104857600 INACTIVE	     NO
	 7	  138	       2  104857600 INACTIVE	     NO
	 8	  139	       2  104857600 INACTIVE	     NO
	 9	    0	       1  104857600 UNUSED	     	YES

9 rows selected.

SQL> 

可以看到第9组的redo logfile只剩下了一个

-rw-r-----  1 oracle oinstall 104858112 Dec 18 16:13 redo09a.log
-rw-r-----  1 oracle oinstall 104858112 Dec 18 16:23 redo09b.log

在存储中依然可以看到redo09b.log,使用“rm -rf redo09b.log” 彻底删除

五、删除redo log

在redo log处于不活跃的状态时使用下面命令删除

ALTER DATABASE DROP LOGFILE GROUP 组号;

示例输出:

SQL> alter database drop logfile group 9;

Database altered.

SQL> select group#, sequence#, members, bytes, status, archived
from v$log;  2  

    GROUP#  SEQUENCE# MEMBERS  BYTES    STATUS	     ARC
---------- ---------- ------- -------- ---------- ------
	 1	  140	       2  	 104857600 CURRENT	  	 NO
	 2	  133	       2  	 104857600 INACTIVE	     NO
	 3	  137	       2  	 104857600 INACTIVE	     NO
	 4	  134	       2  	 104857600 INACTIVE	     NO
	 5	  135	       2 	 104857600 INACTIVE	     NO
	 6	  136	       2 	 104857600 INACTIVE	     NO
	 7	  138	       2 	 104857600 INACTIVE	     NO
	 8	  139	       2  	 104857600 INACTIVE	     NO

8 rows selected.

SQL>

若删除报错,可能是redo log处于活跃状态,
使用 alter system switch logfile; 切换redo log组,或只能等待归档完毕才可删除。

至此结束,谢谢。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐