Oracle RAC的连接负载均衡load balance 以及连接故障failover转移

本文永久地址:https://www.askmaclean.com/archives/oracle-rac%E7%9A%84%E8%BF%9E%E6%8E%A5%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1load-balance-%E4%BB%A5%E5%8F%8A%E8%BF%9E%E6%8E%A5%E6%95%85%E9%9A%9Cfailover%E8%BD%AC%E7%A7%BB.html

连接Oracle Real Application Clusters

连接Oracle Real Application Clusters

  • 所有的数据库节点可以访问数据库中所有的数据
  • 自动维持节点之间的数据一致性

rac_block_1

SQL的并行执行(Parallel Execution)

  • 可以自动并列化一个SQL的执行
  • 从Oracle客户端开始的连接与串行处理相同
  • 无论是单一实例或是RAC都是可行的

SQL的并行执行(Parallel Execution)

 

  • 安装两个软件

1.Oracle Grid Infrastructure 11g Release 2

  • Oracle Clusterware 与 Oracle ASM 之间的紧密合作
  • Oracle listener也是归Grid Infrastructure所有

2.Oracle Database 11g Release 2

 

rac_gi

 

Oracle Database的网络连接

Oraclelistener・进程

这是保存TCP/IP服务器socket的进程。在Oracle Database服务器上,需要接收oracle客户端的连接需求的进程。

Oracle服务器・进程

执行SQL的数据操作的进程。

 

Oracle Database 的网络连接

Oracle客户端的网络连接设定

  • Oracle客户端可以指定以下两个要素
  • Oracle listener的网络地址 (IP地址与TCP port编号)
  • 数据库・服务名

Oracle客户端的网络连接设定

 

Oraclelistener进程

Oracle listener进程是接收Oracle客户端的连接需求进程。Oracle Net协议一般而言使用TCP/IP。Oracle listener进程拥有TCP服务器socket。除TCP/IP以外,同样的服务器中,还可以使用经过共享内存的连接(PROTOCOL=IPC)。

Oraclelistener・进程的实体是 $ORACLE_HOME/bin/tnslsnr 。

Oraclelistener的设定文件是$ORACLE_HOME/network/admin/listener.ora。在此会记录TCP服务器socket中使用的主机名以及port编号。Oracle客户端用连接描述符指定的主机名以及port编号是指 。Oracle listener的主机名以及port编号。

通过在1个Oraclelistener的描述符中记录多个ADDRESS语句,可以接收多个listening point的连接需求。

另外,通过设定多个Oracle listener进程,可以启动。这时,多个Oracle listener中,不能设定同样的listening point。

Oracle Real Application Clusters

Oracle Real Application Clusters 10g以后,Oracle Clusterware管理Oracle listener。因此,Oracle listener的设定是通过使用Oracle Clusterware来设定的。

 

tnslsnr listener

 

Oracle客户端指定服务名

Oracle客户端指定服务名

数据库・服务

  • Oracle实例拥有的数据库负载理论集合
  • 初始化参数SERVICE_NAMES
  • 数据・字典

 

数据库・服务

 

记录Oraclelistener的服务

通过Oracle实例的初始化参数SERVICE_NAMES来设定的数据库、服务名会通过Oracle后台进程的PMON进程记录到Oracle listener进程中。

连接应用程序时,Oracle客户端的连接描述符中,指定记录到Oracle listener中的SERVICE_NAMES的数据库服务。

Oracle实例可以动态变更其拥有的数据库服务,这时,通过PMON进程,就可以知道Oracle listener进程中的服务结构。这被称为服务登录。

服务登录时,oracle实例设定(不是oracle listener设定)可以指定数据库服务名。Oracle listener的设定文件中虽然有静态记录服务名的方法,但由于应用连接不正常,只能作为只能管理时可以使用。

服务登录是,oracle listener的设定是通过Oracle实例的初始化参数LOCAL_LISTENER来执行。用LOCAL_LISTENER指定的网络地址是指Oracle listener进程所监听的listening point连接描述符以及同样的语句(ADDRESS=…)。使用Oracle Database服务器的tnsnames.ora文件所设定的区域也无所谓。

LOCAL_LISTENER没有被设定时的默认值为

(ADDRESS = (PROTOCOL=TCP)(HOST=hostname)(PORT=1521))

Oracle listener的默认TCP port编号为PORT=1521。

Oracle Real Application Clusters 10g以后,LOCAL_LISTENER是通过本地节点的虚拟IP地址(VIP)的listening point来构成的。

 

Oracle listener的服务记载

Oracle listener的操作是通过lsnrctl命令来执行的。记录到Oracle listener中的数据库服务的的状态是:用

lsnrctl status listener

lsnrctl services listener

来表示的。Status选项表示listening point以及运行时间等信息。Services选项表示各数据库服务的详细结构(服务处理器)。

Oraclelistener名是通过listener.ora来定义的。不指定Oracle listener名的话,就会指定名为LISTENER的Oracle listener。

启动Oracle实例的话,由于服务登录的机制,通过初始化参数SERVICE_NAMES设定的数据库服务名就会被记录到Oracle listener之中。

 

  • ORACLE_HOME/bin/lsnrctl status listener
  • Oracle listener会展示出其中记录的所有服务。

记录到Oracle listener中的服务

 

数据库・服务名的默认値

Oracle9i Database 以后,DB_UNIQUE_NAME.DB_DOMAIN就是SERVICE_NAMES 2个的默认値的组合。

DB_UNIQUE_NAME的默认値为DB_NAME,DB_DOMAIN的默认値为“无”。大多数情况下SERVICE_NAMES的默认値与DB_NAME值相同(换言之CREATE DATABASE时指定的数据库名)。

应用的连接

Oracle实例的SERVICE_NAMES的默认値基于DB_NAME的名字。

Oracle客户端虽然可以指定这个默认的数据库服务名来连接,Oracle Database 10g以后,追加数据库服务来制成会更好。从Oracle Database 10g开始,导入了对每个服务进行资源管理的概念,还预计加入从应用中追加连接资源管理的服务。

但是,这并不是管理者直接变更oracle初始化参数SERVICE_NAMES。数据库服务的操作将在后文中说明。

Oracle初始化参数SERVICE_NAMES是Oracle8i中导入的,Oracle初始化参数DB_UNIQUE_NAME是Oracle9i Database中导入的。

Oracle8i 中,SERVICE_NAMES的默认値为DB_NAME.DB_DOMAIN。DB_DOMAIN因为大都没有被设定,SERVICE_NAMES的默认値经常与DB_NAME(=数据库名)相同。

 

  • 默认値是基于数据库名的値
    • DB_UNIQUE_NAME
    • DB_NAME

默认値是基于数据库名的値

 

数据库名

有两个oracle初始化参数可以表示数据库名。

DB_NAME

CREATE DATABASE时所指定的名称。这是识别数据库的各种参数的基础值。

内部的可以在CREATE DATABASE时可以生成DBID这个数值。这将嵌入构成数据库的各个文件的beta中。各个文件到底属于哪个数据库可以使用这个DBID来辨别。虽然拥有同样的DB_NAME的数据库很多。

DB_UNIQUE_NAME

Oracle初始化参数DB_UNIQUE_NAME是Oracle9i中与Oracle Data Guard同时导入的。

