Oracle RAC 环境下的 v$log v$logfile
通常情况下,在Oracle RAC 环境中,v$视图可查询到你所连接实例的相关信息,而gv$视图则包含所有实例的信息。然而在RAC环境中,当我们查询v$log视图时说按照常理的话,v$log视图应当看到的是你所连接到实例的日志组的信息。但v$log是个例外,也就是说v$log视图里看到的不仅仅是自身实例所包含的redo日志组,其他所有剩余实例的redo日志组也同样会出现在该视图中。无论你从任意一个节点连接查询v$log视图都将获得相同的结果。该情形同样适用于v$logfile。这到底是怎么一回事呢?如果你有类似的迷惑,不妨接着往下看。
1、理解数据库与实例以及RAC数据库的恢复
数据库:
数据库就是一堆的数据文件的集合,如控制文件、数据文件、联机日志文件、参数文件、密码文件、归档日志等。
实例:
包括了内存结构(SGA)和一系列后台进程(Background Process),两者合起来称为一个Oracle实例。
关于Oracel数据库与实例描述详细请参考: Oracle实例和Oracle数据库(Oracle体系结构)
RAC数据库及恢复:
一个RAC数据库可以有多个实例,也就是说在不同的节点上构建了SGA + Background Process,共享了数据库的一些数据文件。
然而,对于redo/undo部分,则是各自使用单独的redo和undo,但是这并不意味着他们仅仅属于各个实例(节点)的一部分。
RAC数据库的恢复,需要的是所有节点产生的archived log以及所有节点中的redo信息,这样子才能完整地展现RAC数据库的历史。
其次RAC数据库恢复通常是在单节点上完成,也就是说我们在其余节点关闭的情形下,v$log也应当能够看到所有实例的redo日志信息。
2、理解Redo Threads
When speaking in the context of multiple database instances, the redo log for each database instance is also referred to as a
redo thread. In typical configurations, only one database instance accesses an Oracle Database, so only one thread is present.
In an Oracle Real Application Clusters environment, however, two or more instances concurrently access a single database and
each instance has its own thread of redo. A separate redo thread for each instance avoids contention for a single set of redo
log files, thereby eliminating a potential performance bottleneck.
在单实例环境中,仅仅有一个redo thread,其thread#通常为1。
而在RAC环境中,多个实例共享一个数据库,因此一个实例有一个redo thread,主要是为了避免竞争,提高性能。
3、v$log与v$logfile
--下面我们查询视图来看看v$log与v$logfile
--环境
SQL> select * from v$version where rownum<2; BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production SQL> show parameter cluster_d NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cluster_database boolean TRUE
cluster_database_instances integer 2 --->查询v$log
SQL> select group#,thread#,sequence#,members,archived,status,first_time,next_time from v$log; GROUP# THREAD# SEQUENCE# MEMBERS ARC STATUS FIRST_TIME NEXT_TIME
---------- ---------- ---------- ---------- --- ---------------- ------------------- -------------------
1 1 13 2 NO CURRENT 2013/08/05 14:38:36
2 1 12 2 YES INACTIVE 2013/08/05 14:04:29 2013/08/05 14:38:36
3 2 11 2 NO CURRENT 2013/08/05 14:44:50 2013/08/05 14:44:50
4 2 10 2 YES INACTIVE 2013/08/05 14:04:32 2013/08/05 14:38:33 --上面的查询中可以看出,当前数据库有4个日志组,且每个日志组两个成员。有2个redo thread,即thread 1与thread 2。
--其中日志组1与组2由thread 1管理,也就是说日志组1与组2位于实例1,同理,日志组3与组4位于实例2。
--从上面也可以看出v$log视图本身已经包含了整个数据所有实例的redo日志组的信息,从RAC数据库的任一节点查询,该视图都将返回相同的信息。
--如果有3个实例,每个实例两个日志组,则v$log应包含3*2=6行(实例数*每个实例日志组数)。如果有4个实例,每个实例1个日志组,则包含4行记录。
--其次我们也可以看到每一个实例上面有一个组属于当前组(current),如对于实例1,组1为当前组,对于实例2,组3位当前组。
--下面来验证一下是否是这样子
SQL> show parameter instance_nu NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_number integer 1
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 12
Next log sequence to archive 13
Current log sequence 13 --->当前日志组为13,位于实例1 SQL> show parameter instance_nu NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_number integer 2
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 10
Next log sequence to archive 11
Current log sequence 11 --->当前日志组为11,位于实例1,这两个验证与我们从v$log实例里看到的是一样的情形。 -->查询v$logfile
SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- ----------------------------------------------------------------- ---
2 ONLINE +ASM_DATA/mmbo/onlinelog/group_2.262.821029383 NO
2 ONLINE +FRA_DATA/mmbo/onlinelog/group_2.258.821029385 YES
1 ONLINE +ASM_DATA/mmbo/onlinelog/group_1.261.821029381 NO
1 ONLINE +FRA_DATA/mmbo/onlinelog/group_1.257.821029383 YES
3 ONLINE +ASM_DATA/mmbo/onlinelog/group_3.266.821029785 NO
3 ONLINE +FRA_DATA/mmbo/onlinelog/group_3.259.821029787 YES
4 ONLINE +ASM_DATA/mmbo/onlinelog/group_4.267.821029787 NO
4 ONLINE +FRA_DATA/mmbo/onlinelog/group_4.260.821029789 YES 8 rows selected.
--由于每一组日志包含2个成员,因此视图查询返回8行记录。如前面所说,该视图同样包含了所有实例的日志成员。
--从上面的视图可知,当前数据库总共4个日志组,8个日志成员,其中每一组的一个成员位于闪回区。 --->查询gv$log
SQL> select inst_id,group#,thread#,sequence#,members,archived,status,first_time,next_time from gv$log; INST_ID GROUP# THREAD# SEQUENCE# MEMBERS ARC STATUS FIRST_TIME NEXT_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------------- -------------------
2 1 1 13 2 NO CURRENT 2013/08/05 14:38:36
2 2 1 12 2 YES INACTIVE 2013/08/05 14:04:29 2013/08/05 14:38:36
2 3 2 11 2 NO CURRENT 2013/08/05 14:44:50 2013/08/05 14:44:50
2 4 2 10 2 YES INACTIVE 2013/08/05 14:04:32 2013/08/05 14:38:33
1 1 1 13 2 NO CURRENT 2013/08/05 14:38:36
1 2 1 12 2 YES INACTIVE 2013/08/05 14:04:29 2013/08/05 14:38:36
1 3 2 11 2 NO CURRENT 2013/08/05 14:44:50 2013/08/05 14:44:50
1 4 2 10 2 YES INACTIVE 2013/08/05 14:04:32 2013/08/05 14:38:33 8 rows selected. -->关闭任意一节点后查询v$log与gv$log的情形
SQL> ho srvctl stop instance -d mmbo -i mmbo2
SQL> select group#,thread#,sequence#,members,archived,status,first_time,next_time from v$log; GROUP# THREAD# SEQUENCE# MEMBERS ARC STATUS FIRST_TIME NEXT_TIME
---------- ---------- ---------- ---------- --- ---------------- ------------------- -------------------
1 1 13 2 NO CURRENT 2013/08/05 14:38:36
2 1 12 2 YES INACTIVE 2013/08/05 14:04:29 2013/08/05 14:38:36
3 2 11 2 YES ACTIVE 2013/08/05 14:44:50 2013/08/05 16:21:22
4 2 10 2 YES INACTIVE 2013/08/05 14:04:32 2013/08/05 14:38:33 SQL> select inst_id,group#,thread#,sequence#,members,archived,status,first_time,next_time from gv$log; INST_ID GROUP# THREAD# SEQUENCE# MEMBERS ARC STATUS FIRST_TIME NEXT_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------------- -------------------
1 1 1 13 2 NO CURRENT 2013/08/05 14:38:36
1 2 1 12 2 YES INACTIVE 2013/08/05 14:04:29 2013/08/05 14:38:36
1 3 2 11 2 YES ACTIVE 2013/08/05 14:44:50 2013/08/05 16:21:22
1 4 2 10 2 YES INACTIVE 2013/08/05 14:04:32 2013/08/05 14:38:33 --从上面的查询可以看出,对于我们当前2节点的数据库,此时v$log与gv$log呈现相同的信息,gv$log仅仅列出了inst_id列为1的情形
--从上面的整个测试结果可知,gv$log视图类似于使用union all, gv$logfile与此同,不再演示
-- select 1 as inst_id, v.* from v$log v --此时v$log位于实例1
-- union all
-- select 2 as inst_id, v.* from v$log v --此时v$log位于实例2 -- Author : Robinson Cheng
-- Blog : http://blog.csdn.net/robinson_0612 --与之gv$log,gv$logfile类似的还有
--gv$controlfile = (v$controlfile * instances quantity)
--gv$datafile = (v$datafile * instances quantity)
--gv$log = (v$log * instances quantity)
--gv$archive_log = (v$archive_log * instances quantity) -->那如何查询当前实例自身的redo信息呢?
--可以使用下面的方式来查询实例自身的redo信息
SQL> select group#,thread#,sequence#,members,archived,status,first_time,next_time
2 from v$log where thread#=(select value from v$parameter where name='thread'); GROUP# THREAD# SEQUENCE# MEMBERS ARC STATUS FIRST_TIME NEXT_TIME
---------- ---------- ---------- ---------- --- ---------------- ------------------- -------------------
1 1 13 2 NO CURRENT 2013/08/05 14:38:36
2 1 12 2 YES INACTIVE 2013/08/05 14:04:29 2013/08/05 14:38:36
4、后记
a、对于RAC环境下的数据库,我们从v$log视图即可查询到当前数据库所有实例的redo日志组信息,v$logfile类似。
b、从v$log视图能够获取所有实例的redo信息的最终的目的是为了能够从任意一节点进行数据库恢复时能访问所有的redo。
c、对于实例自身redo信息的查询可以添加相应的thread作为过滤条件来过滤。

