日志分类 | redo log files联机日志或重做日志 archived log files归档日志 1184198alert log files 告警日志 trace files user_ _dump_ _dest 用户信息日志如跟踪会话日志 background dump_ dest进程日志还有其他一-些不常用的日志 v$database的log_mode 数据库归档模式 v$archived_log 控制文件中已经归档的日志文件信息 v$archive_dest 所有归档目标 v$archive_processes 已启动的归档进程状态 v$archive_redolog 已经备份的归档日志信息 |
|
redo log files 重做日志分为在线重做日志和归档重做日志。 online Redo log files--在线重做日志,又称联机重做日志,指Oracle以SQL脚本的形式实时记录数据库的数据更新,换句话说,实时保 存已执行的SQL脚本到在线日志文件中(按特定的格式)。 Archive Redo log files--归档重做日志,简称归档日志,指当条件满足时,Oracle将在线重做日志以文件形式保存到硬盘(持久化)。 重做日志文件是数据库中一种非常重要的日志文件,也是其一一个很有特色的功能。 重做日志文件会记录对于数据库的任何操作,如利用DML语句或者DDL语句对数据进行更改,或者数据库管理员对数据库结构进行更改,都会在重做日志中进行记录。 当数据被意外的删除或者修改,我们可以利用重新日志文件进行恢复;当出现例程失败或者介质失败的情况下,也可以利用日志文件实现例程恢复或者介质恢复。所以说,我们若能够管理好重做日志文件的话,对于保障数据 库数据的安全是非常重要的。 联机重做日志有以下特性: 1.记录所有对数据的改变 2.提供恢复机制 3.能够被分组 4.至少需要两个日志组 当前归档日志组写满后,Oracle会切换到下一日志组,继续写入,就这样循环切换;当处于归档模式下,切换至原已写满的日志组,若该日志组归档完毕则覆盖写入,若没有则只能使用日志缓冲区,等待归档完毕之后才能覆盖写入。当然,处于非归档模式下是直接覆盖写入的 Oracle提供了2个视图用于维护在线重做日志:V$LOG 和 V$LOGFILE,我们可以通过这两个视图查看和修改在线日志 |
工作机制 | 1.联机重做日志文件是循环使用的. 2.当一个联机重做日志文件被写满了,LGWR将移到下个联机重做日志文件组.被称为日志切换,同时发生检查点,信息将被写入控制文件 3.redo log是二进制文件 4.日志文件的组织模式是组组下是成员至少两个组 5.组和组是平等的关系 6.实例同- -时刻只能向-一个组写日志 7.-个组写满了,写下一个组,这个过程叫WiTCH自动切换和手工切换 8.日志切换产生checkpoint有增量检测和完全检测两种 9.完全检测:一致性 SHUTDOWN时;alter system checkpoint, 结果为:所有的脏数据块写入文件,改写文件头的信息 参数log._ checkpoints_to_alert=true 决定检测点的信息写入报警日志,如果将日志文件转出到DUMP中 select * from v$log; select to_char(first_time, 'yyyy-mm-dd') day2 from v$log_history group by day2,
alter session set events 'immediate trace name redohdr level n';增加|减少日志组的成员, select to_number('fffffffffff','xxxxxxxxxxxxxxxxxx')from dual; |
Redo写的触发条件: | 1,每三秒钟超时(timeout): 当LGWR处于空闲状态时,它依赖于rdbms rpc message等待事件,处于休眠状态,直到三秒时间到,如果这个时候LGWRf发现有Redo信息需要写出的话,那么LGWR将执行写的操作,log file parallel write等待事件将会出现。 2.阀值的达到: Redo log buffer 1/3满; Redo log buffer拥有1MB的脏数据; 参数_ log _io _size的设置很重要,一般为 log_buffer 的1/3大小 3.用户提交: 当一个transaction 提交的时候,在Redo stream 中将记录一-个 提交标志。在这些Redo被写到磁盘上之前,这个transaction是不能恢复的。所以,在transaction返回成功标志之前,必须等待LGWR写的完成。进程通知LGWR写,并且以log file sync事件开始休眠。超时为1秒 4.在DBWn写之前: 如果DBWR将要写出的数据的高RBA超过LGWR的on-diskRBA,则DBWR将通知LGWR执行写的操作,在Oracle8i之前,此时DBWR将等待Log file sync事件。从Oracle8i开始,DBWR把这些block(将要写出的block,这种block的高RBA超过了LGWR的on-diskRBA)放入defer队列中,同时通知LGVR执行Redo写出。 注: logbufferspace等待事件说明logbuffer空间不够用了。 |
redo日志文件管理 | 规划原则:分散放开到不同的硬盘,日志所在盘的IO要足够,IO读写都要快增加减少日志成员或组日志状态与监视处理日志异常[日志不一-致,日志丢失,日志损坏] 增加减少日志成员或组: alter database add logfle group < member(<dir>' <dir>) size < ;alter database add logfile member dir' to group < D;alter database drop logfile ‘dir'; alter database drop logfile group |
redo日志文件的状态 | UNUSED:表示从未对联机重做日志文件组进行写入。这是刚添加的联机重做日志文件的状态 |
CURRENT:表示当前的联机重做日志文件组。这说明该联机重做日志文件组是活动的 |
ACTIVE:表示联机重做日志文件组是活动的,但是并非当前联机重做日志文件组。崩溃恢复需要该状态。它可用于块恢复。它可能已归档,也可能未归档 |
CLEARING:表示在执行ALTER DATABASE CLEAR LOGFILE命令后正在将该日志重建为一个空日志。日志清除后,其状态更改为 |
CLEARING_ CURRENT:表示正在清除当前日志文件中的已关闭线程。如果切换时发生某些故障,如写入新日志标头时发生了输入/输出(I/O) 错误,则日志可能处于此状态。 |
INACTIVE:表示例程恢复不再需要联机重做文件日志组。它可能已归档,也可能未归档。 注:处于active的日志文件组无法删除,因为这个日志文件组可能会在实例恢复的时候使用。 我们可以使用alter database checkpoint命令手动的创建一个检查点,来是active的日志文件组变成inactive的日志文件组,这一点在扩容日志文件组(先删除再添加)的时候会用到! 可以使用alter system switch logfile命令手动的切换日志文件组 另外在说一下active和inactive的一些区别,其实这两种状态的重做日志都是已经归档的,不同的只是,active状态的重做日志文件组是在实例恢复的时候被需要的,因为有一些事务虽然已经提交了,但是这些记录的更改还没有写到datafile中,如果这个时候实例一旦失败(断电或者其他的突发情况),在进行实例恢复的时候会需要这些active状态的日志文件组,每过一段时间,当系统负载不是很大的时候,Oracle会尝试将内存中的数据写入到datafile中,这个时候active的日志文件组就会变成inactive状态,我们可以使用alter database checkpoint强制来执行这个过程;而inactive是在实例恢复的时候不被需要的日志文件组。 |
V$logfile的status | INVALID:表明该文件不可访问STALE:表示文件内容不完全 stale表示文件内容不完全 deleted表示文件已经不再使用 空白表示文件在使用中 |
| 要确定一个数据库例程的联机重做日志文件的合适数量,您必须测试不同的配置。在某些情况下,数据库例程可能只需要两个组。在其它情况下,数据库例程可能需要更多的组以保证各个组始终可供LGWR使用。例如,如果LGWR跟踪文件或警报文件中的消息表明LGWR经常不得不因为检查点操作尚未完成或者组尚未归档而等待,您就需要添加组。
尽管Oracle服务器允许多元备份的组可以包含不同数量的成员,但应该尽量建立对称配置。不对称配置应只是非常情况( 如磁盘故障)的临时结果。
联机重做日志文件的位置: .
对联机重做日志文件进行多元备份时,请将组内的成员放置在不同磁盘上。这样,即使一个成员不可用而其它成员可用,该例程也不会关闭。将归档日志文件和联机重做日志文件分放在不同磁盘上,以减少ARCn和LGWR后台进程之间的争用。
数据文件和联机重做日志文件应当放置在不同的磁盘上以减少LGWR和DBWn的争用,并降低发生介质故障时同时丢失数据文件和联机重做日志文件的风险。
调整联机重做日弯文件的大小:
联机重做日志文件最小为50 KB,最大文件大小视操作系统而定。不同组的成员可以有不同的大小:但是,大小不同的组不会带来任何好处。
只有当需要更改联机重做日志组的成员大小时,才需要大小不同的组作为临时结果。在, 有不同的大小:但是,大小不同的组不会带来任何好处 |
| -添加新的重做日志文件组,group 4 可以缺省,大小最好10M到50M之间
select * from v$logfile;
alter database add logfile group 4
'F:\APP\HANLIN\ORADATA\ORCL\REDO04.LOG' size 20M;
多个成员
alter database add logfile group 6
('F:\APP\HANLIN\ORADATA\ORCL\REDO06_A.LOG',
'F:\APP\HANLIN\ORADATA\ORCL\REDO06_B.LOG')size 20M;
————————————————
下面语句只修改数据字典和控制文件,不删除实际文件
alter database drop logfile group 4;
下面语句清空重做日志文件
alter database clear logfile group 4;alter database add logfile member
'F:\APP\HANLIN\ORADATA\ORCL\REDO04_B.LOG' to group 4;
删除日志成员(只修改数据字典和控制文件,不删除实际文件)
alter database drop logfile member
'F:\APP\HANLIN\ORADATA\ORCL\REDO04_B.LOG'
更改重做日志文件的位置或名称的步骤:
shutdown;
复制日志文件,修改日志文件名称
startup mount;
--举例两个成员的路径和名称修改
alter database rename file
'成员1j旧路径\新文件名','成员2旧路径\新文件名'
to
''成员1新路径\新文件名,'成员2新路径\新文件名';
alter database open; |
| alter system set 1og_ archive_ dest_ 2 =’SERVICE=standby1' ;alter system set 1og_ _archive_ format =’arch_ _%t_ _%s_ _%r. arc' ;
co1 dest_ name format a20;col destination format a30;
select dest_ _name, status, archiver, destination, 1og_ _sequence, reopen_ _secs, transmit_ _mode, processfrom vSarchive_ dest;
selectname, sequence#, registrar, standby_ dest, archived, status from v$archived_ 1og;
v$archived_ 1ogvSarchive_ destv$1og_ historyv$database
vSarchive_ processes
-->从控制文件中获得归档的相关信息-->归档路径及状态
-->控制文件中日志的历史信息-->查看数据库是否处于归档状态-->归档相关的后台进程信息
select * from v$logfile;
select member, bytes/1024/1024 from v$1og a, v$logfile bwhere a. group#=b. group#
select NAME, STATUS from v$archived_ 1og; |
| Log buffer大小设置
9i以前,- -般是3M
在10g中ORACLE会自动调整它的值,他遵循这样一个原则,’Fixed SGA Size' +’Redo Buffers' 是granule size的整数倍;select * from vSsgainfo where. name in (' Fixed SGA Size' ,’Redo Buffers' ,’Granule Size’ ) ;--在10.2.0.3中Log Buffer 默认值是14M,在10.2.0. 4中,默认值是15Mselect * from vSversion where rownum<2;8、LGWR触发条件:Write- Ahead-Log: 日志写入优先
1.用户提交
2.有1/3重做日志缓冲区未被写入磁盘
3.有大于1M的重做日志缓冲区未被写入磁盘4.每隔3秒钟
5. DBWR需要写入的数据的SCN大于LGWR记录的SCN,DBWR触 发LGWR写入9、L0G优化建议
在OLTP 系统上,REDO LOG文件的写操作主要是小型的,比较频繁,一般的写大小在几K,而每秒钟产生的写I0次数会达到几十次,数百次甚至_上千次。因此REDO LOG文件适合存放于IOPS 较高的转速较快的磁盘上,I0PS仅能达到数百次的SATA盘不适合存放REDO LOG文件。另外由于REDO LOG文件的写入是串行的,因此对于REDO LOG文件所做的底层条带化处理,对于REDO LOG写性能的提升是十分有限的。10、REDO LOG切换的时间应该尽可能的不低于10-20分钟
select to_ char (FIRST _TIME,’ yyy-mm-dd hh24:mi:ss' ) f. _time, SEQUENCE# from vS1og_ history11、日志相关的一-些操作
alter database add logfile group 5_ ’/opt/ orac1e/ oradata/ dbtest/redo05_ 1. 1og’ SIZE 10Malter database add 1ogfile member' / opt/ oracle/ oradata/ dbtest/redo04_ 3. 1og’to group 4alter database drop logfile group 5
alter database drop logfile (' /opt/oracle/ oradata/ dbtest/redo05_ 1. 1og' ,’/opt/ oracle/ oradata/ dbtest/redo05_ 2. 1og' )\\ |