Oracle Data Guard的physical standby结构将数据库的更新历史——REDO日志的数据传输到远程数据库中,通过在远程数据库中执行恢复来实现数据同步。远程数据库的初始数据就是(stand by数据库)primary数据库的物理备份。

stand by数据库因为将primary数据库的数据文件的备份当成初始数据,所有多个数据库的拷贝中就会拥有同样的DB_NAME(DBID)。通过应用REDO日志,即使数据内容相同,在管理操作上,也需要辨别这些数据库。因此,标识符就是Oracle初始化参数DB_UNIQUE_NAME。

通过Oracle Clusterware的srvclt命令来指定数据库名的数值不仅是DB_NAME还是这些DB_UNIQUE_NAME的値。

DB_UNIQUE_NAME的默认値为DB_NAME。因此,没有构成数据库的拷贝时,DB_UNIQUE_NAME就是变得与DB_NAME的名字相同。

 

  • DB_UNIQUE_NAME
    • 管理操作上、区别数据库的复制品的名字
    • 指定srvctl 等管理命令
  • DB_NAME
    • CREATE DATABASE 是指定的名字
    • 数据库名相关的参数基础值

db_unique_name

在DBCA中制成数据库

  • CREATE DATABASE
  • 记录Oracle Grid Infrastructure 的资源

Oracle数据库名

这就是初始化参数的DB_NAME.DB_DOMAIN 。

DB_UNIQUE_NAME 的默认値是从DB_NAME制成的。

 

Oracle系统标识符 (Oracle实例名)

这就是SID的字头。 RAC的情况下,会构成多个oracle实例,SID1, SID2, …以及赋予编号的名字。

各个SID是各Oracle实例的初始化参数的INSTANCE_NAME的默认値。

Oracle Database 的连接

Oracle Database 的连接

 

Oracle Real Application Clusters 的连接

  • 无论RAC连接到哪个节点,都可以访问所有数据
    • 数据库/服务会将多个节点进行虚拟化
    • 需要考虑连接的负载均衡以及故障时的故障转移
    • Oracle客户端连接驱动中,用于RAC的没有区别

 

RAC因为是共享磁盘、共享高速内存的架构,无论连接到哪个节点,都可以访问所有数据。

RAC因为是由多个节点构成的,oracle客户端就会作为一个数据库来访问。1个数据库中虚拟化的阶层我们成为“服务”。Oracle客户端是指定数据库服务进行连接的。这与单独实例连接的思路相同。

1个数据库服务可以由多个oracle实例来负责。因此一个数据库服务是通过多个oracle实例来分散负荷的。

另外,某些负责数据库服务的oracle实例发生故障时,其他的oracle实例负责同样的数据库服务的话,oracle客户端就会从其他正常的oracle实例中对连接进行故障转移,继续运行系统。

考虑到单个实例的连接,RAC的连接的功能就是连接的负载均衡以及故障转移。

 

rac1

数据库・服务

  • Oracle客户端可以指定一个数据库/服务名来连接
    • 单独实例也与RAC相同
    • 对RAC的节点数进行虚拟化的也是数据库・服务

 

 

数据库・服务1

rac3

 

  • 数据库・负载中理论性的群体
  • 从动态性能视图中,分辨出每个服务中的CPU时间以及访问的oracle数据/块数的统计

rac4

 

数据库服务名的默认値

Oracle9i Database 以后,SERVICE_NAMES的默认値就是将2个初始化参数组合起来,即DB_UNIQUE_NAME.DB_DOMAIN。

DB_UNIQUE_NAME的默认値是DB_NAME,DB_DOMAIN没有默认値,所以大部分情况下,SERVICE_NAMES的默认値与DB_NAME相同(指定了CREATE DATABASE的数据名)。

应用的连接

Oracle实例的SERVICE_NAMES的默认値就是成为DB_NAME基础的名字。

Oracle客户端在连接描述符中指定默认的数据库服务名进行连接,但Oracle Database 10g以后追加了用于应用连接的数据库服务,从Oracle Database 10g开始,导入了在每个服务中管理资源的概念,预计还会加入从应用中追加连接资源的服务。

 

历史来由

Oracle初始化参数SERVICE_NAMES自Oracle8i开始被导入,Oracle初始化参数DB_UNIQUE_NAME是Oracle9i Database中被导入。

Oracle8i 中SERVICE_NAMES的默认値为DB_NAME.DB_DOMAIN。DB_DOMAIN因为一般不会被设定,所以SERVICE_NAMES的默认値经常DB_NAME(=数据库名)相同。

 

  • RAC是多个Oracle实例对同样的数据库进行mount
    • SERVICE_NAMES 的默认値也是相同的

service_name_rac

 

默认存在服务

Oracle实例会将自身拥有的数据库服务记录到Oracle listener中。Oracle客户端可以指定连接描述符中的数据库服务名进行连接。

执行CREATE DATABASE时,至少存在三个服务。

作为记录到Oracle listener中的数据库服务的默认值,也有基于数据库名的DB_UNIQUE_NAME.DB_DOMAIN。另外,还有基于这个数据库名的,除这个数据库服务以外的一些数据库服务。其中还有仅仅记录到oracle listener中的以及没有记录进去到oracle listener仅仅记录到数据字典中的项目。

另外,通过PL/SQL package DBMS_SERVICE来制成的数据库服务会记录到数据字典中。Oracle Clusterware环境下,为了保持初始化参数SERVICE_NAMES以及数据字典中记录的数据库服务的一致性,要追加服务的话请使用srvctl add命令或者Oracle Enterprise Manager。

SYS$USERS

如果有不指定数据库服务连接到oracle实例的用户会话的话,这个会话所属的数据库服务名就是SYS$USERS。不指定数据库服务名的连接例子会在后文中举出:

$ sqlplus   /  as SYSDBA

这是Oracle服务器OS末尾进行了log in的状态,因为这是oracle中用SYSDBA特权进行log in的操作。所以这个会话会被识别为SYS$USERS。

SYS$BACKGROUND

Oracle实例会保持几个后台进程,使用CPU来执行内部处理。识别这些后台进程负载的就是名为SYS$BACKGROUND的数据库服务。

  • 辨别每个服务中负载的区别
  • V$SERVICE_STATS 等
  • 与记录到Oracle listener中的服务不同,还有一些内部的服务
    • 数据・字典上也有区別

 

rac5

 

RAC数据库服务的结构

  • 在Oracle Clusterware的管理之下
    • 想变更服务的属性时,请在已追加的服务中进行
    • 通过Srvctl命令或者Oracle Enterprise Manager来进行操作

 

 

rac6

Oracle客户端开始的连接

即使是连接到RAC,oracle客户端指定的也是Oracle listener的主机名、port编号以及服务名。这与单个实例相同。

slide的例的连接描述符中ADDRESS句语句值记录了一个节点。但是RAC服务器中的连接如果全部正常运行的话,就业可以进行所有节点的负荷分散。

考虑到RAC的高可用性的方法将在后面讲述。

 

  • 连接到RAC的描述符基本上与连接到单独实例的连接相同
  • 指定Oracle listener的主机名以及port编号
  • 数据库服务名指定

 