更多参考
有关Oracle RAC请参考
使用crs_setperm修改RAC资源的所有者及权限 使用crs_profile管理RAC资源配置文件 RAC 数据库的启动与关闭 再说 Oracle RAC services Services in Oracle Database 10g Migrate datbase from single instance to Oracle RAC Oracle RAC 连接到指定实例 Oracle RAC 负载均衡测试(结合服务器端与客户端) Oracle RAC 服务器端连接负载均衡(Load Balance) Oracle RAC 客户端连接负载均衡(Load Balance) ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)
ORACLE RAC 监听配置 (listener.ora tnsnames.ora) 配置 RAC 负载均衡与故障转移 CRS-1006 , CRS-0215 故障一例
基于Linux (RHEL 5.5) 安装Oracle 10g RAC
使用 runcluvfy 校验Oracle RAC安装环境
有关Oracle 网络配置相关基础以及概念性的问题请参考:
配置非默认端口的动态服务注册
配置sqlnet.ora限制IP访问Oracle Oracle 监听器日志配置与管理
设置 Oracle 监听器密码(LISTENER) 配置ORACLE 客户端连接到数据库
有关基于用户管理的备份和备份恢复的概念请参考
Oracle 冷备份 Oracle 热备份 Oracle 备份恢复概念 Oracle 实例恢复 Oracle 基于用户管理恢复的处理 SYSTEM 表空间管理及备份恢复 SYSAUX表空间管理及恢复 Oracle 基于备份控制文件的恢复(unsing backup controlfile)
有关RMAN的备份恢复与管理请参考
RMAN 概述及其体系结构 RMAN 配置、监控与管理 RMAN 备份详解 RMAN 还原与恢复 RMAN catalog 的创建和使用 基于catalog 创建RMAN存储脚本 基于catalog 的RMAN 备份与恢复 RMAN 备份路径困惑 使用RMAN实现异机备份恢复(WIN平台) 使用RMAN迁移文件系统数据库到ASM linux 下RMAN备份shell脚本 使用RMAN迁移数据库到异机
有关ORACLE体系结构请参考
Oracle 表空间与数据文件 Oracle 密码文件 Oracle 参数文件 Oracle 联机重做日志文件(ONLINE LOG FILE) Oracle 控制文件(CONTROLFILE) Oracle 归档日志 Oracle 回滚(ROLLBACK)和撤销(UNDO) Oracle 数据库实例启动关闭过程 Oracle 10g SGA 的自动化管理 Oracle 实例和Oracle数据库(Oracle体系结构)
Oracle RAC 环境下的 v$log v$logfile的更多相关文章
- 【转】Oracle RAC 环境下的连接管理
文章转自:http://www.oracle.com/technetwork/cn/articles/database-performance/oracle-rac-connection-mgmt-1 ...
- Oracle RAC环境下定位并杀掉最终阻塞的会话-续
之前在<Oracle RAC环境下定位并杀掉最终阻塞的会话>中,最终使用一个SQL查询出RAC实例之间的所有阻塞关系.但是实际在某些极端的生产环境,是不允许执行复杂的SQL语句,即使允许执 ...
- Oracle RAC 环境下的连接管理(转) --- 防止原文连接失效
崔华老师的文章!!! 这篇文章详细介绍了Oracle RAC环境下的连接管理,分别介绍了什么是 Connect Time Load Balancing.Runtime Connection Load ...
- bay——Oracle RAC环境下ASM磁盘组扩容.docx
https://www.cnblogs.com/polestar/p/10115263.html Oracle RAC环境下ASM磁盘组扩容 生产环境注意调整以下参数: +++++++++++++++ ...
- Oracle RAC环境下如何更新patch(Rolling Patch)
Oracle RAC数据库环境与单实例数据库环境有很多共性,也有很多异性.对于数据库补丁的更新同样如此,都可以通过opatch来完成.但RAC环境的补丁更新有几种不同的更新方式,甚至于可以在零停机的情 ...
- Oracle RAC环境下怎样更新patch(Rolling Patch)
Oracle RAC数据库环境与单实例数据库环境有非常多共性,也有非常多异性.对于数据库补丁的更新相同如此.都能够通过opatch来完毕.但RAC环境的补丁更新有几种不同的更新方式,甚至于能够 ...
- Oracle RAC环境下定位并杀掉最终阻塞的会话
实验环境:Oracle RAC 11.2.0.4 (2节点) 1.模拟故障:会话被级联阻塞 2.常规方法:梳理找出最终阻塞会话 3.改进方法:立即找出最终阻塞会话 之前其实也写过一篇相关文章: 如何定 ...
- Oracle RAC环境下ASM磁盘组扩容
生产环境注意调整以下参数: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...
- 在oracle RAC 环境下用 PL/SQL Developer debug procedure 出现 hang 的情况
现象描述: 用plsql developer 连接编译procedure 的时候都很正常.一旦开始Test进入Debug模式的时候就Hang住了. 初步猜测是没有权限,可是是DBA角色呀,如果没有权限 ...
随机推荐
- Spring 学习笔记(三)之注解
一.在classpath下扫描组件 •组件扫描(component scanning): Spring 能够从 classpath 下自动扫描, 侦测和实例化具有特定注解的组件. •特定组件包括: ...
- 对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)
本文属于本人原创,转载请注明出处:http://blog.csdn.net/xxd851116/archive/2009/06/25/4296866.aspx [前面的话] 在网上经常看到有人对req ...
- codeforces739C - Skills &&金中市队儿童节常数赛
http://codeforces.com/problemset/problem/739/C 先上链接 这道题 对于蒟蒻的我来说还是很有难度的 调了很久 对于我的代码 mx2是答案 mx1代表单调 m ...
- ecma 2018, javascript spread syntax behaves like Object.assign
as the subject. It is only supported in Chrome version 60+, so, first check the version, or just use ...
- C++11 lambda函数符
#include<iostream> #include<vector> #include<algorithm> #include<cmath> #inc ...
- 跟我一起写 Makefile(一)【转】
转自:http://blog.csdn.net/haoel/article/details/2886 跟我一起写 Makefile 陈皓 概述—— 什么是makefile?或许很多Winodws的程序 ...
- 关于oracle的连接时ORA-12519错误的解决方案
系统在运行时出现了ORA-12519的错误,无法连接数据库,后来在网上找了下,找到了如下的解决方法,共享下. OERR: ORA-12519 TNS:no appropriate service ha ...
- 怎样简单编写一个html网页
# 转载请留言联系 一个HTML的基本结构如下: <!DOCTYPE html> <html lang="en"> <head> <met ...
- Storm中log4j日志打印不出来的解决办法
使用storm命令启动JAVA进程的时候,发现log4j日志打印不出来,咋办呢? 解决办法如下(亲测): 删除strom/lib目录下的log4j-over-slf4j-1.6.6.jar strom ...
- python 如何将JSON数据原封不动的转为字符串(顺序不能变动)?
最好是采用 OrderedDict + json.dumps方案 1. 在存储 content 的时候就使用 OrderedDict 而非用默认的 dict from collections impo ...