一、定义&作用
数据库中一种重要文件之一,它记录对于数据库的任何操作,比如记录DML或者DDL语句对数据库的更改,或者数据库结构的更改信息。当数据被意外的删除或者修改,我们就。以利用重做日志进行恢复,当例程失败或者介质失败时,也可以利用日志文件实现例程恢复或者介质恢复,所以日志文件时数据库中维护数据安全很重要的文件。
还有其他一些日志文件,比如归档日志,警告日志,跟踪日志等,其中跟踪日志分为用户信息跟踪日志和进程日志。
日志文件以组的单位,至少两个组,每组最少一个成员,推荐2个以上,所有组写满切换下一组,推荐切换时间15~20分钟,系统自动切换或者人工切换,人工切换时alter system switch logfile,所有组满了之后需要决定是否归档操作,如果归档,可以另外开启归档模式,否则日志文件将会覆盖掉。
原则:分散放开,日志所在盘IO要足够,IO读写需要快,不推荐raid5---读快写慢
二、查看
SQL> select GROUP#,status,type,member from v$logfile;
GROUP# STATUS TYPE MEMBER
---------- ------- ------- ----------------------------------------
3 ONLINE +DATA/vion/onlinelog/group_3.274.8440421
61
3 ONLINE +FRA/vion/onlinelog/group_3.263.84404216
7
2 ONLINE +DATA/vion/onlinelog/group_2.273.8440421
51
2 ONLINE +FRA/vion/onlinelog/group_2.262.84404215
9
GROUP# STATUS TYPE MEMBER
---------- ------- ------- ----------------------------------------
1 ONLINE +DATA/vion/onlinelog/group_1.272.8440421
45
1 ONLINE +FRA/vion/onlinelog/group_1.261.84404215
1
其中有状态列表示,invalid文件不可访问,stale文件内容不完全,deleted文件不再使用,空白表示文件正在使用中。
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- ---------- --- --------
FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
------------- --------- ------------ ---------
1 1 31 52428800 512 2 YES INACTIVE
1270238 27-DEC-14 1287496 27-DEC-14
2 1 32 52428800 512 2 YES INACTIVE
1287496 27-DEC-14 1305942 28-DEC-14
3 1 33 52428800 512 2 NO CURRENT
1305942 28-DEC-14 2.8147E+14
状态中,current表示当前联机重做日志组,说明该联机重做日志文件时活动的,inactive表示不可用,没有在一个循环内,有一个切换时候优先切换这类文件,active表示联机重做日志组诗活动的,重启之后需要验证的(删除之后重启库之后会发生不一致),但是并非当前联机重做日志文件组,崩溃恢复需要改状态的日志,可能归档了,或者没有。另外clearing表示正在执行alter database clear logfile命令,清空之后将变成空的日志,之后其状态变为unused,unused表示从未对联机重做日志文件组进行写入。
三、增加减少成员
增加
alter database add logfile [group n] ('XXX','XXX') size <> [,group n ('xxx')size <>];
alter database add logfile member 'XXX' to group <> [,'XXX' to group <>];
减少
v$log 状态中active和current是不可以删除的
alter database drop logfile member 'XXX','XXX';
alter database drop logfile group <> [group <>];
重命名,跟归档非归档没有关系只跟状态有关系,需要在unused或者inactive状态,active状态,并且数据库在归档模式下(如果是非归档时候需要在mount状态操作没有状态限制)
首先使用copy命令,asm需要用到rman
然后使用alter database rename file 'xxx' to 'xxx';即可
四、日志状态和监视
联系第二部,查看状态是否正确,并且查看文件是否存在,磁盘空间是否够用等。
查看切换时间间隔,如果时间间隔比较短,则需要增加日志文件大小:
SQL> select to_char(first_time,'yyyy-mm-dd hh24:mi:ss') time ,group# from v$log;
TIME GROUP#
------------------- ----------
2014-12-27 16:06:25 1
2014-12-27 20:07:05 2
2014-12-28 00:14:41 3
如果时间频繁,可以删除重建大的文件,
五、问题
1、如果启动之后提示不一致,需要清空alter database clear logfile group <>;需要在inactive
alter database clear unarchived logfile group <>;则可以清除归档后的active日志文件。
2、丢失
如果是一致关闭时候,使用步骤1中的清空指令即可,如果是非一致关闭,
a、归档模式下使用欺骗方法恢复,
recover database using backup controlfile
然后使用alter database open resetlogs;打开数据库
b、隐藏参数
alter system set "_allow_resetlogs_corruption"=true scope=spfile;
然后打开startup mount;alter database open resetlogs;
alter system reset "_allow_resetlogs_corruption" scope=spfile sid=‘*’;