连接到RAC的描述符基本上与连接到单独实例的连接相同

  • 连接的故障转移
    • Oracle listener的连接需求如果失败的话就会自动转移到其他的Oracle listener中
    • 连接时的故障转移

 

  • 决定连接地址Oracle的实例
    • 多个Oracle实例可以负责同样的服务
    • 1个连接会连接到一个oracle实例中
    • 连接负载平衡

 

  • Oracle Net中实际应用了两种连接故障转移功能

Oracle Net中实际应用了两种连接故障转移功能

 

  • 连接时的故障转移
    • Connect-Time Failover (CTF)
    • 新建连接时,对于连接需求失败的例子进行故障转移
    • 考虑到高可用性时,需要实际安装的功能
  • 穿透性的应用故障转移
    • Transparent Application Failover (TAF)
    • Oracle Call Interface(OCI) 客户端的機能
    • 对于建立完成的连接中检测到切断时进行故障转移
    • 不是必要的功能
    • 并不是重新执行一次更新事务

 

连接时故障转移

Oracle客户端生成新的连接时,通过连接描述符的客户端側连接负载均衡的设定(LOAD_BALANCE),可以对ADDRESS句的对立发出连接需求。这个ADDRESS 连接需求成功时就会使用这个连接。

如果这个ADDRESS连接失败,但成功设定了连接故障转移的话,就不会即时返回错误到客户端、应用中。检测到内部连接失败的话,就会直接对其他的ADDRESS发出连接需求。所有的连接地址候补都失败的话,就会将错误返回oracle客户端。

连接描述符的DESCRIPTION语句默认是FAILOVER=ON 。因此,对于多个ADDRESS语句,即使不明确设定FAILOVER=ON,连接时的故障转移也会有效。另外,几乎不会使用DESCRIPTION_LIST语句以及ADDRESS_LIST语句,但默认是FAILOVER=ON。

RAC无论连接到哪个oracle实例都会访问同样的数据。因此,即使oracle实例中发生了故障,oracle客户端只要能连接其他正常的oracle实例的话,系统就能继续运行。为了活用这种高可用性的架构,需要将连接故障转移设为有效。

 

  • 新建连接时,对于连接需求失败的例子进行故障转移
    • 连接描述符的设定:FAILOVER=ON (默认ON)
    • 连接需求失败的话,就会试行其他ADDRESS语句

rac7

 

  • Oracle客户端在服务中进行连接
    • 多个Oracle实例可以拥有一样的服务名(SERVICE_NAME)
    • Oracle实例名(INSTANCE_NAME)可以在RAC中指定

rac8

 

 

连接负载均衡

Oracle客户端生成新的连接时,RAC中会有很多个可以成为连接地址候补的oracle实例。决定连接具体是要连接到哪个oracle实例的连接负载均衡是由两部分构成的。

在设定上也可以设为二者都不使用。

客户端側连接负载均衡

Oracle客户端的连接描述符中,会记录发出连接需求的Oracle listener的网络地址。其中可以记录多个Oracle listener的网络地址。

客户端连接负载均衡对于这些Oracle listener的候补会分散发出连接需求的地址。

服务器側连接负载均衡

服务器连接负载均衡

Oracle listener中会记录构成RAC的oracle实例服务结构。记录的不止是服务的设定,还记录了负荷信息,并且会自动更新。

Oracle listener如果接受Oracle客户端的连接需求的话,请对那个服务进行测试,判断是否需要分散负荷,重新定位到适合的节点中。因此,即使制成了客户端连接负荷均衡,实际上决定连接地址的还是服务器连接负载均衡。

 

  • 在建立新连接时,决定连接实例时,会经过2阶段的连接负载均

连接负载均衡

 

连接负载均衡

决定Oracle客户端到底连接到哪个oracle实例的连接负载均衡是由两个部分构成的。

客户端连接负载均衡

Oracle客户端的连接描述符张记载着Oracle listener的主机名以及IP地址。其中还可以记载多个Oracle listener的网络地址。

客户端连接负载均衡将分散多个Oracle listener的候补所执行的连接需求。

服务器连接负载均衡

Oracle listener中会记录构成RAC的oracle实例服务结构。记录的不止是服务的设定,还记录了负荷信息,并且会自动更新。

Oracle listener如果接受Oracle客户端的连接需求的话,请对那个服务进行测试,判断是否需要分散负荷,重新定位到适合的节点中。因此,即使制成了客户端连接负荷均衡,实际上决定连接地址的还是服务器连接负载均衡。

 

  • Oracle客户端使得发生连接需求的Oracle listener分散
    • 连接描述符的设定:LOAD_BALANCE=ON
    • 从多个ADDRESS语句中随机选择

 

rac9

服务Oracle实例

Oracle客户端制定服务名,对Oracle listener发出连接需求。

RAC可以设定为由每个oracle实例各自负责。Oracle listener掌握了cluster整体的服务结构。Oracle listener会对负责oracle客户端指定的oracle实例来对oracle客户端进行重新定位。

实际连接到Oracle客户端的是负责对应服务的oracle实例。多个oracle实例负责1个服务时,会通过多个oracle实例来分散负荷。这时,1个oracle会话连接的就是1个oracle实例。

 

  • Oracle listener认识到实际上是由多个oracle实例负责同样的数据库/服务。
    • 默认的分配方法是“会话数量均分化”
      • 服务的属性:CLB_GOAL=LONG

rac10

 

  • Oracle listener的两个作用

1.连接需求的重定位

2.建立Oracle实例的会话

服务器连接负载均衡

 

rac12

rac13

 

Single Client Access Namelistener

  • 将用于重定位的Oraclelistener(SCANlistener)从oracle实例中记录到服务中
  • 分为「重定位」以及「建立会话」的功能

rac14

  • 在SCAN listener运行的节点中
  • ORACLE_HOME/bin/lsnrctl status listener

※ 从Oracle Grid Infrastructure 11g Release 2开始,Oraclelistener使用Oracle Grid Infrastructure中的项目。此例中,ORACLE_HOME指Oracle Grid Infrastructure的安装目录。

 

rac15

 

  • SCAN listener以及SCAN虚拟IP地址(SCAN VIP)同时启动
  • SCAN listener的运行节点中发生故障的话,就会在其他节点中通过SCAN VIP以及set来重启

rac16

 

  • 通过DNS使得1个SCAN主机名对应多个SCAN VIP

通过DNS使得1个SCAN主机名对应多个SCAN VIP

 

  • 从Oracle Client 11g Release 2 开始,1个SCAN主机名会在内部的多个SCAN VIP中展开

从Oracle Client 11g Release 2 开始,1个SCAN主机名会在内部的多个SCAN VIP中展开

 

Oracle Client 11g R2 以前的客户端

Oracle Client 11g R2会使得1个SCAN主机名在内部的多个SCAN IP地址中展开。

但是,即使是没有SCAN扩展的Oracle Client 11g R1之前的客户端,也可以发起连接到RAC 11g R2的SCANlistener连接需求。通过使用Oracle Client 11g R1之前的连接描述符的记录方法来记录多个ADDRESS语句,可以构成客户端中的连接均衡与连接故障转移。这时记载连接描述符的ADDRESS句的并不是SCAN主机,而是SCAN虚拟IP地址(SCAN VIP)。

连接描述符中记录多个SCAN VIP是为了提高可用性。如果在SCAN listener中执行连接需求的话,就可以通过连接的确立地址来决定连接负载均衡来决定。

 

  • 通过SCAN连接到没有扩展过的以前发行过的SCAN listener中时,会列举SCAN VIP

