Oracle11g redo log 创建、添加、删除(重做日志组,重做日志文件)
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#,
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状态有以下几种:
- inactive:表示实例恢复已不再需要这组redo log了;(redo log在这个状态下才可以删除)
- active: 表示这组联机redo log是活动的但不是当前组,在实例恢复时需要这组联机redo log,如这组redo log正在归档;
- current: 表示这组联机redo log是当前组,并也隐含该联机redo log是活动的;
- 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组,或只能等待归档完毕才可删除。
至此结束,谢谢。
更多推荐
所有评论(0)