查看: 1853|回复: 5

[安装] RAC的一个实例下为什么会有两组Current状态的日志呢

[复制链接]
论坛徽章:
3
2011新春纪念徽章
日期:2011-02-18 11:43:34ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262012新春纪念徽章
日期:2012-01-04 11:53:29
发表于 2011-8-12 17:20 | 显示全部楼层 |阅读模式
各位大侠,小弟初研究RAC,请教,为什么同一个inst_id下会有两组状态为current的日志呢?THREAD#到底是什么意思呢?

INST_ID        GROUP#        THREAD#        SEQUENCE#        BYTES        MEMBERS        ARCHIVED        STATUS

2                           1                 1                            2        52428800        1                      NO              INACTIVE
2                           2                 1                            3        52428800        1                      NO              CURRENT
2                           3                 2                            3        52428800        1                      NO              ACTIVE
2                           4                 2                            4        52428800        1                      NO              CURRENT
1                           1                 1                            2        52428800        1                      NO              INACTIVE
1                           2                 1                            3        52428800        1                      NO              CURRENT
1                           3                 2                            3        52428800        1                      NO              ACTIVE
1                           4                 2                            4        52428800        1                      NO              CURRENT

[ 本帖最后由 guxueliang 于 2011-8-12 17:23 编辑 ]
论坛徽章:
3
2011新春纪念徽章
日期:2011-02-18 11:43:34ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262012新春纪念徽章
日期:2012-01-04 11:53:29
 楼主| 发表于 2011-8-12 17:41 | 显示全部楼层
在asktom中找到答案

will take a stab at the Prashant's question.

Most V$ views work by selecting information from the corresponding GV$ view with a predicate "where instance_id = <that instance>". So V$SESSION in Instance 1 is actually "SELECT * FROM GV$INSTANCE WHERE INST_ID = 1". On a three node RAC database, if you select from v$session, you get sessions from that instance only. Selecting from GV$SESSION creates parallel query slaves on the other instances and gets the information back to your session.

This works fine in almost all cases. There are few exceptions: in case of redo logs, the RAC instance must see all the redo logs of other instances as they become important for its recovery. Therefore, V$LOG actually shows all the redo logs, of all the instances, not just of its own. Contrast this with V$SESSION, which shows only sessions of that instance, not all. So, if there are 3 log file groups per instance (actually, per "thread") and there are 3 instances, V$LOG on any instance will show all 9 logfile groups, not 3.

When you select form GV$LOG, remember, the session gets the information from other instances as well. Unfortunately, the PQ servers on those instances also get 9 records each, since they also see the same information seen by the first instance. On a three instance RAC, you will get 3X9 = 27 records in GV$LOG!
The same explanation applies to GV$LOGFILE as well as GV$THREAD.


In your case, you have 2 instances and there are 2 groups in each instance, so you have 4 groups in all. When you select from GV$LOG, the output shows all groups against all instances. Note your output:


  INST_ID  GROUP#  THREAD# SEQUENCE#    BYTES  MEMBERS ARC STATUS      FIRST_CHANGE# FIRST_TIM      
                                                      
---------- ---------- ---------- ---------- ---------- ---------- --- ----------------
------------- ---------                                                            
      1      1      1      17  52428800      1 NO CURRENT          951208 31-DEC-06                 
                                          
      1      2      1      15  52428800      1 YES INACTIVE          940808 31-DEC-06               
                                             
      1      4      2      13  52428800      1 YES INACTIVE          948841 31-DEC-06            


This shows thread# 1 and 2 both under instance# 1. This is obviously incorrect.

To avoid this:

(1) Always select from V$LOG, V$LOGFILE and V$THREAD in a RAC instance. GV$ views are misleading.

OR

(2) add a predicate to match THREAD# with INST_ID. (Beware: thread numbers are by default the same as the instance_id; but you may have defined a different thread number while creating the database):

SELECT * FROM GV$LOG WHERE INST_ID = THREAD#

But I see no advantage in doing so. Your best bet is to use V$LOG.

使用道具 举报

回复
论坛徽章:
5
双黄蛋
日期:2011-07-05 09:45:13咸鸭蛋
日期:2011-07-12 23:03:41ITPUB十周年纪念徽章
日期:2011-11-01 16:25:22双黄蛋
日期:2011-12-26 15:28:03ITPUB 11周年纪念徽章
日期:2012-10-09 18:13:33
发表于 2011-8-17 15:02 | 显示全部楼层
我没看懂,兄弟能帮忙解释一下不 ?

使用道具 举报

回复
论坛徽章:
2
ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:19ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51
发表于 2011-8-20 20:10 | 显示全部楼层
大概意思貌似是说对于在RAC结构里,查询 V$LOG, V$LOGFILE and V$THREAD这些视图不要查全局的(GV$)否则会造成错觉。

使用道具 举报

回复
论坛徽章:
2
ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:19ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51
发表于 2011-8-20 20:12 | 显示全部楼层
在rac结构里,一个thread 只对应一个INSTANCE_ID,换句话说,对于你的查询   INST_ID 为1和THREAD#为1,或者INST_ID 为2和THREAD#为2这样的行数据才是真实有效的

使用道具 举报

回复
论坛徽章:
44
青年奥林匹克运动会-自行车
日期:2014-09-12 22:37:432012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:09咸鸭蛋
日期:2012-01-08 14:47:322012新春纪念徽章
日期:2012-01-04 11:50:44ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15迷宫蛋
日期:2011-08-14 17:30:33双黄蛋
日期:2011-05-28 20:32:46紫蛋头
日期:2011-05-18 20:41:51现任管理团队成员
日期:2011-05-07 01:45:08
发表于 2011-8-30 14:14 | 显示全部楼层
只在一个节点上执行
select * from v$log where status='CURRENT'; 即可

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表