rac17

 

Oracle Real Application Clusters 的连接

 

rac18

 

rac19

 

 

gc buffer busy/gcs log flush sync与log file sync

这篇博文整理自我的帖子: RAC中的gc current block busy与redo log flush

 

对于log file sync(本质上是 write redolog慢)引发gc buffer busy acquire /release 集群等待事件的这个命题的真伪,其实Oracle在开发性能调优组件ADDM时一早给了我们答案:

 

RECOMMENDATION 2: Host Configuration, 12% benefit (507182 seconds)
ACTION: Investigate the possibility of improving the performance of I/O
to the online redo log files.
RATIONALE: The average size of writes to the online redo log files was
40 K and the average time per write was 10 milliseconds.

ADDITIONAL INFORMATION:

Waits on event “log file sync” were the cause of significant database
wait on “gc buffer busy” when releasing a data block. Waits on event
“log file sync” in this instance can cause global cache contention on
remote instances.

 

如果你在ADDM(?/rdbms/admin/addmrpt)中找到上述文字,那么基本可以确认gc buffer busy的源头是log file sync(虽然本质上不是),那么优先解决log file sync的问题; log file sync 当然有少数的bug存在,但更多的是存储、板卡、链路等硬件因素造成的。解决了log file sync后,那么gc buffer busy往往也就解决了。

 

gc current block busy 等待是RAC中global cache全局缓存当前块的争用等待事件, 该等待事件时长由三个部分组成:

Time to process current block request in the cache= (pin time + flush time + send time)

gc current block flush time
The current block flush time is part of the service (or processing) time for a current block. The pending redo needs to be flushed to the log file by LGWR before LMS sends it. The operation is asynchronous in that LMS queues the request, posts LGWR, and continues processing. The LMS would check its log flush queue for completions and then send the block, or go to sleep and be posted by LGWR. The redo log write time and redo log sync time can influence the overall service time significantly.
flush time 是Oracle为了保证Instance Recovery实例恢复机制,而要求每一个current block在本地节点local instance被修改后(modify/update) 必须要将该current block相关的redo 写入到logfile 后(要求LGWR必须完成写入后才能返回),才能由LMS进程传输给其他节点使用。

 

而gc buffer busy acquire/release 往往是 gc current block busy的衍生产品, 当同一实例内的 多个进程并发地访问同一个数据块时 , 首先发起的进程 将进入 gc current block busy的等待 ,而在 buffer waiter list 上的后续进程 会陷入gc buffer busy acquire/release 等待(A user on the same instance has started a remote operation on the same resource and the request has not completed yet or the block was requested by another node and the block has not been released by the local instance when the new local access was made), 这里存在一个排队效应, 即 gc current block busy是缓慢的,那么在 排队的gc buffer busy acquire/release就会更慢:

Pin time = (time to read the block into cache) + (time to modify/process the buffer)
Busy time = (average pin time) * (number of interested users waiting ahead of me)

不局限于current block (reference AWR Avg global cache current block flush time (ms)), cr block(Avg global cache cr block flush time (ms)) 也存在flush time。

可以通过 设置_cr_server_log_flush to false(LMS are/is waiting for LGWR to flush the pending redo during CR fabrication. Without going too much in to details, you can turn off the behaviour by setting _cr_server_log_flush to false.) 来禁止cr server flush redo log,_gc_log_flush(if TRUE, flush redo log before a current block transfer)来让current block transfer不用flush redo。 但是上述2个参数是有其副作用的……….. 大多数情况不要考虑去设置它们,用它们是个馊主意。

 

_gc_split_flush if TRUE, flush index split redo before rejecting bast FALSE  ==> 控制index split redo flush,默认为FALSE

 

 

以上告诉我们 IO 在RAC中是十分重要的,特别是log file的write性能, 其重要性不亚于CPU 和 Interconnect network。

 

log file sync with gc buffer busy acquire release

 

 

Avg global cache current block flush time (ms)

 

 

 

gcs log flush sync

 

 

When LMS processes a current or cr request, it may encounter certain conditions requiring that the request be queued until some action is performed on the block. A very common condition is that the block is frequently changed and has changes pending which have not been written to the logs. In this case, LMS would have to ask LGWR to flush the log and must check the log flush completion queue or wait for a notification from LGWR. This means that more work must be done to process that block and there may even be considerable time waited for the log IO to complete or the notification to be sent. The processing at the cache layer is CPU intensive. One must also bear in mind that before and after entering the Cache processing, LMS must have picked up the message from the IPC layer and pass it on for sending. In both cases, a message may be sitting in a queue if LMS is busy and/or cannot be scheduled predictably. The scenarios briefly described here may present themselves to the requesting process as “busy” or “congested” waits ( which will be discussed later )

对于index block split/ enq: TX index contention而言,慢的redo flush也可能是催化剂

index split index contention avg flush ping times

 

Log file sync delays due to slow log IO can impact the block shipping
LGWR does not post LMS when the redo is on disk
Can be considered and indicator of contention for “hot” blocks between instance competing for write or read-after-write access

 

【视频教学】Maclean教你用Vbox在Linux 6.3上安装Oracle 11gR2 RAC

建设完成!!

 OEL 6.3 11.2.0.3 RAC VBOX安装脚本.txt (5.08 KB, 下载次数: 25)

Vbox+ Oracle Linux 6.3 + 11.2.0.3 RAC安装第一讲安装OS操作系统 by Maclean Liu

 

 

 

 

Vbox+ Oracle Linux 6.3 + 11.2.0.3 RAC安装第二讲克隆并配置虚拟主机 Maclean Liu

 

 

 

 

Vbox+ Oracle Linux 6.3 + 11.2.0.3 RAC 第三讲配置Vbox虚拟共享存储并使用udev绑定

 

 

 

Vbox+ Oracle Linux 6.3 + 11.2.0.3 第四讲安装11.2.0.3 Grid Infrastructure和db

 

 

 

 

Vbox+Linux 6.3+11.2.0.3 RAC安装第五讲安装GI+RDBMS 11.2.0.3.5 PSU并DBCA建库

 

 

11.2.0.3上仅有一个voting disk可能触发Bug 13869978

11.2.0.2 、11.2.0.3上的cluster中如果仅有一个voting disk可能触发BUG 13869978 , 导致GI重启等问题。

 

Bug 13869978  OCSSD reports that the voting file is offline without reporting the reason

 

Affects:

Product (Component) Oracle Server (PCW)
Range of versions believed to be affected Versions BELOW 12.1
Versions confirmed as being affected
  • 11.2.0.3
  • 11.2.0.2
Platforms affected Generic (all / most platforms affected)

Fixed:

This issue is fixed in
  • 12.1.0.1 (Base Release)
  • 11.2.0.4 (Future Patch Set)
  • 11.2.0.3.4 Grid Infrastructure Patch Set Update (GI PSU)
  • 11.2.0.3 Patch 11 on Windows Platforms

Symptoms:

Related To:

  • (None Specified)
  • Cluster Ready Services / Parallel Server Management

Description

When we have a single voting file CSSD report the file offline, but thre is no IO error or hung condition
previous to taking the voting file offline:

