1. gv$log视图中的INST_ID代表什么意思:
In Real Application Clusters, querying a GV$ view retrieves the V$ view information from all qualified instances. In addition to the V$ information, each GV$ view contains an extra column named INST_ID of datatype NUMBER. The INST_ID column displays the instance number from which the associated V$ view information was obtained.
就是说,GV$视图的内容是各个实例的V$视图内容的结合,INST_ID代表该行数据来自哪个实例的v$log。
那么,select * from gv$log where inst_id=1语句 和 在实例1上查询select * from v$log是完全等价的,一模一样的。
我的测试环境中在实例1上执行:select * from v$log查询结果是:
SQL> select group#,thread#,status from v$Log;
GROUP# THREAD# STATUS
---------- ---------- ----------------
1 1 CURRENT
2 1 INACTIVE
3 2 INACTIVE
4 2 CURRENT
那问题实质变为,我在实例1上查询v$log视图,难道不是只有thread#=1的行就可以了吗,为什么还要有thred#=2。如果都是thred#=1的行,没有重复值,那thread#这个字段干脆就没有存在的必要了。
所以说,为什么实例1上的v$log视图中要有其它节点上的日志文件(thread#=2)的信息呢?
我自己觉着这样设计也是为了查看方便啊,同时每个实例有自己独立的redo来写日志,thread就是每个实例的一个编号,区分着每个实例上的日志。而Gv$log视图中的INST_ID只是表明该行数据来自哪个实例上的v$log视图。
于此同时,虽然每个实例上的日志组都是相互独立来记录各自的日志信息,但是存在一种特殊情况下,thread 2的日志组也会给实例 1用。这应该也算是为什么实例1的vlog视图中要有thread#=2的归档的一个原因。而这种特殊情况就是Maclean所言:
一个开启归档的RAC,实例2异常关闭,thread#=2的redo变为close,实例2上的online redo还没有被归档,此时实例1将来操作thread 2的日志组完成thread 2的redo信息。通过v$archived_log中的ARCHIVAL_THREAD#字段说明该问题。
In Real Application Clusters, querying a GV$ view retrieves the V$ view information from all qualified instances. In addition to the V$ information, each GV$ view contains an extra column named INST_ID of datatype NUMBER. The INST_ID column displays the instance number from which the associated V$ view information was obtained.
就是说,GV$视图的内容是各个实例的V$视图内容的结合,INST_ID代表该行数据来自哪个实例的v$log。
那么,select * from gv$log where inst_id=1语句 和 在实例1上查询select * from v$log是完全等价的,一模一样的。
我的测试环境中在实例1上执行:select * from v$log查询结果是:
SQL> select group#,thread#,status from v$Log;
GROUP# THREAD# STATUS
---------- ---------- ----------------
1 1 CURRENT
2 1 INACTIVE
3 2 INACTIVE
4 2 CURRENT
那问题实质变为,我在实例1上查询v$log视图,难道不是只有thread#=1的行就可以了吗,为什么还要有thred#=2。如果都是thred#=1的行,没有重复值,那thread#这个字段干脆就没有存在的必要了。
所以说,为什么实例1上的v$log视图中要有其它节点上的日志文件(thread#=2)的信息呢?
我自己觉着这样设计也是为了查看方便啊,同时每个实例有自己独立的redo来写日志,thread就是每个实例的一个编号,区分着每个实例上的日志。而Gv$log视图中的INST_ID只是表明该行数据来自哪个实例上的v$log视图。
于此同时,虽然每个实例上的日志组都是相互独立来记录各自的日志信息,但是存在一种特殊情况下,thread 2的日志组也会给实例 1用。这应该也算是为什么实例1的vlog视图中要有thread#=2的归档的一个原因。而这种特殊情况就是Maclean所言:
一个开启归档的RAC,实例2异常关闭,thread#=2的redo变为close,实例2上的online redo还没有被归档,此时实例1将来操作thread 2的日志组完成thread 2的redo信息。通过v$archived_log中的ARCHIVAL_THREAD#字段说明该问题。