`
wsql
  • 浏览: 12098057 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

REDO管理

 
阅读更多
一、什么是REDO LOG

 REDOLOG文件是十分重要的文件,它记录了Oracle的所有变化,是数据库实例恢复机制中最为关键的组成部分。


sys@OCM> select * from v$log;


GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------- ------------ --------------
1 1 49 52428800 512 1 YES INACTIVE 2701394 09-3ÔÂ -13 2711001 09-3ÔÂ -13
2 1 50 52428800 512 1 YES INACTIVE 2711001 09-3ÔÂ -13 2732482 10-3ÔÂ -13
3 1 51 52428800 512 1 NO CURRENT 2732482 10-3ÔÂ -13 2.8147E+14



sys@OCM> col member for a50
sys@OCM> select * from v$logfile;


GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
3 ONLINE /u01/app/oracle/oradata/ocm/redo03.log NO
2 ONLINE /u01/app/oracle/oradata/ocm/redo02.log NO
1 ONLINE /u01/app/oracle/oradata/ocm/redo01.log NO


二、REDO LOG的作用

1、记录ORACLE数据库的变化


2、可以避免数据提交后直接写入数据文件


3、实例恢复和介质恢复


三、REDO LOG的块
1、块的大小

(1)dbfsize redo01.log


(2)SELECT DISTINCT BLOCK_SIZE FROM V$ARCHIVED_LOG;


(3)SELECT MAX(LEBSZ) FROM X$KCCLE;


 (4)日志文件头的内容

 ALTER SESSION SET EVENTS 'immediate trace name redohdr level 10';


2、REDO的内容

 (1)改变矢量(Change Vector)


(2)重做记录(Redo Record)


 (3)一条插入的产生的日志
create table t5(id int,name varchar2(100));
select max(ktuxescnw * power(2,32)+ktuxescnb) from x$ktuxe;--[K]ernel [T]ransaction [U]ndo Transa[x]tion Entry
insert into t5 values(1,'AAAAAA');
commit;
select max(ktuxescnw * power(2,32)+ktuxescnb) from x$ktuxe;
alter system dump logfile '/u01/app/oracle/oradata/ocp/redo02.log' scn min 1694394 scn max 1693357;


四、和REDO LOG性能相关的组件

1、记录实例中的数据库变化


2、顺序存取


3、环状的缓冲区


4、LOG_BUFFER定义了缓冲区的大小

   (1)9i以前,一般是3M


   (2)在10g中ORACLE会自动调整它的值,他遵循这样一个原则,'Fixed SGA Size'+ 'Redo Buffers'是granule size 的整数倍
select * from v$sgainfo where name in ('Fixed SGA Size','Redo Buffers','Granule Size');
--在10.2.0.3 中Log Buffer 默认值是14M,在10.2.0.4中,默认值是15M
select * from v$version where rownum<2;


5、LGWR
(1)、LGWR写的具体过程:

   ①先尝试获取redo writing latch,确保其他process不会继续触发lgwr(这里可能会产生log file sync等待事件)


  ②获取redo allocation latch(public redo allocation latch),防止有新的change vector继续写入log buffer,造成LGWR无法确定应该写多少redo


  ③LGWR确定写的范围(从上次lgwr启动所写的最后一个日志块到这个时间点时的最后一个被使用的所有写满or未写满的日志块)此时前台process仍可以向这个范围内的redo block(buffer)写内容(从PGA写)所以lgwr不阻碍其它进程获得redo copy latch(即:不阻止其它进程向log buffer 中可用块中写change vector)


  ④确定redo block(buffer)后生成新SCN号


  ⑤LGWR释放redo allocation latch与redo writing latch


  ⑥LGWR需要等待 其它进程对要写入日志文件的block的更新操作完成(pga-log buffer的操作),通过判断日志block(buffer)上的redo copy latch是否都释放


  ⑦将第4步scn号copy到要写入logfile的log buffer的块头里,然后触发物理的写操作,将这些待写日志块写入redo file


(2)LGWR触发写日志的条件:

①LGWR每3秒钟

 commit;

③LOG_BUFFER写入的数量超过LOG BUFFER的1/3


④LOG BUFFER中有超过1M的数据


⑤DBWR写入数据文件之前,DBWR需要写入的数据的SCN大于LGWR记录的SCN,DBWR触LGWR写入(日志优先)


6、REDO LOG组

(1)Oracle循环使用REDO LOG组


(2)REDO LOG组的数量对数据库的影响

①日志切换等待


②系统由于等待日志切换而HANG住


(3)REDO LOG组的数量

①缺省3组(10g)


②根据实际需要设置


③增加日志组的数量对数据库性能无直接影响


④可在线添加日志组
alter database add logfile group 4 '/opt/oracle/oradata/dbtest/redo04_1.log' SIZE 100M
alter database drop logfile group 1;
alter system siwtch logfile;

7、REDO LOG组的镜像

(1)REDO LOG镜像的主要目的是加强REDO LOG的安全性


(2)镜像设置的原则

①同一个数据库中设置镜像的规则应该一致 --不同的日志组设相同的成员



②多个镜像文件应该存放在不同的VG或者文件系统上 --坏一个vg不影响数据库


③不同镜像最好能够分布在不同的磁盘上 --IO


④镜像的数量以一个为宜 --IO


(3)镜像对数据库性能的影响

①REDO LOG镜像会消耗较多的IO资源


②IO性能不佳的系统慎用


③小型写性能不佳的系统慎用
alter database add logfile member '/opt/oracle/oradata/dbtest/redo04_3.log' to group 4
alter database drop logfile member '/u01/app/oracle/oradata/ocp/redo01_2.log';


8、日志切换
(1)日志切换的场景

 ①当前日志文件满后


 ②ALTER SYSTEM SWITCH LOGFILE;


 ③ALTER SYSTEM ARCHIVE LOG CURRENT;--所有实例的当前日志


(2)日志切换的过程

 ①读控制文件,选择下一个日志文件,并清除控制文件中的相关记录。如果DBW进程正在进行日志切换检查点,或者ARCHn进程正在归档日志内容,那么LGWR会等待这些操作完成才进行日志切换工作。


 ②把当前没有存盘的所有LOG BUFFER都写入磁盘,然后把最后一个REDO记录的SCN写入LOG文件的头块中。完成这些操作后,LGWR关闭当前的日志文件。


 ③进行第二次读控制文件,把下一个日志文件的状态设置为CURRENT,老的日志文件修改为ACTIVE。当DBW完成日志切换检查点和归档操作后,这个日志文件的状态会被改为INACTIVE。


 ④打开新日志文件的所有成员(如果组中有超过1个成员),并在文件头中写入一个新的日志序列号和low SCN。然后修改SGA控制变量,允许生成REDO信息。要注意的是,因为写入文件头的信息包括文件编号,因此写文件头的操作不是并行操作,对于同组的不同成员,写入的数据不是完全一致的。


五、性能相关

1、REDO LOG文件的大小与日志切换

(1)日志切换对系统性能的影响


①日志文件切换时,系统将处于完全的等待状态


②日志文件切换过于频繁,会影响系统的性能


③日志文件切换时间过长,会严重影响系统的性能


(2)日志切换与日志文件的大小

①日志文件越小,日志切换越频繁


②日志文件越大,每个日志文件中包含的变化越多


③日志文件切换以10-30分钟为宜


④日志文件大小一般在100M-2000M之间


(3)问题场景
Thread 1 cannot allocate new log,sequence 69
Checkpoint not complete
current log#2 seq# 68 mem# 0:/oradata/bxdb/redo02.log
等待事件:
log file switch(checkpoint incomplete)
log file switch(archiving needed)


2、等待事件:log file sync
(1)问题场景
发出commit:

开始commit-->logfile sync等待开始--->lgwr开始-->lgwr完成(IO)-->logfile sync等待结束--commit完成


(2)解决方法:

①IO性能来解决这个问题:RAID 5--->RAID 1+0


②加大LOG BUFFER


③减少提交的次数


④把部分经常提交的事务设置为异步提交:ALTER SESSION SET COMMIT_WRITE = NOWAIT;



(3)nologging使用
表空间:1.nologgin,2.force logging
alter tablespace test3 nologging;
create table a(id int) tablespace test3; //test3-->nologging
alter tablespace test3 no force logging;
表:1.no force logging start 2.表本身no logging(alter table a nologging;) 3.使用append插入
insert /*+ append */ into test3 select * from t3;
*************supplemental
select supplemental_log_data_min,supplemental_log_data_pk from v$databae;
alter database add supplemental log data; --rowid
alter database add supplemental log data(primary key) columns; --primary


六、开启归档模式
SELECT log_mode FROM v$database;
ARCHIVE LOG LIST;
alter system set log_archive_dest_1 = 'LOCATION=/u01/app/oracle/archivelog3';
shutdown immediate;
startup mount;
alter database archivelog;
select dest_name,status,archiver,destination,log_sequence,reopen_secs,transmit_mode,process
from v$archive_dest; --归档路径及状态
select name,sequence#,registrar,standby_dest,archived,status from v$archived_log;--从控制文件中获得归档的相关信息
v$log_history --控制文件中日志的历史信息
v$archive_processes --归档相关的后台进程信息

select member,bytes/1024/1024 from v$log a,v$logfile b where a.group#=b.group#;





**********本博客所有内容均为原创,如有转载请注明作者和出处!!!**********
Name: guoyJoe

QQ: 252803295

Email: oracledba_cn@hotmail.com

Blog:http://blog.csdn.net/guoyJoe

ITPUB:http://www.itpub.net/space-uid-28460966.html

OCM:http://education.oracle.com/education/otn/YGuo.HTM
_____________________________________________________________
加群验证问题:哪些SGA结构是必需的,哪些是可选的?否则拒绝申请!!!

答案在:http://blog.csdn.net/guoyjoe/article/details/8624392

Oracle@Paradise  总群:127149411

Oracle@Paradise No.1群:177089463(已满)

Oracle@Paradise No.2群:121341761

Oracle@Paradise No.3群:140856036



分享到:
评论

相关推荐

    RAC下的REDO和UNDO管理

    **REDO管理**: 在RAC环境下,每个实例都有自己的重做日志线程(thread),这由初始化参数`THREAD#`定义。每个实例至少需要两组重做日志文件(redo log files),这些文件分布在不同的组(GROUP#)中。尽管每个实例...

    实现Redo Undo的一个简单实例,包含源码

    3. **Undo和Redo管理器(Undo/Redo Manager)**:这是一个负责处理撤销和重做逻辑的类,它管理操作栈,处理用户的Undo和Redo请求。 4. **事件处理(Event Handling)**:在Delphi中,事件通常与控件关联,当用户...

    ORACLE 修改redo日志文件 大小的方法

    在Oracle数据库管理中,调整redo日志文件大小是一项重要的维护工作,这直接影响到数据库的性能与稳定性。本文将深入探讨如何在Oracle环境中修改redo日志文件的大小,以及这一操作的具体步骤和注意事项。 ### 一、...

    43 直接强行把redo log写入磁盘?非也,揭秘redo log buffer.pdf

    Redo日志(Redo Log)是数据库事务日志的重要组成部分,它主要用于事务的恢复和...此外,理解Redo日志的写入时机和机制,有助于数据库管理员或开发者在面对系统崩溃等紧急情况时,能够更有效地进行数据恢复和故障排除。

    Oracle_Undo与Redo的通俗

    Oracle中的Undo和Redo是两个非常重要的概念,它们都是Oracle数据库中事务管理和恢复机制的关键组件。Undo和Redo都是为了确保数据库的一致性和可靠性。 什么是REDO? REDO记录transaction logs,分为online和...

    42 redo log是直接一条一条写入文件的吗?非也,揭秘redo log block.pdf

    这种结构设计允许redo log在内存中进行高效的组织和管理,而后再批量写入磁盘。 当一条redo log生成时,它不会直接以单条的形式写入磁盘。实际上,redo log会被暂时存储在内存中的redo log block里。只有当block中...

    redo 维护 oracle

    管理员需要定期检查redo log的状态,包括空间使用情况、切换频率以及归档操作是否成功。使用DBA视图如V$LOG、V$LOGFILE和V$ARCHIVED_LOG可以获取相关信息。 8. **性能优化** 优化redo日志的写入性能对于数据库...

    多步Undo_Redo的实现

    通过定义基础类 `CEditRecord` 来记录每个操作,并使用控制类 `CRecordCtrl` 来管理和执行Undo/Redo操作,我们可以构建出一个高效且易于扩展的Undo/Redo机制。这对于提高用户体验和软件质量具有重要意义。

    redo使用方法

    4. `TestUndoDoc.cpp`:文档对象的实现,通常用于存储和管理数据,`undo`和`redo`操作可能涉及对文档历史状态的管理。 5. `MyObjCollection.cpp`:自定义对象集合的实现,可能用于存储一系列可撤销/重做的操作,这些...

    C# undo\redo框架

    - 历史管理器:维护undo和redo栈,以及记录当前操作的状态。 - 应用程序接口:提供公共的AddCommand、Undo和Redo方法供其他部分调用。 6. **扩展性和性能考虑**: 框架应支持多种类型的命令,比如文本编辑、列表...

    GIS软件中undo与redo的设计与实现

    通过采用命令模式和面向对象的设计方法,可以有效地管理各种编辑操作的撤销和恢复,从而提升GIS软件的易用性和用户体验。在设计这些功能时,应充分考虑GIS软件的特点和需求,确保 Undo与Redo功能的高效性和可靠性。

    oracle的undo与redo

    Oracle数据库作为一个成熟的关系型数据库管理系统,提供了强大的数据恢复和事务处理能力。在Oracle中,日志文件发挥着关键作用,其中Undo日志和Redo日志是最核心的两种日志类型。 Undo日志,也称为撤销日志,主要...

    44 redo log buffer中的缓冲日志,到底什么时候可以写入磁盘?l.pdf

    对于Redo日志文件的管理,当MySQL不断地执行增删改操作时,会产生大量的Redo日志,这些日志需要写入日志文件。为了避免日志文件占用磁盘空间越来越大,MySQL通过以下机制解决这个问题: 1. Redo日志文件默认是写入到...

    丢失所有redo-数据文件-控制文件的恢复

    在IT领域,尤其是在数据库管理与恢复方面,遇到“丢失所有redo-数据文件-控制文件的恢复”这种情况无疑是一场灾难性的事件。这通常意味着数据库的所有关键组成部分:重做日志(redo log)、数据文件(datafiles)以及...

    Oracle性能调优

    8. **读写优化**:理解Oracle的redo log、undo和redo管理,以及事务处理机制,能有效优化读写操作,减少锁定和等待。 9. **数据库连接管理**:优化连接池设置,如使用连接池(如Oracle的DBMSSessionPool),减少...

    Redo Log之一:理解Oracle redo log

    总体来说,Oracle redo log不仅是数据恢复的关键,它还是数据一致性、日志管理以及数据库性能优化的一个基础,对数据库管理员(DBA)来说,深入了解redo log的工作原理和管理方法是必备技能之一。

    Simple Undo/redo library for C#/.NET

    在.NET框架和C#编程中,撤销/重做(Undo/Redo)功能是一个常见的需求,特别是在那些允许用户进行多步操作的应用程序中,如文本编辑器、绘图软件或数据库管理系统。一个“Simple Undo/redo library for C#/.NET”就是...

    CoreData的使用

    11. ** Undo/Redo管理**:CoreData内置了撤销/重做管理,使得用户可以轻松撤销或重做对数据的修改。 12. ** Migration(迁移)**:当数据模型发生变化时,CoreData提供了轻量级和重载的迁移策略来平滑过渡旧数据到...

Global site tag (gtag.js) - Google Analytics