[    CSSD][29](:CSSNM00018:)clssnmvDiskCheck: Aborting, 0 of 1 configured voting disks available, need 1
[    CSSD][29]###################################
[    CSSD][29]clssscExit: CSSD aborting from thread clssnmvDiskPingMonitorThread
[    CSSD][29]###################################
[    CSSD][29](:CSSSC00012:)clssscExit: A fatal error occurred and the CSS daemon is terminating abnormally

Rediscovery Notes:

If there is no IO error or IO hung that caused to set the voting file offline, then we may be getting this bug.

Workaround
Use more than 1 voting file.

Know more _high_priority_processes

Know more _high_priority_processes

 

LMS process priority? In release 9i, increasing LMS process priority to RT or FX (with larger
CPU quanta scheduling schemes) helps. Oracle Corporation has already identified this
potential issue and in release 10g, this issue is taken care of, and LMS processes are running
with RT priority. This alleviates many issues with global cache transfer.
Two parameters control this behaviour2:
a. _high_priority_processes: This controls processes that will have higher priority and
v$parameter specifies this as ¡°High priority process name mask¡± with default value
of LMS*.
b. _os_sched_high_priority: This controls whether OS scheduling high priority is
enabled or not and defaults to 1.


 

In Oracle11g, it is NOT RECOMMENDED TO USE OS facilities like ¡°chrt¡± or ¡°priocntl¡± to manually
manipulate the scheduling classes of Oracle background processes. This is extremely important for Oracle
to be able to keep track of which processes are running in RT and which ones are not. Process scheduling
classes should only be manipulated using the _HIGH_PRIORITY_PROCESSES parameter as described
below.

 

_HIGH_PRIORITY_PROCESSES is a new underscore parameter that specifies which processes should run in
RT class. The default value is “LMS*|VKTM”, meaning that the LMSn and VKTM processes would
automatically run in RT at instance startup. If, for some reason you decide to run your LMSn processes in
time-sharing scheduling class (TS), change this parameter value to “VKTM”, which means that Oracle will
only manipulate the scheduling class for VKTM.
_OS_SCHED_HIGH_PRIORITY is another parameter related to process scheduling class manipulation. The
default value is 1, and changing this to 0 means that all scheduling class manipulation will be disabled,
regardless of the values set for _HIGH_PRIORITY_PROCESSES. We strongly recommend leaving this
parameter set to 1, and to only manipulate the scheduling classes using _HIGH_PRIORITY_PROCESSES.
If everything were configured correctly, the following messages indicating that VKTM and LMSn are running
in RT class would appear in the alert log. Alternatively, you could also use the “ps” command to see which
scheduling class each process is running at.
VKTM started with pid=3, OS id=14839 at elevated priority
LMS0 started with pid=10, OS id=14857 at elevated priority

 

If you do not see these messages, Oracle has failed to manipulate the scheduling class for some reason. To
understand the cause of the failure, check the trace file for each process to see if there is an error. A common
cause of failure would be incorrect permissions on the oradism binary.
ksesethighpri:(ksb.c:3489) Failed to elevate LMS0’s priority from 0 to 1
Error Info: Category(-2), Opname(skgdism_create), Loc(sp.c:1612),\
ErrMsg(Error 0) Dism(-1073762366)
Increasing the priority of other, non-RAC related background processes such as DBWR or LGWR is generally
not advised unless performed in a benchmark environment

针对11.2 RAC丢失OCR和Votedisk所在ASM Diskgroup的恢复手段

之前有同学在我的Oracle Allstarts群里讨论关于丢失包含ocr和votedisk的ASM diskgroup导致11gR2 RAC cluster无法正常启动的问题,最早我在《在11gR2 RAC中修改ASM DISK Path磁盘路径》一文中介绍了,如何在不启动CRS的情况下启动11.2中的ASM实例并实施操作, 这里也需要用到同样的命令”crsctl start crs -excl -nocrs “;

 

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638   QQ号:47079569    邮箱:service@parnassusdata.com

 

注意以下的恢复手段,针对ASM中单独的ocr或者单独的votedisk丢失也有效,因为11.2中普遍把ocr和votedisk存放在ASM中,而ASM的启动又依赖于ocr和votedisk,所以在丢失ocr或votedisk仍一一者都会导致cluter无法正常启动;这里我们仅仅讨论如何让CRS正常启动,如果丢失的diskgroup中还存放有数据库的话,数据的恢复不属于本篇文章的讨论范畴。

 

前提:恢复的前提是你仍有和故障前一样多的ASM LUN DISK,且你有OCR的自动备份,注意默认情况下每4个小时会自动备份一次,只要你没有删除$GI_HOME,一般都会有备份可用;不要求有votedisk备份

 

恢复场景: 利用dd命令清空ocr和votedisk所在diskgroup header,模拟diskgroup corruption:

 

 

1. 检查votedisk和 ocr备份

[root@vrh1 ~]# crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   a853d6204bbc4feabfd8c73d4c3b3001 (/dev/asm-diskh) [SYSTEMDG]
 2. ONLINE   a5b37704c3574f0fbf21d1d9f58c4a6b (/dev/asm-diskg) [SYSTEMDG]
 3. ONLINE   36e5c51ff0294fc3bf2a042266650331 (/dev/asm-diski) [SYSTEMDG]
 4. ONLINE   af337d1512824fe4bf6ad45283517aaa (/dev/asm-diskj) [SYSTEMDG]
 5. ONLINE   3c4a349e2e304ff6bf64b2b1c9d9cf5d (/dev/asm-diskk) [SYSTEMDG]
Located 5 voting disk(s).

su - grid

[grid@vrh1 ~]$ ocrconfig -showbackup
PROT-26: Oracle Cluster Registry backup locations were retrieved from a local copy

vrh1     2012/08/09 01:59:56     /g01/11.2.0/maclean/grid/cdata/vrh-cluster/backup00.ocr

vrh1     2012/08/08 21:59:56     /g01/11.2.0/maclean/grid/cdata/vrh-cluster/backup01.ocr

vrh1     2012/08/08 17:59:55     /g01/11.2.0/maclean/grid/cdata/vrh-cluster/backup02.ocr

vrh1     2012/08/08 05:59:54     /g01/11.2.0/grid/cdata/vrh-cluster/day.ocr

vrh1     2012/08/08 05:59:54     /g01/11.2.0/grid/cdata/vrh-cluster/week.ocr
PROT-25: Manual backups for the Oracle Cluster Registry are not available

2. 彻底关闭所有节点上的clusterware ,OHASD 

crsctl stop has -f

3. GetAsmDH.sh ==> GetAsmDH.sh是ASM disk header的备份脚本 
请养成良好的习惯,做危险操作前备份asm header

[grid@vrh1 ~]$ ./GetAsmDH.sh 

############################################
 1) Collecting Information About the Disks:
############################################

SQL*Plus: Release 11.2.0.3.0 Production on Thu Aug 9 03:28:13 2012

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

SQL> Connected.
SQL> SQL> SQL> SQL> SQL> SQL> SQL> 
           1           0 /dev/asm-diske
           1           1 /dev/asm-diskd
           2           0 /dev/asm-diskb
           2           1 /dev/asm-diskc
           2           2 /dev/asm-diskf
           3           0 /dev/asm-diskh
           3           1 /dev/asm-diskg
           3           2 /dev/asm-diski
           3           3 /dev/asm-diskj
           3           4 /dev/asm-diskk
SQL> SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

