文章插图
作者简介
惠星星,现就职于北京海天起点,持有OCP 10g、OCP 11g、OCM 11g证书,并有长达8年电力行业业务维护、数据库维护服务经验,擅长Oracle数据库性能优化、故障处理及数据可视化技术研究 。
online redo log files是Oracle数据库最重要的物理结构之一,由于Write-Ahead-Log(即日志写入优先)机制,确保instance failure时,实例级恢复正常完成,已提交的数据被正常恢复,本文主要通过dtrace工具分析redo产生过程中latch资源的申请过程,分析Oracle redo生成的详细过程 。
关于Redo Log Buffer
redo log buffer 是SGA中的一个循环缓冲区,主要存储 redo entries 。redo entries包含重构或重做DML或DDL操作对数据库所做的更改所需的信息 。数据库恢复将redo entries 应用于数据文件,以重构丢失的更改 。
Oracle数据库进程将redo entries从用户内存空间复制到SGA中的重做日志缓冲区 。redo entries占用缓冲区中连续的、顺序的空间 。LGWR进程将redo log buffer 中的redo entries写入磁盘上online redo log files 。
文章插图
测试脚本
#!/usr/sbin/dtrace -s -ndtrace:::BEGIN{i=1;}pid$1::kslgetl:entry,pid$1::kslfre:entry/pid == $1/{printf("i=%d pid:::==%s:%s:%s:%s %x %x %x %d %x %x",i, probeprov, probemod, probefunc, probename,arg0,arg1,arg2,arg3,arg4,arg5);i=i+1;}
测试redo entries写入redo log buffer【session 1】:
查询进程id
SQL> select spid from v$process where ADDR in (select PADDR from v$session where sid=(select sid from v$mystat where rownum=1));SPID------------------------------------------------------------------------1358SQL> create table orastar.t1(c1 varchar2(10),c2 varchar2(10));Table created.
【session 2】:启动dtrace程序
./list_latch.d -x switchrate=10hz 1391 > list_latch.log
【session 1】:生成redo entries:
SQL> insert into orastar.t1 values(1,1);1 row created.SQL> commit;Commit complete.
分析过程【生成latch地址】
cat list_latch.log |grep kslgetl|awk '{print "'''" "00000000" $6 "'''" ","}'|sort $1 | uniq
【查询latch查询】set line 200col name for a30select lower(addr),LATCH#,NAME,HASH,GETS,WAIT_TIME from V$LATCH_CHILDREN where lower(addr) in ('000000006000d178','000000006000d370','000000006000d7e8','000000006002dab8','000000006010df10','00000000bb137e80','00000000bb5d6868','00000000bb6d6a28','00000000bb6d8570','00000000bb7d8730','00000000bc593120','00000000bc6ba8f0','00000000bc6e7998','00000000bc6ea088','00000000bc6ea128','00000000bd6c4fe0','00000000bd6c50d8','00000000bd6c5338','00000000be263330','00000000be26f100','00000000be95ed98');
文章插图
redo生成过程说明
文章插图
- server process在user memory space中产生redo entry
- server process获取redo copy latch
- server process 获取redo allocation latch
- 在log buffer中分配空间
- 释放redo allocation latch
- 【解密Oracle redo生成过程】server process将redo entry信息写入到log buffer中
- 释放redo copy latch
以上内容为个人多次测试结果,由于个人原因,如有分析不足之处还请见谅及指正,谢谢 。
参考文档
《Oracle® Database Concepts 11g Release 2 (11.2) 》
原创文章,版权归本文作者所有,如需转载请注明出处
推荐阅读
- 华安解密之DDoS攻防 23 实战篇之城域网防护
- 华安解密之DDoS攻防 21 引流回注的成败之谜
- 黑客教程——Padding Oracle Attack&CBC字节翻转攻击详解
- Oracle12c自动安装部署脚本
- Linux下Oracle监听无法启动处理
- Spring Boot 实现配置文件加解密原理
- 服务器断电Oracle数据库修复数据过程
- ORACLE RMAN命令集合
- Centos7.5下安装oracle 11gR2
- Oracle如何开启闪回功能