为何而心跳-Oracle Heartbeat研究之二

在上一篇文章(为何而心跳-Oracle Heartbeat研究)中,我简单介绍了heartbeat的机制,现在我们来作点进一步的研究.

首先启动数据库到Mount状态:

[oracle@jumper bdump]$ sqlplus '/ as sysdba'

SQL*Plus: Release 9.2.0.4.0 - Production on Tue Jan 24 14:10:02 2006

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Connected to an idle instance.

SQL> startup mount;

ORACLE instance started.

Total System Global Area   97588504 bytes

Fixed Size                   451864 bytes

Variable Size              33554432 bytes

Database Buffers           62914560 bytes

Redo Buffers                 667648 bytes

Database mounted.

SQL> exit

Disconnected from Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production

With the Partitioning option

JServer Release 9.2.0.4.0 - Production

在Mount状态DUMP控制文件,比较前后变化,我们发现Heartbeat每3秒都被更新一次:

[oracle@jumper udump]$ sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.4.0 - Production on Tue Jan 24 14:10:33 2006

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Connected to:

Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production

With the Partitioning option

JServer Release 9.2.0.4.0 - Production

SQL> alter session set events 'immediate trace name CONTROLF level 10' ;

Session altered.

SQL> exit

Disconnected from Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production

With the Partitioning option

JServer Release 9.2.0.4.0 - Production

[oracle@jumper udump]$ sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.4.0 - Production on Tue Jan 24 14:10:46 2006

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Connected to:

Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production

With the Partitioning option

JServer Release 9.2.0.4.0 - Production

SQL> alter session set events 'immediate trace name CONTROLF level 10' ;

Session altered.

SQL> exit

Disconnected from Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production

With the Partitioning option

JServer Release 9.2.0.4.0 - Production

[oracle@jumper udump]$ ls

conner_ora_31841.trc  conner_ora_31846.trc

[oracle@jumper udump]$ diff conner_ora_31841.trc conner_ora_31846.trc

....

16c16

< *** SESSION ID:(9.5) 2006-01-24 14:10:39.076

---

> *** SESSION ID:(9.7) 2006-01-24 14:10:48.822

63c63

< heartbeat: 580556236 mount id: 3192501183---

> heartbeat: 580556239 mount id: 3192501183

这说明Heartbeat并非在数据库Open状态下才会更新,也说明HeartBeat是用来维持实例的Mount状态检测.

Q:这里的mount id应该代表的是instance的id,每次不同,这个id来自何处呢?应该和系统有关,我没找到具体的含义.哪位知道请告知.

之所以验证这个内容是因为在Steve ( www.ixora.com.au )的网站上有这样一段话:

The checkpoint RBA is copied into the checkpoint progress record of the controlfile by the checkpoint heartbeat once every 3 seconds.

这段话在不同的数据库版本里需要被重新理解.

另外我们还可以看到,在Mount状态下,数据库通过以下两个锁定来维持Instance的变化:

SQL> select * from v$lock;

ADDR     KADDR           SID TYPE        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK

-------- -------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------

562E35F4 562E3604          3 RT            1          0          6          0       1616          0

562E34C4 562E34D4          4 XR            4          0          1          0       1619          0

其中RT锁是:Redo thread global enqueue ,为LGWR进程持有.

XR锁Oracle的解释为:

acquired for ALTER SYSTEM QUIESCE RESTRICTED command (or alter database open) in RAC mode."

此处为CKPT进程持有.

在数据库Mount状态下,我们也可以通过查询X$KCCRT来观察heartbeat的变化:

[oracle@jumper oracle]$ sqlplus '/ as sysdba'

SQL*Plus: Release 9.2.0.4.0 - Production on Wed Jan 25 00:08:06 2006

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Connected to:

Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production

With the Partitioning option

JServer Release 9.2.0.4.0 - Production

SQL> select cphbt from X$KCCCP;

CPHBT

----------

580567934

SQL> /

CPHBT

----------

580567935

SQL> /

CPHBT

----------

580567936

SQL> select open_mode from v$database;

OPEN_MODE

----------

MOUNTED

SQL>

历史上的今天...

>>

2011-01-27文章:

2008-01-27文章:

By eygle on 2006-01-27 21:04 |

Comments (5) |

Internal | 659 |

5 Comments

eygle大师你好,

上面你的测试是在mount状态下进行的,dump出来的控制文件中只有心跳值发生变化,这很正常,但是在open状态下,如果数据库脏缓冲区有很多数据要写入数据文件时刻,此时再间隔一段时间dump出来控制文件的信息,可能就不只是心跳值变化了,

13c13

Unix process pid: 16613, image: oracle@www (TNS V1-V3)

15,16c15

*** SESSION ID:(13.19) 2006-09-18 17:22:38.334

59,61c58,60

THREAD #1 - status:0x2 flags:0x0 dirty:226

> low cache rba:(0x1.362b.0) on disk rba:(0x1.1ca06.0)

> on disk scn: 0x0000.0158ee4b 09/18/2006 17:22:31

63c62

heartbeat: 601429873 mount id: 76487130

看到上面on disk scn以及心跳都发生了变化,所以俺认为不能说heartbeat每3秒更新的仅是"heartbeat"而已,同时你的测试时间间隔也不是3妙!

一点不同看法,如有不对,请指正,谢谢!

>'同时你的测试时间间隔也不是3妙!'

你怎么知道不是?

这个时间,你去跟踪后台进程就知道了。

>'看到上面on disk scn以及心跳都发生了变化,所以俺认为不能说heartbeat每3秒更新的仅是"heartbeat"而已'