-rw-r--r-- 1 grid oinstall 1048 Aug  9 03:28 /tmp/HC/asmdisks.lst

############################################
 2) Generating asm_diskh.sh script.
############################################

-rwx------ 1 grid oinstall 666 Aug  9 03:28 /tmp/HC/asm_diskh.sh

############################################
 3) Executing  asm_diskh.sh script to 
    generate dd  dumps.
############################################

-rw-r--r-- 1 grid oinstall 1048576 Aug  9 03:28 /tmp/HC/dsk_1_0.dd
-rw-r--r-- 1 grid oinstall 1048576 Aug  9 03:28 /tmp/HC/dsk_1_1.dd
-rw-r--r-- 1 grid oinstall 1048576 Aug  9 03:28 /tmp/HC/dsk_2_0.dd
-rw-r--r-- 1 grid oinstall 1048576 Aug  9 03:28 /tmp/HC/dsk_2_1.dd
-rw-r--r-- 1 grid oinstall 1048576 Aug  9 03:28 /tmp/HC/dsk_2_2.dd
-rw-r--r-- 1 grid oinstall 1048576 Aug  9 03:28 /tmp/HC/dsk_3_0.dd
-rw-r--r-- 1 grid oinstall 1048576 Aug  9 03:28 /tmp/HC/dsk_3_1.dd
-rw-r--r-- 1 grid oinstall 1048576 Aug  9 03:28 /tmp/HC/dsk_3_2.dd
-rw-r--r-- 1 grid oinstall 1048576 Aug  9 03:28 /tmp/HC/dsk_3_3.dd
-rw-r--r-- 1 grid oinstall 1048576 Aug  9 03:28 /tmp/HC/dsk_3_4.dd

############################################
 4) Compressing dd dumps in the next format:
    (asm_dd_header_all_.tar)
############################################

/tmp/HC/dsk_1_0.dd
/tmp/HC/dsk_1_1.dd
/tmp/HC/dsk_2_0.dd
/tmp/HC/dsk_2_1.dd
/tmp/HC/dsk_2_2.dd
/tmp/HC/dsk_3_0.dd
/tmp/HC/dsk_3_1.dd
/tmp/HC/dsk_3_2.dd
/tmp/HC/dsk_3_3.dd
/tmp/HC/dsk_3_4.dd
./GetAsmDH.sh: line 81: compress: command not found
ls: /tmp/HC/*.Z: No such file or directory
[grid@vrh1 ~]$

4. 使用dd 命令 破坏ocr和votedisk所在diskgroup

[root@vrh1 ~]# dd if=/dev/zero of=/dev/asm-diskh bs=1024k count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00423853 seconds, 247 MB/s

[root@vrh1 ~]# dd if=/dev/zero of=/dev/asm-diskg bs=1024k count=1 
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.0045179 seconds, 232 MB/s

[root@vrh1 ~]# dd if=/dev/zero of=/dev/asm-diski bs=1024k count=1 
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00469976 seconds, 223 MB/s

[root@vrh1 ~]# dd if=/dev/zero of=/dev/asm-diskj bs=1024k count=1 
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00344262 seconds, 305 MB/s
[root@vrh1 ~]# dd if=/dev/zero of=/dev/asm-diskk bs=1024k count=1 
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.0053518 seconds, 196 MB/s

5. 在一个节点上尝试重新启动HAS

[root@vrh1 ~]# crsctl start has
CRS-4123: Oracle High Availability Services has been started.

 

 

 

但是因为ocr和votedisk所在diskgroup丢失,所以CSS将无法正常启动,如以下日志所示:

 

 

alertvrh1.log 

[cssd(5162)]CRS-1714:Unable to discover any voting files, retrying discovery in 15 seconds; Details at (:CSSNM00070:) in /g01/11.2.0/grid/log/vrh1/cssd/ocssd.log
2012-08-09 03:35:41.207
[cssd(5162)]CRS-1714:Unable to discover any voting files, retrying discovery in 15 seconds; Details at (:CSSNM00070:) in /g01/11.2.0/grid/log/vrh1/cssd/ocssd.log
2012-08-09 03:35:56.240
[cssd(5162)]CRS-1714:Unable to discover any voting files, retrying discovery in 15 seconds; Details at (:CSSNM00070:) in /g01/11.2.0/grid/log/vrh1/cssd/ocssd.log
2012-08-09 03:36:11.284
[cssd(5162)]CRS-1714:Unable to discover any voting files, retrying discovery in 15 seconds; Details at (:CSSNM00070:) in /g01/11.2.0/grid/log/vrh1/cssd/ocssd.log
2012-08-09 03:36:26.305
[cssd(5162)]CRS-1714:Unable to discover any voting files, retrying discovery in 15 seconds; Details at (:CSSNM00070:) in /g01/11.2.0/grid/log/vrh1/cssd/ocssd.log
2012-08-09 03:36:41.328

ocssd.log
2012-08-09 03:40:26.662: [    CSSD][1078700352]clssnmReadDiscoveryProfile: voting file discovery string(/dev/asm*)
2012-08-09 03:40:26.662: [    CSSD][1078700352]clssnmvDDiscThread: using discovery string /dev/asm* for initial discovery
2012-08-09 03:40:26.662: [   SKGFD][1078700352]Discovery with str:/dev/asm*:

2012-08-09 03:40:26.662: [   SKGFD][1078700352]UFS discovery with :/dev/asm*:

2012-08-09 03:40:26.665: [   SKGFD][1078700352]Fetching UFS disk :/dev/asm-diskf:

2012-08-09 03:40:26.665: [   SKGFD][1078700352]Fetching UFS disk :/dev/asm-diskb:

2012-08-09 03:40:26.665: [   SKGFD][1078700352]Fetching UFS disk :/dev/asm-diskj:

2012-08-09 03:40:26.665: [   SKGFD][1078700352]Fetching UFS disk :/dev/asm-diskh:

2012-08-09 03:40:26.665: [   SKGFD][1078700352]Fetching UFS disk :/dev/asm-diskc:

2012-08-09 03:40:26.665: [   SKGFD][1078700352]Fetching UFS disk :/dev/asm-diskd:

2012-08-09 03:40:26.665: [   SKGFD][1078700352]Fetching UFS disk :/dev/asm-diske:

2012-08-09 03:40:26.665: [   SKGFD][1078700352]Fetching UFS disk :/dev/asm-diskg:

2012-08-09 03:40:26.665: [   SKGFD][1078700352]Fetching UFS disk :/dev/asm-diski:

2012-08-09 03:40:26.665: [   SKGFD][1078700352]Fetching UFS disk :/dev/asm-diskk:

2012-08-09 03:40:26.665: [   SKGFD][1078700352]OSS discovery with :/dev/asm*:

2012-08-09 03:40:26.665: [   SKGFD][1078700352]Handle 0xdf22a0 from lib :UFS:: for disk :/dev/asm-diskf:

2012-08-09 03:40:26.665: [   SKGFD][1078700352]Handle 0xf412a0 from lib :UFS:: for disk :/dev/asm-diskb:

2012-08-09 03:40:26.666: [   SKGFD][1078700352]Handle 0xf3a680 from lib :UFS:: for disk :/dev/asm-diskj:

2012-08-09 03:40:26.666: [   SKGFD][1078700352]Handle 0xf93da0 from lib :UFS:: for disk :/dev/asm-diskh:

2012-08-09 03:40:26.667: [    CSSD][1078700352]clssnmvDiskVerify: Successful discovery of 0 disks
2012-08-09 03:40:26.667: [    CSSD][1078700352]clssnmCompleteInitVFDiscovery: Completing initial voting file discovery
2012-08-09 03:40:26.667: [    CSSD][1078700352]clssnmvFindInitialConfigs: No voting files found
2012-08-09 03:40:26.667: [    CSSD][1078700352](:CSSNM00070:)clssnmCompleteInitVFDiscovery: Voting file not found. Retrying discovery in 15 seconds

 

 

 

正式的恢复ocr和votedisk所在diskgroup的步骤如下:

 

 

1. 以-excl -nocrs 方式启动cluster,这将可以启动ASM实例 但不启动CRS

 [root@vrh1 vrh1]# crsctl start crs -excl -nocrs 

CRS-4123: Oracle High Availability Services has been started.
CRS-2672: Attempting to start 'ora.mdnsd' on 'vrh1'
CRS-2676: Start of 'ora.mdnsd' on 'vrh1' succeeded
CRS-2672: Attempting to start 'ora.gpnpd' on 'vrh1'
CRS-2676: Start of 'ora.gpnpd' on 'vrh1' succeeded
CRS-2672: Attempting to start 'ora.cssdmonitor' on 'vrh1'
CRS-2672: Attempting to start 'ora.gipcd' on 'vrh1'
CRS-2676: Start of 'ora.cssdmonitor' on 'vrh1' succeeded
CRS-2676: Start of 'ora.gipcd' on 'vrh1' succeeded
CRS-2672: Attempting to start 'ora.cssd' on 'vrh1'
CRS-2672: Attempting to start 'ora.diskmon' on 'vrh1'
CRS-2676: Start of 'ora.diskmon' on 'vrh1' succeeded
CRS-2676: Start of 'ora.cssd' on 'vrh1' succeeded
CRS-2679: Attempting to clean 'ora.cluster_interconnect.haip' on 'vrh1'
CRS-2672: Attempting to start 'ora.ctssd' on 'vrh1'
CRS-2681: Clean of 'ora.cluster_interconnect.haip' on 'vrh1' succeeded
CRS-2672: Attempting to start 'ora.cluster_interconnect.haip' on 'vrh1'
CRS-2676: Start of 'ora.ctssd' on 'vrh1' succeeded
CRS-2676: Start of 'ora.cluster_interconnect.haip' on 'vrh1' succeeded
CRS-2672: Attempting to start 'ora.asm' on 'vrh1'
CRS-2676: Start of 'ora.asm' on 'vrh1' succeeded

 

 

 

2.重建原ocr和votedisk所在diskgroup,注意compatible.asm必须是11.2:

 

 

[root@vrh1 vrh1]# su - grid
[grid@vrh1 ~]$ sqlplus  / as sysasm

SQL*Plus: Release 11.2.0.3.0 Production on Thu Aug 9 04:16:58 2012

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SQL> create diskgroup systemdg high redundancy disk '/dev/asm-diskh','/dev/asm-diskg','/dev/asm-diski','/dev/asm-diskj','/dev/asm-diskk'
 ATTRIBUTE 'compatible.rdbms' = '11.2', 'compatible.asm' = '11.2';

 

 

 

3.从ocr backup中恢复ocr并做ocrcheck检验:

 

 

[root@vrh1 ~]# ocrconfig -restore /g01/11.2.0/grid/cdata/vrh-cluster/backup00.ocr

[root@vrh1 ~]# ocrcheck
Status of Oracle Cluster Registry is as follows :
         Version                  :          3
         Total space (kbytes)     :     262120
         Used space (kbytes)      :       3180
         Available space (kbytes) :     258940
         ID                       : 1238458014
         Device/File Name         :  +systemdg
                                    Device/File integrity check succeeded

                                    Device/File not configured

                                    Device/File not configured

                                    Device/File not configured

                                    Device/File not configured

         Cluster registry integrity check succeeded

         Logical corruption check succeeded

 

 

 

4. 准备恢复votedisk ,可能会遇到下面的错误:

 

[grid@vrh1 ~]$ crsctl replace votedisk  +SYSTEMDG
CRS-4602: Failed 27 to add voting file 2e4e0fe285924f86bf5473d00dcc0388.
CRS-4602: Failed 27 to add voting file 4fa54bb0cc5c4fafbf1a9be5479bf389.
CRS-4602: Failed 27 to add voting file a109ead9ea4e4f28bfe233188623616a.
CRS-4602: Failed 27 to add voting file 042c9fbd71b54f5abfcd3ab3408f3cf3.
CRS-4602: Failed 27 to add voting file 7b5a8cd24f954fafbf835ad78615763f.
Failed to replace voting disk group with +SYSTEMDG.
CRS-4000: Command Replace failed, or completed with errors.

 

 

需要重新配置一下ASM的参数,并重启ASM:

 

 

SQL> alter system set asm_diskstring='/dev/asm*';

System altered.

SQL> create spfile from memory;

File created.

SQL>  startup force mount;
ORA-32004: obsolete or deprecated parameter(s) specified for ASM instance
ASM instance started

Total System Global Area  283930624 bytes
Fixed Size                  2227664 bytes
Variable Size             256537136 bytes
ASM Cache                  25165824 bytes
ASM diskgroups mounted

SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /g01/11.2.0/grid/dbs/spfile+AS
                                                 M1.ora

[grid@vrh1 trace]$  crsctl replace votedisk  +SYSTEMDG
CRS-4256: Updating the profile
Successful addition of voting disk 85edc0e82d274f78bfc58cdc73b8c68a.
Successful addition of voting disk 201ffffc8ba44faabfe2efec2aa75840.
Successful addition of voting disk 6f2a25c589964faabf6980f7c5f621ce.
Successful addition of voting disk 93eb315648454f25bf3717df1a2c73d5.
Successful addition of voting disk 3737240678964f88bfbfbd31d8b3829f.
Successfully replaced voting disk group with +SYSTEMDG.
CRS-4256: Updating the profile
CRS-4266: Voting file(s) successfully replaced

 

 

 

 

5. 重启has服务,检验cluster是否正常:

 

 

[root@vrh1 ~]# crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online

[root@vrh1 ~]# crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   85edc0e82d274f78bfc58cdc73b8c68a (/dev/asm-diskh) [SYSTEMDG]
 2. ONLINE   201ffffc8ba44faabfe2efec2aa75840 (/dev/asm-diskg) [SYSTEMDG]
 3. ONLINE   6f2a25c589964faabf6980f7c5f621ce (/dev/asm-diski) [SYSTEMDG]
 4. ONLINE   93eb315648454f25bf3717df1a2c73d5 (/dev/asm-diskj) [SYSTEMDG]
 5. ONLINE   3737240678964f88bfbfbd31d8b3829f (/dev/asm-diskk) [SYSTEMDG]
Located 5 voting disk(s).

[root@vrh1 ~]# crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.BACKUPDG.dg
               ONLINE  ONLINE       vrh1                                         
ora.DATA.dg
               ONLINE  ONLINE       vrh1                                         
ora.LISTENER.lsnr
               ONLINE  ONLINE       vrh1                                         
ora.LSN_MACLEAN.lsnr
               ONLINE  ONLINE       vrh1                                         
ora.SYSTEMDG.dg
               ONLINE  ONLINE       vrh1                                         
ora.asm
               ONLINE  ONLINE       vrh1                     Started             
ora.gsd
               OFFLINE OFFLINE      vrh1                                         
ora.net1.network
               ONLINE  ONLINE       vrh1                                         
ora.ons
               ONLINE  ONLINE       vrh1                                         
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr  https://www.askmaclean.com
      1        ONLINE  ONLINE       vrh1                                         
ora.cvu
      1        OFFLINE OFFLINE                                                   
ora.oc4j
      1        OFFLINE OFFLINE                                                   
ora.scan1.vip
      1        ONLINE  ONLINE       vrh1                                         
ora.vprod.db
      1        ONLINE  OFFLINE                                                   
      2        ONLINE  OFFLINE                                                   
ora.vrh1.vip
      1        ONLINE  ONLINE       vrh1                                         
ora.vrh2.vip
      1        ONLINE  INTERMEDIATE vrh1                     FAILED OVER

从此SQLPLUS有了Top命令

Jagjeet Singh为我们提供了这样一个sqlplus下的RAC dashboard,实时的性能工具,看上去和top或者nmon命令的界面很相似,借助于这个工具我们将可以实时监控RAC的性能指标而不依赖于图形界面。

 

点击这里下载Jagjeet Singh的sqlplus dashboard for rac工具

 

具体的安装方法如下:

 

 

解压zip包 

[oracle@vrh1 ~]$ unzip Pck.zip 
Archive:  Pck.zip
   creating: Pck/
  inflating: Pck/1_grants.sql        
  inflating: Pck/2_Types.sql         
  inflating: Pck/3_pkg.sql           
  inflating: Pck/drop.sql            
  inflating: Pck/howtoinstall.sql    
  inflating: Pck/outputexplained.pdf  
  inflating: Pck/sampleoutput.png    

[oracle@vrh1 ~]$ cd Pck

[oracle@vrh1 Pck]$ sqlplus  / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Wed Aug 8 02:08:49 2012

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

1.  执行授权文件1_grants.sql        

SQL> start 1_grants.sql
Enter value for _usr: maclean

需要指定安装在哪个schema下

2. 登录上面指定的schema,并执行 2_Types.sql 创建type

SQL> conn maclean/maclean
Connected.
SQL> 
SQL> 
SQL> start 2_Types.sql

Type created.

Type created.

Type created.

Type created.

Type created.

Type created.

Type created.

Type created.

Type created.

Type created.

3. 执行3_pkg.sql 创建包体

SQL> start 3_pkg.sql

Package created.

No errors.

Package body created.

 若想删除该工具吗,卸载的方法 

SQL> connect maclean/maclean
SQL> start drop.sql

 

 

 

具体使用的方法如下:

 

 

 SQL>set lines 190 pages 0 arraysize 50
 SQL>select * from table(jss.gtop(50,10)) ;

50代表 arraysize 一般不用修改
10代表 10s采样一次,采样间隔

 

示例输出:

 

这很酷,仿佛文字版的spotlight  FOR RAC

CTSSD服务无法正常启动:Failure 4 in trying to open SV key PROCL-4/PROCL-5 clsctss_r_av2

如果CTSSD服务无法正常启动,则在11.2中将无法正常启动HAS=>CRS导致RAC无法正常使用。

具体的诊断需要参考$GRID_HOME/log/$HOSTNAME/ctssd/octssd.log 的日志,例如:

 

 

2010-12-23 16:45:31.287: [ GIPC][1257901344] gipcCheckInitialization: possible incompatible non-threaded init from [prom.c : 687], original from [clsss.c : 5325]
[ default][1257901344]Failure 4 in trying to open SV key SYSTEM.version.localhost

[ default][1257901344]procr_open_key error 4 errorbuf : PROCL-4: The local registry key to be operated on does not exist.
or PROCL-5
2010-12-23 16:45:31.289: [ CTSS][1257901344]clsctss_r_av2: Error [3] retrieving Active Version from OLR. Returns [19].
2010-12-23 16:45:31.292: [ CTSS][1257901344](:ctss_init16:): Error [19] retrieving active version. Returns [19].
2010-12-23 16:45:31.292: [ CTSS][1257901344]ctss_main: CTSS init failed [19]
2010-12-23 16:45:31.292: [ CTSS][1257901344]ctss_main: CTSS daemon aborting [19].

 

 

触发该错误,主要有2种可能:

  1. ocr所在ASM DISK的用户权限存在问题
  2. ocr所在ASM DISK在节点之间设备名不一致
  3. HAS的状态不正常
  4.  bug 10420872

 

对于问题2  建议通过kfed read /dev/oracleasm/disks/OCRVOTE01 | grep kfbh.type  来确认节点之间的ASM DISK一致。

对于问题3 可以尝试 重启 HAS 服务:

su - root

crsctl stop has -f

crsctl start has

【教学视频】Maclean教你一步一步使用Vbox在Linux 5上安装Oracle 11gR2 RAC

 

https://zcdn.askmaclean.com/dbDao_install%2011gr2%20RAC%20on%20Linux%205.7%20in%20vbox.pdf

[视频教学]Maclean教你用Vbox在Enterprise Linux 5上安装Oracle 10gR2 RAC

【视频教学】Maclean手把手教你用Vbox在Enterprise Linux 5上安装Oracle 10gR2 RAC数据库

WebEx视频播放软件 , 以下wrf格式文件 需要使用webex播放,

下载WebEX: 

 

 
 WebEx.zip (2.55 MB, 下载次数: 6539)

Agenda:

相关脚本 和命令附件:    脚本命令.txt (1.71 KB, 下载次数: 1444)

第一讲视频-在Windows上安装Vbox

 第一讲视频-在Windows上安装Vbox.zip (4.41 MB, 下载次数: 4930)

第二讲视频-在Vbox上安装Oracle Enterprise Linux 5.7虚拟主机

 第二讲视频-在Vbox上安装Oracle Enterprise Linux 5.7虚拟主机.zip (12.05 MB, 下载次数: 11741)

第三讲视频-配置并克隆Oracle Enterprise 5.7虚拟主机

 第三讲视频-配置并克隆Oracle Enterprise 5.7虚拟主机.zip (14.82 MB, 下载次数: 30549)

第四讲视频-配置Vbox共享存储和UDEV存储设备绑定

 第四讲视频-配置Vbox共享存储和UDEV存储设备绑定.zip (13.16 MB, 下载次数: 29091)

第五讲视频-安装10.2.0.1 x64 Linux Oracle Clusterware CRS

 第五讲视频-安装10.2.0.1 x64 Linux Oracle Clusterware CRS.zip (10.48 MB, 下载次数: 8603)

第六讲视频-升级Clusterware CRS 10.2.0.1 到 Patchset 10.2.0.5

 第六讲视频-升级Clusterware CRS 10.2.0.1 到 Patchset 10.2.0.5 .zip (3.2 MB, 下载次数: 5716)

第七讲视频-安装10.2.0.1 DB数据库并升级到10.2.0.5 Patchset 并DBCA创建数据库

 第七讲视频-安装10.2.0.1DB数据库升级到10.2.0.5创建数据库.zip (10.37 MB, 下载次数: 8511)

沪ICP备14014813号

沪公网安备 31010802001379号