heartbeat 一直在跳,这期间有其它数据发生变化一点都不奇怪啊。

可以再参考我之前给出的链接:

http://www.eygle.com/archives/2006/01/why_oracle_heartbeat.html

可不可这样说:心跳和更新控制文件中的low cache rba、on disk RBA和on disk scn等内容都是CKPT的任务。在三秒超时时,如果不需要更新任这些RBA和SCN,CKPT只记录heartbeat。

X$KCCRT这个写错了吧,应该是X$KCCCP?

Oracle实例之间的心跳机制,为何而心跳-Oracle Heartbeat研究之二相关推荐

  1. java tcp 心跳机制_Java实现心跳机制的方法

    一.心跳机制简介 在分布式系统中,分布在不同主机上的节点需要检测其他节点的状态,如服务器节点需要检测从节点是否失效.为了检测对方节点的有效性,每隔固定时间就发送一个固定信息给对方,对方回复一个固定信息 ...

  2. oracle实例没有连到监听上6,oracle LISTENER未监听到oracle实例问题解决

    oracle LISTENER未监听到oracle实例问题解决 LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = ...

  3. socket心跳机制图片_WebSocket心跳检测和重连机制

    1. 心跳重连原由 心跳和重连的目的用一句话概括就是客户端和服务端保证彼此还活着,避免丢包发生. websocket连接断开有以下两种情况: 前端断开 在使用websocket过程中,可能会出现网络断 ...

  4. socket心跳机制图片_socket心跳包机制

    心跳包 心跳包就是在客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包 心跳包的作用 网络中的接收和发送数据都是使用SOCKET进行实现.但 ...

  5. ora-01092: oracle 实例终止.强制断开连接,undo表空间故障特殊恢复(二)------ORA-01092: ORACLE 实例终止。强制断开连接...

    原文出处:http://blog.csdn.net/wyzxg/archive/2010/09/10/5874726.aspx undo表空间故障特殊恢复(二)------ORA-01092: ORA ...

  6. RAC数据库实例之间的三种心跳机制

    和CSS 部分类似,RAC数据库中存在3种心跳机制:网络心跳.磁盘心跳.本地心跳 1.网络心跳:        数据库的网络心跳机制是通过LMNO进程来实现的,每个实例的LMON金嫦娥会定期通过数据库 ...

  7. oracle实例名,数据库名,服务名等概念差别与联系

    数据库名.实例名.数据库域名.全局数据库名.服务名 这是几个令非常多刚開始学习的人easy混淆的概念.相信非常多刚開始学习的人都与我一样被标题上这些个概念搞得一头雾水.我们如今就来把它们弄个明确. 一 ...

  8. [源码解析] 从TimeoutException看Flink的心跳机制

    [源码解析] 从TimeoutException看Flink的心跳机制 文章目录 [源码解析] 从TimeoutException看Flink的心跳机制 0x00 摘要 0x01 缘由 0x02 背景 ...

  9. 长连接 、短连接、心跳机制与断线重连

    在不同场景下要考虑长连接还是短连接,那么我们要先了解他. 短连接 概念 client与server通过三次握手建立连接,client发送请求消息,server返回响应,一次连接就完成了. 这时候双方任 ...

最新文章

  1. R程序设计中的IF、IFELSE、SWITCH
  2. 理解可变参数va_list、va_start、va_arg、va_end原理及使用方法
  3. ABB 压包指令PackRawBytes 解包指令UnpackRawBytes
  4. 具有MicroProfile配置的可配置JAX-RS ExceptionMapper
  5. Bootstrap 3: 菜单居中 Center content in responsive bootstrap navbar
  6. sql server死锁_了解SQL Server死锁图的图形表示
  7. C语言中函数中传入一个数组,并且返回一个数组
  8. 北大学子求职经历与建议(IT类) 收藏
  9. 【软件测试】自动化测试到底怎么做(单元测试自动化,接口自动化,UI自动化)
  10. linux找不到fastboot驱动下载,fastboot 刷机傻瓜教程
  11. 全网最全测试工程师 学习网站汇总(测试必备 抓紧收藏)
  12. (十三)【数电】(半导体存储电路)同步(电平)触发器|边沿触发的触发器
  13. aspcms用mysql_aspcms分类列表调用的几个实例
  14. Enhancing the Transferability of Adversarial Attacks through Variance Runing
  15. vim 去掉黄色阴影
  16. 初始化MYSQL时的几个问题
  17. SwiftUI之HStack和VStack的切换
  18. 网上的普通话测试软件可信吗,普通话测试软件哪个好_普通话测试软件靠谱吗_不要钱的普通话测试软件...
  19. Collider组件与Rigidbody组件杂谈
  20. (MATLAB)一元线性回归和多元线性回归

热门文章

  1. 电脑录屏工具_这四款录屏工具,也许是电脑录屏软件中免费、无广告且最实用的,程序员必备...
  2. python中index方法详解_详解python中的index函数用法
  3. 82c55单片机c语言,AT89S51单片机与82C55的接口设计编程
  4. C语言之字符串探究(七):atoi、itoa——整型数字和字符串的相互转换
  5. micropython中文社区 socket通讯_基于micropython的TCP客户端编程
  6. byte用json存 c++_玩转golang——JSON高性能自动字段名
  7. ieda中快捷搜索_快捷指令(07)早上好(三)播报当日日程安排。
  8. 新增标签 html知识,互联网常识:html5有哪些新增标签
  9. vscode 推荐premiter_vscode 有哪些让人眼前一亮的插件?
  10. 谷歌驱动和谷歌版本必须一一对应吗_谷歌:华为别用我的安卓系统!自己研发一个去...