RAC各服务精彩总结

1.1 并发控制

在集群环境中, 关键数据通常是共享存放的,比如放在共享磁盘上。 而各个节点的对数据有相同的访问权限, 这时就必须有某种机制能够控制节点对数据的访问。 Oracle RAC 是利用DLM(Distribute Lock Management) 机制来进行多个实例间的并发控制。

1.2 健忘症(Amnesia)

集群环境配置文件不是集中存放的,而是每个节点都有一个本地副本,在集群正常运行时,用户可以在任何节点更改集群的配置,并且这种更改会自动同步到其他节点。

有一种特殊情况: 节点A 正常关闭, 在节点B上修改配置, 关闭结点A,启动结点B。 这种情况下,修改的配置文件是丢失的, 就是所谓的健忘症。

1.3 脑裂(Split Brain)

在集群中,节点间通过某种机制(心跳)了解彼此的健康状态,以确保各节点协调工作。 假设只有"心跳"出现问题, 各个节点还在正常运行, 这时,每个节点都认为其他的节点宕机了, 自己是整个集群环境中的"唯一建在者",自己应该获得整个集群的"控制权"。 在集群环境中,存储设备都是共享的, 这就意味着数据灾难, 这种情况就是"脑裂"

解决这个问题的通常办法是使用投票算法(Quorum Algorithm). 它的算法机理如下:

集群中各个节点需要心跳机制来通报彼此的"健康状态",假设每收到一个节点的"通报"代表一票。对于三个节点的集群,正常运行时,每个节点都会有3票。 当结点A心跳出现故障但节点A还在运行,这时整个集群就会分裂成2个小的partition。 节点A是一个,剩下的2个是一个。 这是必须剔除一个partition才能保障集群的健康运行。 

对于有3个节点的集群, A 心跳出现问题后, B 和 C 是一个partion,有2票, A只有1票。 按照投票算法, B 和C 组成的集群获得控制权, A 被剔除。 

如果只有2个节点,投票算法就失效了。 因为每个节点上都只有1票。 这时就需要引入第三个设备:Quorum Device. Quorum Device 通常采用饿是共享磁盘,这个磁盘也叫作Quorum disk。 这个Quorum Disk 也代表一票。 当2个结点的心跳出现问题时, 2个节点同时去争取Quorum Disk 这一票, 最早到达的请求被最先满足。 故最先获得Quorum Disk的节点就获得2票。另一个节点就会被剔除。

1.4 IO 隔离(Fencing)

当集群系统出现"脑裂"问题的时候,我们可以通过"投票算法"来解决谁获得集群控制权的问题。 但是这样是不够的,我们还必须保证被赶出去的结点不能操作共享数据。  这就是IO Fencing 要解决的问题。

IO Fencing实现有硬件和软件2种方式:

软件方式:对于支持SCSI Reserve/Release 命令的存储设备, 可以用SG命令来实现。 正常的节点使用SCSI Reserve命令"锁住"存储设备, 故障节点发现存储设备被锁住后,就知道自己被赶出了集群,也就是说自己出现了异常情况, 就要自己进行重启,以恢复到正常状态。 这个机制也叫作 Sicide(自杀). Sun 和Veritas 使用的就是这种机制。

硬件方式:STONITH(Shoot The Other Node in the Head), 这种方式直接操作电源开关,当一个节点发生故障时,另一个节点如果能侦测到,就会通过串口发出命令,控制故障节点的电源开关,通过暂时断电,而又上电的方式使故障节点被重启动, 这种方式需要硬件支持。

二 RAC 集群

2.1 Clusterware

在单机环境下,Oracle是运行在OS Kernel 之上的。 OS Kernel负责管理硬件设备,并提供硬件访问接口。 Oracle 不会直接操作硬件,而是有OS Kernel代替它来完成对硬件的调用请求。

在集群环境下, 存储设备是共享的。OS Kernel 的设计都是针对单机的,只能控制单机上多个进程间的访问。 如果还依赖OS Kernel的服务,就无法保证多个主机间的协调工作。 这时就需要引入额外的控制机制,在RAC中,这个机制就是位于Oracle 和 OS Kernel 之间的Clusterware,它会在OS Kernel之前截获请求,然后和其他结点上的Clusterware协商,最终完成上层的请求。

在Oracle 10G之前,RAC 所需要的集群件依赖与硬件厂商,比如SUN,HP,Veritas. 从Oracle 10.1版本中,Oracle 推出了自己的集群产品. Cluster Ready Service(CRS),从此RAC 不在依赖与任何厂商的集群软件。 在Oracle 10.2版本中,这个产品改名为:Oracle Clusterware。 

所以我们可以看出, 在整个RAC 集群中,实际上有2个集群环境的存在,一个是由Clusterware 软件组成的集群,另一个是由Database 组成的集群。

2.2 Clusterware 组成

Oracle Cluster 是一个单独的安装包,安装后,在每个结点上的Oracle Clusterware 会自动启动。 Oracle Clusterware的运行环境由2个磁盘文件(OCR,Voting Disk),若干进程和网络元素组成。 

2.2.1 磁盘文件:

Clusterware 在运行期间需要两个文件:OCR和Voting Disk. 这2个文件必须存放在共享存储上。 OCR 用于解决健忘问题,Voting Disk 用于解决健忘问题。 Oracle 建议使用裸设备来存放这2个文件,每个文件创建一个裸设备,每个裸设备分配100M左右的空间就够了。

2.2.1.1 OCR

健忘问题是由于每个节点都有配置信息的拷贝,修改节点的配置信息不同步引起的。 Oracle 采用的解决方法就是把这个配置文件放在共享的存储上, 这个文件就是OCR Disk。

OCR 中保存整个集群的配置信息,配置信息以"Key-Value" 的形式保存其中。 在Oracle 10g以前, 这个文件叫作Server Manageability Repository(SRVM). 在Oracle 10g, 这部分内容被重新设计,并重名为OCR.在Oracle Clusterware 安装的过程中, 安装程序会提示用户指定OCR位置。并且用户指定的这个位置会被记录在/etc/oracle/ocr.Loc(Linux System) 或者/var/opt/oracle/ocr.Loc(Solaris System)文件中。 而在Oracle 9i RAC中,对等的是srvConfig.Loc文件。 Oracle Clusterware在启动时会根据这里面的内容从指定位置读入OCR 内容。

1). OCR key

整个OCR 的信息是树形结构,有3个大分支。分别是SYSTEM,DATABASE 和CRS。每个分支下面又有许多小分支。这些记录的信息只能由root用户修改。

2) OCR process

Oracle Clusterware 在OCR中存放集群配置信息,故OCR 的内容非常的重要,所有对OCR的操作必须确保OCR 内容完整性,所以在ORACLE Clusterware运行过程中,并不是所有结点都能操作OCR Disk. 

在每个节点的内存中都有一份OCR内容的拷贝,这份拷贝叫作OCR Cache。 每个结点都有一个OCR Process 来读写OCR Cache,但只有一个节点的OCR process能读写OCR Disk中的内容,这个节点叫作OCR Master结点。 这个节点的OCR process 负责更新本地和其他结点的OCR Cache内容。

所有需要OCR 内容的其他进程,比如OCSSD,EVM等都叫作Client Process, 这些进程不会直接访问OCR Cache,而是像OCR Process发送请求,借助OCR Process获得内容,如果想要修改OCR 内容,也要由该节点的OCR Process像Master node 的OCR process 提交申请,由Master OCR Process完成物理读写,并同步所有节点OCR Cache中的内容。

   2.2.1.2  Voting Disk

Voting Disk 这个文件主要用于记录节点成员状态,在出现脑裂时,决定那个Partion获得控制权,其他的Partion必须从集群中剔除。在安装Clusterware时也会提示指定这个位置。 安装完成后可以通过如下命令来查看Voting Disk位置。

$Crsctl query css votedisk

2.2.2 Clusterware 后台进程

Clusterware 由若干进程组成,其中最重要的3个是:CRSD,CSSD,EVMD. 在安装clusterware的最后阶段,会要求在每个节点执行root.sh 脚本, 这个脚本会在/etc/inittab 文件的最后把这3个进程加入启动项,这样以后每次系统启动时,Clusterware 也会自动启动,其中EVMD和CRSD 两个进程如果出现异常,则系统会自动重启这两个进程,如果是CSSD 进程异常,系统会立即重启。

   1). OCSSD

      OCSSD 这个进程是Clusterware最关键的进程,如果这个进程出现异常,会导致系统重启,这个进程提供CSS(Cluster Synchronization Service)服务。 CSS 服务通过多种心跳机制实时监控集群状态,提供脑裂保护等基础集群服务功能。

CSS 服务有2种心跳机制: 一种是通过私有网络的Network Heartbeat,另一种是通过Voting Disk的Disk Heartbeat.

这2种心跳都有最大延时,对于Disk Heartbeat, 这个延时叫作IOT (I/O Timeout);对于Network Heartbeat, 这个延时叫MC(Misscount)。 这2个参数都以秒为单位,缺省时IOT大于MC,在默认情况下,这2个参数是Oracle 自动判定的,并且不建议调整。可以通过如下命令来查看参数值:

$crsctl get css disktimeout

$crsctl get css misscount

   注:除了Clusterware 需要这个进程,在单节点环境中如果使用了ASM,也需要这个进程;这个进程用于支持ASM Instance 和RDBMS Instance之间的通信。 如果在使用了ASM的节点上安装RAC,会遇到一个问题:RAC节点要求只有一个OCSSD进程,并且应该是运行$CRS_HOME目录下的,这时就需要先停止ASM,并通过$ORACLE_HOME/bin/localcfig.Sh delete 删除之前的inittab 条目。 之前安装ASM时,也使用这个脚本来启动OCSSD: $ORACLE_HOME/bin/localconfig.Sh add. 

2). CRSD

  CRSD是实现"高可用性(HA)"的主要进程,它提供的服务叫作CRS(Cluster Ready Service) 服务。

Oracle Clusterware是位于集群层的组件,它要为应用层资源(CRS Resource) 提供"高可用性服务",所以, Oracle Clusterware 必须监控这些资源,并在这些资源运行异常时进行干预,包括关闭,重启进程或者转移服务。CRSD进程提供的就是这些服务。

所有需要 高可用性 的组件,都会在安装配置的时候,以CRS Resource的形式登记到OCR中,而CRSD 进程就是根据OCR中的内容,决定监控哪些进程,如何监控,出现问题时又如何解决。也就是说,CRSD 进程负责监控CRS Resource 的运行状态,并要启动,停止,监控,Failover这些资源。 默认情况下,CRS 会自动尝试重启资源5次,如果还是失败,则放弃尝试。

CRS Resource 包括GSD(Global Serveice Daemon),ONS(Oracle Notification Service),VIP, Database, Instance 和 Service. 这些资源被分成2类:

GSD,ONS,VIP 和 Listener 属于Noteapps类

Database,Instance 和Service 属于 Database-Related Resource 类。

我们可以这样理解: Nodeapps 就是说每个节点只需要一个就够了,比如每个节点只有一个Listener,而Database-Related Resource 就是说这些资源和数据库有关,不受节点的限制,比如一个节点可以有多个实例,每个实例可以有多个Service。

GSD,ONS,VIP 这3个服务是在安装Clusterware的最后,执行VIPCA 时创建并登记到OCR中的。 而Database, Listener, Instance 和Service 是在各自的配置过程中自动或者手动登记到OCR中的。

  3). EVMD

     EVMD 这个进程负责发布CRS 产生的各种事件(Event). 这些Event可以通过2种方式发布给客户:ONS 和 Callout Script. 用户可以自定义回调脚本,放在特定的目录下,这样当有某些事件发生时,EVMD会自动扫描该目录,并调用用户的脚本,这种调用是通过racgevt进程来完成的。

EVMD 进程除了复杂发布事件之外,它还是CRSD 和CSSD 两个进程之间的桥梁。 CRS 和CSS 两个服务之前的通信就是通过EVMD 进程完成的。

  4). RACGIMON

     RACGIMON 这个进程负责检查数据库健康状态,负责Service的启动,停止,故障转移(Failover)。 这个进程会建立到数据库的持久连接,定期检查SGA中的特定信息,该信息由PMON 进程定时更新。

   5). OPROCD

OPROCD 这个进程也叫作 Process Monitor Daemon. 如果在非Linux 平台上,并且没有使用第三方的集群软件时,就会看到这个进程。 这个进程用来检查节点的Processor Hang(CPU 挂起), 如果调度时间超过1.5秒, 就会认为CPU 工作异常,会重启节点。 也就是说这个进程提供 "IO 隔离" 的功能。 从其在Windows 平台上的服务名: OraFnceService 也可以看出它的功能。 而在Linux 平台上, 是利用Hangcheck-timer 模块来实现"IO 隔离"的。

2.3 VIP 原理和特点

Oracle 的TAF 就是建立在VIP 技术之上的。 IP 和VIP 区别在与: IP 是利用TCP层超时, VIP 利用的是应用层的立即响应。VIP 它是浮动的IP. 当一个节点出现问题时会自动的转到另一个节点上。

假设有一个2个节点的RAC,正常运行时每个节点上都有一个VIP。 VIP1 和VIP2. 当节点2发生故障,比如异常关系。 RAC 会做如下操作:

1). CRS 在检测到rac2节点异常后,会触发Clusterware 重构,最后把rac2节点剔除集群,由节点1组成新的集群。

2). RAC的Failover 机制会把节点2的VIP转移到节点1上,这时节点1的PUBLIC 网卡上就有3个IP 地址: VIP1,VIP2, PUBLIC IP1.

3). 用户对VIP2的连接请求会被IP层路由转到节点1

4). 因为在节点1上有VIP2的地址,所有数据包会顺利通过路由层,网络层,传输层。

5). 但是,节点1上只监听VIP1和public IP1的两个IP地址。并没有监听VIP2,故应用层没有对应的程序接收这个数据包,这个错误立即被捕获。

6). 客户段能够立即接收到这个错误,然后客户段会重新发起向VIP1的连接请求。

   VIP 特点:

     1). VIP 是通过VIPCA脚本创建的

     2). VIP 作为Nodeapps类型的CRS Resource 注册到OCR中,并由CRS 维护状态。

     3). VIP 会绑定到节点的public 网卡上,故public 网卡有2个地址。

     4). 当某个节点发生故障时,CRS 会把故障节点的VIP 转移到其他节点上。

5). 每个节点的Listener 会同时监听public 网卡上的 public ip 和VIP

6). 客户端的tnsnames.Ora 一般会配置指向节点的VIP.

2.4 Clusterware 的日志体系

Oracle Clusterware的辅助诊断,只能从log 和trace 进行。 而且它的日志体系比较复杂。 

alert.log:

 $ORA_CRS_HOME/log/hostname/alert.Log, 这是首选的查看文件。

Clusterware后台进程日志:

crsd.Log: $ORA_CRS_HOME/log/hostname/crsd/crsd.Log

ocssd.Log: $ORA_CRS_HOME/log/hostname/cssd/ocsd.Log

evmd.Log: $ORA_CRS_HOME/log/hostname/evmd/evmd.Log

Nodeapp日志位置:

$ORA_CRS_HOME/log/hostname/racg/

 这里面放的是nodeapp的日志,包括ONS和VIP,比如:ora.Rac1.ons.Log

工具执行日志:

$ORA_CRS_HOME/log/hostname/client/

Clusterware 提供了许多命令行工具: 

比如ocrcheck, ocrconfig,ocrdump,oifcfg和clscfg, 这些工具产生的日志就放在这个目录下

还有$ORACLE_HOME/log/hostname/client/ 和

$ORACLE_HOME/log/hostname/racg 也有相关的日志。 

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

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

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

Oracle 的管理可以通过OEM或者命令行接口。 Oracle Clusterware的命令集可以分为以下4种:

节点层:olsnodes

网络层:oifcfg

集群层:crsctl, ocrcheck,ocrdump,ocrconfig

应用层:srvctl,onsctl,crs_stat

下面分别来介绍这些命令。 


一. 节点层

只有一个命令: olsnodes, 这个命令用来显示集群点列表,可用的参数如下,这些参数可以混合使用。


[root@raw1 bin]# ./olsnodes --help

Usage: olsnodes [-n] [-p] [-i] [<node> | -l] [-g] [-v]

        where

                -n print node number with the node name

                -p print private interconnect name with the node name

                -i print virtual IP name with the node name

                <node> print information for the specified node

                -l print information for the local node

                -g turn on logging

                -v run in verbose mode

[root@raw1 bin]# ./olsnodes -n -p -i              OCR 中获得

raw1    1       raw1-priv       raw1-vip 

raw2    2       raw2-priv       raw2-vip

二. 网络层

 网络层由各个节点的网络组件组成,包括2个物理网卡和3个IP 地址。 也只有一个命令:oifcfg.

 Oifctg 命令用来定义和修改Oracle 集群需要的网卡属性,这些属性包括网卡的网段地址,子网掩码,接口类型等。 要想正确的使用这个命令, 必须先知道Oracle 是如何定义网络接口的,Oracle的每个网络接口包括名称,网段地址,接口类型3个属性。

Oifcfg 命令的格式如下: interface_name/subnet:interface_type

这些属性中没有IP地址,但接口类型有两种,public和private,前者说明接口用于外部通信,用于Oracle Net和VIP 地址,而后者说明接口用于Interconnect。

接口的配置方式分为两类: global 和node-specific。 前者说明集群所有节点的配置信息相同,也就是说所有节点的配置是对称的;而后者意味着这个节点的配置和其他节点配置不同,是非对称的。

Iflist:显示网口列表

Getif: 获得单个网口信息

Setif:配置单个网口

Delif:删除网口

[root@raw1 bin]# ./oifcfg --help

PRIF-9: incorrect usage


Name:

        oifcfg - Oracle Interface Configuration Tool.


Usage:  oifcfg iflist [-p [-n]]

        oifcfg setif {-node <nodename> | -global} {<if_name>/<subnet>:<if_type>}...

        oifcfg getif [-node <nodename> | -global] [ -if <if_name>[/<subnet>] [-type <if_type>] ]

        oifcfg delif [-node <nodename> | -global] [<if_name>[/<subnet>]]

        oifcfg [-help]


        <nodename> - name of the host, as known to a communications network

        <if_name>  - name by which the interface is configured in the system

        <subnet>   - subnet address of the interface

        <if_type>  - type of the interface { cluster_interconnect | public | storage }

[root@raw1 bin]# ./oifcfg iflist

eth0  10.85.10.0

eth1  192.168.1.0

[root@raw1 bin]# ./oifcfg getif

eth0  10.85.10.119  global  public

eth0  10.85.10.121  global  public

eth0  10.85.10.0  global  public

eth1  192.168.1.119  global  cluster_interconnect

eth1  192.168.1.121  global  cluster_interconnect

eth1  192.168.1.0  global  cluster_interconnect

-- 查看public 类型的网卡

[root@raw1 bin]# ./oifcfg getif -type public

eth0  10.85.10.119  global  public

eth0  10.85.10.121  global  public

eth0  10.85.10.0  global  public

-- 删除接口配置

[root@raw1 bin]# ./oifcfg delif -global

-- 添加接口配置

[root@raw1 bin]# ./oifcfg setif -global eth0/192.168.1.119:public

[root@raw1 bin]# ./oifcfg setif -global eth1/10.85.10.119:cluster_interconnect

三. 集群层

集群层是指由Clusterware组成的核心集群, 这一层负责维护集群内的共享设备,并为应用集群提供完整的集群状态视图,应用集群依据这个视图进行调整。 这一层共有4个命令: crsctl, ocrcheck,ocrdump,ocrconfig. 后三个是针对OCR 磁盘的。

3.1 CRSCTL

Crsctl 命令可以用来检查CRS 进程栈,每个crs 进程状态,管理Votedisk,跟踪CRS进程功能。

[root@raw1 bin]# ./crsctl

Usage: crsctl check  crs          - checks the viability of the CRS stack

       crsctl check  cssd         - checks the viability of CSS    d: daemon

       crsctl check  crsd         - checks the viability of CRS

       crsctl check  evmd         - checks the viability of EVM

       crsctl set    css <parameter> <value> - sets a parameter override

       crsctl get    css <parameter> - gets the value of a CSS parameter

       crsctl unset  css <parameter> - sets CSS parameter to its default

       crsctl query  css votedisk    - lists the voting disks used by CSS

       crsctl add    css votedisk <path> - adds a new voting disk

       crsctl delete css votedisk <path> - removes a voting disk

       crsctl enable  crs    - enables startup for all CRS daemons

       crsctl disable crs    - disables startup for all CRS daemons

       crsctl start crs  - starts all CRS daemons.

       crsctl stop  crs  - stops all CRS daemons. Stops CRS resources in case of cluster.

       crsctl start resources  - starts CRS resources.

       crsctl stop resources  - stops  CRS resources.

       crsctl debug statedump evm  - dumps state info for evm objects

       crsctl debug statedump crs  - dumps state info for crs objects

       crsctl debug statedump css  - dumps state info for css objects

       crsctl debug log css [module:level]{,module:level} ...

                             - Turns on debugging for CSS

       crsctl debug trace css - dumps CSS in-memory tracing cache

       crsctl debug log crs [module:level]{,module:level} ...

                             - Turns on debugging for CRS

       crsctl debug trace crs - dumps CRS in-memory tracing cache

       crsctl debug log evm [module:level]{,module:level} ...

                             - Turns on debugging for EVM

       crsctl debug trace evm - dumps EVM in-memory tracing cache

       crsctl debug log res <resname:level> turns on debugging for resources

       crsctl query crs softwareversion [<nodename>] - lists the version of CRS software installed

       crsctl query crs activeversion - lists the CRS software operating version

       crsctl lsmodules css - lists the CSS modules that can be used for debugging

       crsctl lsmodules crs - lists the CRS modules that can be used for debugging

       crsctl lsmodules evm - lists the EVM modules that can be used for debugging


 If necesary any of these commands can be run with additional tracing by

 adding a "trace" argument at the very front.

 Example: crsctl trace check css


3.1.1 检查CRS 状态

[root@raw1 bin]# ./crsctl check crs

CSS appears healthy

CRS appears healthy

EVM appears healthy


-- 检查单个状态

[root@raw1 bin]# ./crsctl check cssd

CSS appears healthy

[root@raw1 bin]# ./crsctl check crsd

CRS appears healthy

[root@raw1 bin]# ./crsctl check evmd

EVM appears healthy


3.1.2 配置CRS 栈是否自启动

   CRS 进程默认随着操作系统的启动而自启动,有时出于维护目的需要关闭这个特性,可以用root 用户执行下面命令。 

[root@raw1 bin]# ./crsctl disable crs               d没有

[root@raw1 bin]# ./crsctl enable crs

这个命令实际是修改了/etc/oracle/scls_scr/raw/root/crsstart 这个文件里的内容。


3.1.3 启动,停止CRS 栈。


Oracle 在10.1时,必须通过重新启动系统重启Clusterware,但是从Oracle 10.2 开始,可以通过命令来启动和停止CRS.

-- 启动CRS:

[root@raw1 bin]# ./crsctl start crs

Attempting to start CRS stack

The CRS stack will be started shortly

-- 关闭CRS:

[root@raw1 bin]# ./crsctl stop crs

Stopping resources.

Successfully stopped CRS resources

Stopping CSSD.

Shutting down CSS daemon.

Shutdown request successfully issued.


3.1.4 查看Votedisk 磁盘位置

[root@raw1 bin]# ./crsctl query css votedisk

 0.     0    /dev/raw/raw2

located 1 votedisk(s).


3.1.5 查看和修改CRS 参数

-- 查看参数:用get

[root@raw1 bin]# ./crsctl get css misscount  网络延时

60

-- 修改参数: 用set, 但是这个功能要慎用

[root@raw1 bin]# ./crsctl set css miscount 60


3.1.6 跟踪CRS 模块,提供辅助功能

CRS  堆栈 由CRS,CSS,EVM 三个服务组成,每个服务又是由一系列module组成,crsctl 允许对每个module进行跟踪,并把跟踪内容记录到日志中。

[root@raw1 bin]# ./crsctl lsmodules css

The following are the CSS modules ::

    CSSD

    COMMCRS

COMMNS

[root@raw1 bin]# ./crsctl lsmodules crs

The following are the CRS modules ::

    CRSUI

    CRSCOMM

    CRSRTI

    CRSMAIN

    CRSPLACE

    CRSAPP

    CRSRES

    CRSCOMM

    CRSOCR

    CRSTIMER

    CRSEVT

    CRSD

    CLUCLS

    CSSCLNT

    COMMCRS

    COMMNS

[root@raw1 bin]# ./crsctl lsmodules evm

The following are the EVM modules ::

   EVMD

   EVMDMAIN

   EVMCOMM

   EVMEVT

   EVMAPP

   EVMAGENT

   CRSOCR

   CLUCLS

   CSSCLNT

   COMMCRS

   COMMNS


--跟踪CSSD模块,需要root 用户执行:

[root@raw1 bin]# ./crsctl debug log css "CSSD:1"

Configuration parameter trace is now set to 1.

Set CRSD Debug Module: CSSD  Level: 1


-- 查看跟踪日志

[root@raw1 cssd]# pwd

/u01/app/oracle/product/crs/log/raw1/cssd

[root@raw1 cssd]# more ocssd.log

...

[    CSSD]2010-03-08 00:19:27.160 [36244384] >TRACE:   clssscSetDebugLevel: The logging level is set to 1 ,the cache level is set to 2

[    CSSD]2010-03-08 00:19:52.139 [119085984] >TRACE:   clssgmClientConnectMsg: Connect from con(0x834fd18) proc(0x8354c70) pid() proto(10:2:1:1)

...


3.1.7 维护Votedisk

以图新方式安装Clusterware的过程中,在配置Votedisk时,如果选择External Redundancy策略。则只能填写一个Votedisk。但是即使使用External Redundancy作为冗余策略,也可以添加多个Vodedisk,只是必须通过crsctl 命令来添加,添加多个Votedisk后,这些Votedisk 互为镜像,可以防止Votedisk的单点故障。

需要注意的是,Votedisk使用的是一种“多数可用算法”,如果有多个Votedisk,,则必须一半以上的Votedisk同时使用,Clusterware才能正常使用。 比如配置了4个Votedisk,坏一个Votedisk,集群可以正常工作,如果坏了2个,则不能满足半数以上,集群会立即宕掉,所有节点立即重启,所以如果添加Votedisk,尽量不要只添加一个,而应该添加2个。这点和OCR 不一样。OCR 只需配置一个。 13 5 7 阿那样

添加和删除Votedisk的操作比较危险,必须停止数据库,停止ASM,停止CRS Stack后操作,并且操作时必须使用-force参数。

1) 查看当前配置

[root@raw1 bin]# ./crsctl query css votedisk

2)  停止所有节点的CRS:

[root@raw1 bin]# ./crsctl stop crs

3) 添加Votedisk

     [root@raw1 bin]# ./crsctl add css votedisk /dev/raw/raw1 -force

注意:即使在CRS 关闭后,也必须通过-force 参数来添加和删除Votedisk,并且-force 参数只有在CRS关闭的场合下使用才安全。 否则会报:Cluter is not a ready state for online disk addition.

4)  确认添加后的情况:

[root@raw1 bin]# ./crsctl query css votedisk

5) 启动CRS

[root@raw1 bin]# ./crsctl start crs


3.2  OCR命令系列

Oracle Clusterware把整个集群的配置信息放在共享存储上,这个存储就是OCR Disk. 在整个集群中,只有一个节点能对OCR Disk 进行读写操作,这个节点叫作Master Node,所有节点都会在内存中保留一份OCR的拷贝,同时哟一个OCR Process 从这个内存中读取内容。 OCR 内容发生改变时,由Master Node的OCR Process负责同步到其他节点的OCR Process。 

因为OCR的内容如此重要,Oracle 每4个小时对其做一次备份,并且保留最后的3个备份,以及前一天,前一周的最后一个备份。 这个备份由Master Node CRSD进程完成,备份的默认位置是$CRS_HOME/crs/cdata/<cluster_name>目录下。 每次备份后,备份文件名自动更改,以反应备份时间顺序,最近一次的备份叫作backup00.ocr。这些备份文件除了保存在本地,DBA还应该在其他存储设备上保留一份,以防止意外的存储故障。


3.2.1 ocrdump

该命令能以ASCII的方式打印出OCR的内容,但是这个命令不能用作OCR的备份恢复,也就是说产生的文件只能用作阅读,而不能用于恢复。 

命令格式: ocrdump [-stdout] [filename] [-keyname name] [-xml]

参数说明:

        -stdout: 把内容打印输出到屏幕上

Filename:内容输出到文件中

-keyname:只打印某个键及其子健内容

-xml:以xml格式打印输出

   示例:把system.css键的内容以.xml格式打印输出到屏幕

[root@raw1 bin]# ./ocrdump -stdout -keyname system.css -xml|more

<OCRDUMP>


<TIMESTAMP>03/08/2010 04:28:41</TIMESTAMP>

<DEVICE>/dev/raw/raw1</DEVICE>

<COMMAND>./ocrdump.bin -stdout -keyname system.css -xml </COMMAND>

......


这个命令在执行过程中,会在$CRS_HOME/log/<node_name>/client 目录下产生日志文件,文件名ocrdump_<pid>.log,如果命令执行出现问题,可以从这个日志查看问题原因。


3.2.2 ocrcheck

Ocrcheck 命令用于检查OCR内容的一致性,命令执行过程会在$CRS_HOME/log/nodename/client 目录下产生ocrcheck_pid.log 日志文件。 这个命令不需要参数。

[root@raw1 bin]# ./ocrcheck

Status of Oracle Cluster Registry is as follows :

         Version                  :          2

         Total space (kbytes)     :     147352

         Used space (kbytes)      :       4360

         Available space (kbytes) :     142992

         ID                       : 1599790592

         Device/File Name         : /dev/raw/raw1

                                    Device/File integrity check succeeded

                                    Device/File not configured

         Cluster registry integrity check succeeded


3.2.3 ocrconfig

该命令用于维护OCR 磁盘,安装clusterware过程中,如果选择External Redundancy冗余方式,则只能输入一个OCR磁盘位置。 但是Oracle允许配置两个OCR 磁盘互为镜像,以防止OCR 磁盘的单点故障。 OCR 磁盘和Votedisk磁盘不一样,OCR磁盘最多只能有两个,一个Primary OCR 和一个Mirror OCR。

[root@raw1 bin]# ./ocrconfig --help

Name:

        ocrconfig - Configuration tool for Oracle Cluster Registry.

Synopsis:

        ocrconfig [option]

        option:

                -export <filename> [-s online]

                                                    - Export cluster register contents to a file

                -import <filename>                  - Import cluster registry contents from a file

                -upgrade [<user> [<group>]]

                                                    - Upgrade cluster registry from previous version

                -downgrade [-version <version string>]

                                                    - Downgrade cluster registry to the specified version

                -backuploc <dirname>                - Configure periodic backup location

                -showbackup                         - Show backup information

                -restore <filename>                 - Restore from physical backup

                -replace ocr|ocrmirror [<filename>] - Add/replace/remove a OCR device/file

                -overwrite                          - Overwrite OCR configuration on disk

                -repair ocr|ocrmirror <filename>    - Repair local OCR configuration

                -help                               - Print out this help information

Note:

        A log file will be created in

        $ORACLE_HOME/log/<hostname>/client/ocrconfig_<pid>.log. Please ensure

        you have file creation privileges in the above directory before

        running this tool.


-- 查看自助备份

[root@raw1 bin]# ./ocrconfig -showbackup


在缺省情况下,OCR自动备份在$CRS_HOME/CRS/CDATA/cluster_name 目录下,可以通过ocrconfig -backuploc <directory_name> 命令修改到新的目录


3.2.4 使用导出,导入进行备份和恢复

Oracle 推荐在对集群做调整时,比如增加,删除节点之前,应该对OCR做一个备份,可以使用export 备份到指定文件,如果做了replace或者restore 等操作,Oracle 建议使用 cluvfy comp ocr -n all 命令来做一次全面的检查。该命令在clusterware 的安装软件里。

1) 首先关闭所有节点的CRS

[root@raw1 bin]# ./crsctl stop crs

Stopping resources.

Successfully stopped CRS resources

Stopping CSSD.

Shutting down CSS daemon.

Shutdown request successfully issued.

     2) 用root 用户导出OCR内容

[root@raw1 bin]# ./ocrconfig -export /u01/ocr.exp

     3) 重启CRS

[root@raw1 bin]# ./crsctl start crs

Attempting to start CRS stack

The CRS stack will be started shortly

     4) 检查CRS 状态

[root@raw1 bin]# ./crsctl check crs

CSS appears healthy

CRS appears healthy

EVM appears healthy

    5)破坏OCR内容

[root@raw1 bin]# dd if=/dev/zero of=/dev/raw/raw1 bs=1024 count=102400

102400+0 records in

102400+0 records out

6) 检查OCR一致性

[root@raw1 bin]# ./ocrcheck

PROT-601: Failed to initialize ocrcheck

    7)使用cluvfy 工具检查一致性

[root@raw1 cluvfy]# ./runcluvfy.sh comp ocr -n all

Verifying OCR integrity

Unable to retrieve nodelist from Oracle clusterware.

Verification cannot proceed.

8) 使用Import 恢复OCR 内容

[root@raw1 bin]# ./ocrconfig -import /u01/ocr.exp

9)再次检查OCR

[root@raw1 bin]# ./ocrcheck

Status of Oracle Cluster Registry is as follows :

         Version                  :          2

         Total space (kbytes)     :     147352

         Used space (kbytes)      :       4364

         Available space (kbytes) :     142988

         ID                       :  610419116

         Device/File Name         : /dev/raw/raw1

                                    Device/File integrity check succeeded

                                    Device/File not configured

         Cluster registry integrity check succeeded

10) 使用cluvfy工具检查

[root@raw1 cluvfy]# ./runcluvfy.sh comp ocr -n all

Verifying OCR integrity

WARNING:

These nodes cannot be reached:

        raw2  

Verification will proceed with nodes:

        raw1


ERROR:

User equivalence unavailable on all the nodes.

Verification cannot proceed.

Verification of OCR integrity was unsuccessful on all the nodes.

注:此处不成功是因为我的机器卡,故raw2节点没有启动


3.2.5 移动OCR 文件位置

实例演示将OCR从/dev/raw/raw1 移动到/dev/raw/raw3上。  都是sam了 哪有raw

1) 查看是否有OCR备份

[root@raw1 bin]# ./ocrconfig -showbackup

如果没有备份,可以立即执行一次导出作为备份:

[root@raw1 bin]# ./ocrconfig -export /u01/ocrbackup -s online

2) 查看当前OCR配置

[root@raw1 bin]# ./ocrcheck

Status of Oracle Cluster Registry is as follows :

         Version                  :          2

         Total space (kbytes)     :     147352

         Used space (kbytes)      :       4364

         Available space (kbytes) :     142988

         ID                       :  610419116

         Device/File Name         : /dev/raw/raw1

                                    Device/File integrity check succeeded

                                    Device/File not configured

         Cluster registry integrity check succeeded

输出显示当前只有一个Primary OCR,在/dev/raw/raw1。 没有Mirror OCR。 因为现在只有一个OCR文件,所以不能直接改变这个OCR的位置,必须先添加镜像后在修改,否则会报:Failed to initialize ocrconfig.

3) 添加一个Mirror OCR

[root@raw1 bin]# ./ocrconfig -replace ocrmirror /dev/raw/raw4

4) 确认添加成功

[root@raw1 bin]# ./ocrcheck

5)改变primary OCR 位置

[root@raw1 bin]# ./ocrconfig -replace ocr /dev/raw/raw3

确认修改成功:

[root@raw1 bin]# ./ocrcheck

    6)使用ocrconfig命令修改后,所有RAC节点上的/etc/oracle/ocr.loc 文件内容也会自动同步了,如果没有自动同步,可以手工的改成以下内容。

[root@raw1 bin]# more /etc/oracle/ocr.loc

ocrconfig_loc=/dev/raw/raw1

Ocrmirrorconfig_loc=/dev/raw/raw3

local_only=FALSE

四. 应用层

应用层就是指RAC数据库了,这一层有若干资源组成,每个资源都是一个进程或者一组进程组成的完整服务,这一层的管理和维护都是围绕这些资源进行的。 有如下命令: srvctl, onsctl, crs_stat 三个命令。

4.1 crs_stat 


Crs_stat 这个命令用于查看CRS维护的所有资源的运行状态,如果不带任何参数时,显示所有资源的概要信息。每个资源显示是各个属性:资源名称,类型,目录,资源运行状态等。 

[root@raw1 bin]# ./crs_stat

NAME=ora.raw.db

TYPE=application

TARGET=ONLINE

STATE=OFFLINE

......


也可以指定资源名,查看指定资源的状态,并可以使用-V 和-P 选项,以查看详细信息,其中-p 参数显示的内容比-V 更详细。

1) 查看制定资源状态

[root@raw1 bin]# ./crs_stat ora.raw2.vip

NAME=ora.raw2.vip

TYPE=application

TARGET=ONLINE

STATE=OFFLINE

2) 使用-v 选项,查看详细内容,这时输出多出4项内容,分别是允许重启次数,已执行重启次数,失败阀值,失败次数。

[root@raw1 bin]# ./crs_stat -v ora.raw2.vip

NAME=ora.raw2.vip

TYPE=application

RESTART_ATTEMPTS=0

RESTART_COUNT=0

FAILURE_THRESHOLD=0

FAILURE_COUNT=0

TARGET=ONLINE

STATE=OFFLINE

3) 使用-p 选项查看更详细内容

[root@raw1 bin]# ./crs_stat -p ora.raw2.vip

NAME=ora.raw2.vip

TYPE=application

ACTION_SCRIPT=/u01/app/oracle/product/crs/bin/racgwrap

ACTIVE_PLACEMENT=1

AUTO_START=1

CHECK_INTERVAL=60

DESCRIPTION=CRS application for VIP on a node

FAILOVER_DELAY=0

FAILURE_INTERVAL=0

FAILURE_THRESHOLD=0

HOSTING_MEMBERS=raw2

OPTIONAL_RESOURCES=

PLACEMENT=favored

REQUIRED_RESOURCES=

RESTART_ATTEMPTS=0

SCRIPT_TIMEOUT=60

START_TIMEOUT=0

STOP_TIMEOUT=0

UPTIME_THRESHOLD=7d

USR_ORA_ALERT_NAME=

USR_ORA_CHECK_TIMEOUT=0

USR_ORA_CONNECT_STR=/ as sysdba

USR_ORA_DEBUG=0

USR_ORA_DISCONNECT=false

USR_ORA_FLAGS=

USR_ORA_IF=eth0

USR_ORA_INST_NOT_SHUTDOWN=

USR_ORA_LANG=

USR_ORA_NETMASK=255.255.255.0

USR_ORA_OPEN_MODE=

USR_ORA_OPI=false

USR_ORA_PFILE=

USR_ORA_PRECONNECT=none

USR_ORA_SRV=

USR_ORA_START_TIMEOUT=0

USR_ORA_STOP_MODE=immediate

USR_ORA_STOP_TIMEOUT=0

USR_ORA_VIP=10.85.10.123


这些字段是所有资源共有的,但是根据资源类型不同,某些字段可以空值。 

4) 使用-ls 选项,可以查看每个资源的权限定义,权限定义格式和Linux 一样。

[root@raw1 bin]# ./crs_stat -ls

Name           Owner          Primary PrivGrp          Permission

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

ora.raw.db     oracle         oinstall                 rwxrwxr--

ora.raw.dmm.cs oracle         oinstall                 rwxrwxr--

ora....aw2.srv   oracle         oinstall                 rwxrwxr--

ora....w1.inst   oracle         oinstall                 rwxrwxr--

ora....w2.inst    oracle         oinstall                 rwxrwxr--

ora....SM1.asm  oracle         oinstall                 rwxrwxr--

ora....W1.lsnr   oracle         oinstall                 rwxrwxr--

ora.raw1.gsd   oracle         oinstall                 rwxr-xr--

ora.raw1.ons   oracle         oinstall                 rwxr-xr--

ora.raw1.vip   root           oinstall                 rwxr-xr--

ora....SM2.asm  oracle         oinstall                 rwxrwxr--

ora....W2.lsnr   oracle         oinstall                 rwxrwxr--

ora.raw2.gsd   oracle         oinstall                 rwxr-xr--

ora.raw2.ons   oracle         oinstall                 rwxr-xr--

ora.raw2.vip   root           oinstall                 rwxr-xr--


4.2 onsctl 

这个命令用于管理配置ONS(Oracle Notification Service). ONS 是Oracle Clusterware 实现FAN Event Push模型的基础。

在传统模型中,客户端需要定期检查服务器来判断服务端状态,本质上是一个pull模型,Oracle 10g 引入了一个全新的PUSH 机制--FAN(Fast Application Notification),当服务端发生某些事件时,服务器会主动的通知客户端这种变化,这样客户端就能尽早得知服务端的变化。 而引入这种机制就是依赖ONS实现, 在使用onsctl命令之前,需要先配置ONS服务。

4.2.1 ONS 配置内容

在RAC 环境中,需要使用$CRS_HOME下的ONS,而不是$ORACLE_HOME下面的ONS, 这点需要注意。 配置文件在$CRS_HOME/opmn/conf/ons.config. 

[root@raw1 conf]# pwd

/u01/app/oracle/product/crs/opmn/conf

[root@raw1 conf]# more ons.config

localport=6100

remoteport=6200

loglevel=3

useocr=on


参数说明:

Localport: 这个参数代表本地监听端口,这里本地特指:127.0.0.1 这个回环地址,用来和运行在本地的客户端进行通信

Remoteport:这个参数代表的是远程监听端口,也就是除了127.0.0.1 以外的所有本地IP地址,用来和远程的客户端进行通信。

Loglevel: Oracle 允许跟踪ONS进程的运行,并把日志记录到本地文件中,这个参数用来定义ONS进程要记录的日志级别,从1-9,缺省值是3. 

Logfile: 这个参数和loglevel参数一起使用,用于定义ONS进程日志文件的位置,缺省值是$CRS_HOME/opmn/logs/opmn.log

nodes和useocr: 这两个参数共同决定饿了本地的ONS daemon要和哪些远程节点上的ONS daemon进行通信。

Nodes 参数值格式如下:Hostname/IP:port[hostname/ip:port]

如:useoce=off

Nodes=rac1:6200,rac2:6200

而useocr 参数值为on/off, 如果useocr 是ON, 说明信息保存在OCR中,如果是OFF,说明信息取nodes中的配置。对于单实例而言,要把useocr设置为off。


4.2.2 配置ONS

可以直接编译ONS的配置文件来修改配置,如果使用了OCR,则可以通过racgons命令进行配置,但必须以root用户来执行,如果用oracle 用户来执行,不会提示任何错误,但也不会更改任何配置。

若要添加配置,可以使用下面命令:

Racgons add_config rac1:6200 rac2:6200

若要删除配置,可以用下面命令:

Racgons remove_config rac1:6200 rac2:6200


4.2.3 onsctl 命令

使用onsctl命令可以启动,停止,调试ONS,并重新载入配置文件,其命令格式如下:

[root@raw1 bin]# ./onsctl

usage: ./onsctl start|stop|ping|reconfig|debug

start                            - Start opmn only.

stop                             - Stop ons daemon

ping                             - Test to see if ons daemon is running

debug                            - Display debug information for the ons daemon

reconfig                         - Reload the ons configuration

help                             - Print a short syntax description (this).

detailed                         - Print a verbose syntax description.


  ONS 进程运行,并不一定代表ONS 正常工作,需要使用ping命令来确认。 


1) 在OS级别查看进程状态。 

[root@raw1 bin]# ps -aef|grep ons

root      1924  6953  0 03:17 pts/1    00:00:00 grep ons

oracle   30723     1  0 Mar08 ?        00:00:00 /u01/app/oracle/product/crs/opmn/bin/ons -d

oracle   30724 30723  0 Mar08 ?        00:00:04 /u01/app/oracle/product/crs/opmn/bin/ons -d

2) 确认ONS服务的状态

[root@raw1 bin]# ./onsctl ping

Number of onsconfiguration retrieved, numcfg = 2

onscfg[0]

   {node = raw1, port = 6200}

Adding remote host raw1:6200

onscfg[1]

   {node = raw2, port = 6200}

Adding remote host raw2:6200

ons is running ...

3) 启动ONS服务

[root@raw1 bin]# ./onsctl start

4) 使用debug 选项,可以查看详细信息,其中最有意义的就是能显示所有连接。

[root@raw1 bin]# ./onsctl debug

Number of onsconfiguration retrieved, numcfg = 2

onscfg[0]

   {node = raw1, port = 6200}

Adding remote host raw1:6200

onscfg[1]

   {node = raw2, port = 6200}

Adding remote host raw2:6200

HTTP/1.1 200 OK

Content-Length: 1357

Content-Type: text/html

Response:

======== ONS ========

Listeners:

 NAME    BIND ADDRESS   PORT   FLAGS   SOCKET

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

Local   127.000.000.001  6100 00000142      7

Remote  010.085.010.119  6200 00000101      8

Request     No listener

Server connections:

    ID           IP        PORT    FLAGS    SENDQ     WORKER   BUSY  SUBS

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

         1 010.085.010.121  6200 00104205          0               1     0

Client connections:


    ID           IP        PORT    FLAGS    SENDQ     WORKER   BUSY  SUBS

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

         3 127.000.000.001  6100 0001001a          0               1     0

         4 127.000.000.001  6100 0001001a          0               1     1

Pending connections:

    ID           IP        PORT    FLAGS    SENDQ     WORKER   BUSY  SUBS

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

         0 127.000.000.001  6100 00020812          0               1     0

Worker Ticket: 3/3, Idle: 180

   THREAD   FLAGS

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

   17faba0 00000012

   67f6ba0 00000012

   32d6ba0 00000012

Resources:

  Notifications:

    Received: 1, in Receive Q: 0, Processed: 1, in Process Q: 0

  Pools:

    Message: 24/25 (1), Link: 25/25 (1), Subscription: 24/25 (1)

[root@raw1 bin]#


4.3 srvctl 

           该命令是RAC维护中最常用的命令,也是最复杂的命令。 这个工具可以操作下面的几种资源:Database,Instance,ASM,Service,Listener 和 Node Application,其中Node application(本地资源)又包括GSD,ONS,VIP。 这些资源除了使用srvctl工具统一管理外,某些资源还有自己独立的管理工具,比如ONS可以使用onsctl命令进行管理;Listener 可以通过lsnrctl 管理。

[root@raw1 bin]# ./srvctl --help

Usage: srvctl <command> <object> [<options>]

    command: enable|disable|start|stop|relocate|status|add|remove|modify|getenv|setenv|unsetenv|config

    objects: database|instance|service|nodeapps|asm|listener

For detailed help on each command and object and its options use:

    srvctl <command> <object> -h

4.3.1 使用config查看配置

1)查看数据库配置

-- 不带任何参数时,显示OCR中注册的所有数据库

[root@raw1 bin]# ./srvctl config database

raw

-- 使用-d 选项,查看某个数据库配置

[root@raw1 bin]# ./srvctl config database -d raw

raw1 raw1 /u01/app/oracle/product/10.2.0/db_1

raw2 raw2 /u01/app/oracle/product/10.2.0/db_1

注: 该输出结果显示数据库raw由2个节点组成,各自实例名交raw1和raw2. 两个实例的$ORACLE_HOME是/u01/app/oracle/product/10.2.0/db_1

-- 使用-a 选项查看配置的详细信息

[root@raw1 bin]# ./srvctl config database -d raw

raw1 raw1 /u01/app/oracle/product/10.2.0/db_1

raw2 raw2 /u01/app/oracle/product/10.2.0/db_1

[root@raw1 bin]# ./srvctl config database -d raw -a

raw1 raw1 /u01/app/oracle/product/10.2.0/db_1

raw2 raw2 /u01/app/oracle/product/10.2.0/db_1

DB_NAME: raw

ORACLE_HOME: /u01/app/oracle/product/10.2.0/db_1

SPFILE: +DATA/raw/spfileraw.ora

DOMAIN: null

DB_ROLE: null

START_OPTIONS: null

POLICY:  AUTOMATIC

ENABLE FLAG: DB ENABLED


2)查看Node Application的配置

-- 不带任何参数,返回节点名,实例名和$ORACLE_HOME

[root@raw1 bin]# ./srvctl config nodeapps -n raw1

raw1 raw1 /u01/app/oracle/product/10.2.0/db_1

               -- 使用-a 选项,查看VIP 配置

[root@raw1 bin]# ./srvctl config nodeapps -n raw1 -a

VIP exists.: /raw1-vip/10.85.10.122/255.255.255.0/eth0

               -- 使用-g 选项, 查看GSD:

[root@raw1 bin]# ./srvctl config nodeapps -n raw1 -g

GSD exists.

-- 使用-s 选项,查看ONS:

[root@raw1 bin]# ./srvctl config nodeapps -n raw1 -s

ONS daemon exists.

-- 使用-l 选项,查看Listener:

[root@raw1 bin]# ./srvctl config nodeapps -n raw1 -l

Listener exists.


3) 查看 Listener.

[root@raw1 bin]# ./srvctl config listener -n raw1

raw1 LISTENER_RAW1

[root@raw1 bin]# ./srvctl config listener -n raw2

raw2 LISTENER_RAW2


4) 查看ASM

[root@raw1 bin]# ./srvctl config asm -n raw1

+ASM1 /u01/app/oracle/product/10.2.0/db_1

[root@raw1 bin]# ./srvctl config asm -n raw2

+ASM2 /u01/app/oracle/product/10.2.0/db_1


5) 查看Service

-- 查看数据库所有service配置

[root@raw1 bin]# ./srvctl config service -d raw -a

dmm PREF: raw2 AVAIL: raw1 TAF: basic

-- 查看某个Service 配置

[root@raw1 bin]# ./srvctl config service -d raw -s dmm

dmm PREF: raw2 AVAIL: raw1

-- 使用-a 选项,查看TAF 策略

[root@raw1 bin]# ./srvctl config service -d raw -s dmm -a

dmm PREF: raw2 AVAIL: raw1 TAF: basic


4.3.2 使用add 添加对象

一般情况下,应用层资源都是在图形界面的帮助下注册到OCR中的,比如VIP,ONS实在安装最后阶段创建的,而数据库,ASM是执行DBCA的过程中自动注册到OCR中的,Listener是通过netca工具。 但是有些时候需要手工把资源注册到OCR中。 这时候就需要add 命令了。

1) 添加数据库

[root@raw1 bin]# ./srvctl add database -d dmm -o $ORACLE_HOME

2)  添加实例

[root@raw1 bin]# ./srvctl add instance -d dmm -n rac1 -i dmm1

[root@raw1 bin]# ./srvctl add instance -d dmm -n rac2 -i dmm2

3) 添加服务,需要使用4个参数

-s : 服务名

-r:首选实例名

-a:备选实例名

-P:TAF策略,可选值为None(缺省值),Basic,preconnect。

[root@raw1 bin]# ./srvctl add service -d dmm -s dmmservice -r rac1 -a rac2 -P BASIC

4) 确认添加成功

[root@raw1 bin]# ./srvctl config service -d dmm -s dmmservice -a


4.3.3 使用enable/disable 启动,禁用对象

缺省情况下数据库,实例,服务,ASM都是随着CRS的启动而自启动的,有时候由于维护的需要,可以先关闭这个特性。

1) 配置数据库随CRS的启动而自动启动

-- 启用数据库的自启动:

[root@raw1 bin]# ./srvctl enable database -d raw

--查看配置

[root@raw1 bin]# ./srvctl config database -d raw -a

raw1 raw1 /u01/app/oracle/product/10.2.0/db_1

raw2 raw2 /u01/app/oracle/product/10.2.0/db_1

DB_NAME: raw

ORACLE_HOME: /u01/app/oracle/product/10.2.0/db_1

SPFILE: +DATA/raw/spfileraw.ora

DOMAIN: null

DB_ROLE: null

START_OPTIONS: null

POLICY:  AUTOMATIC

ENABLE FLAG: DB ENABLED

-- 禁止数据库在CRS启动后自启动,这时需要手动启动

[root@raw1 bin]# ./srvctl disable database -d raw


2) 关闭某个实例的自动启动

[root@raw1 bin]# ./srvctl disable instance -d raw -i raw1

[root@raw1 bin]# ./srvctl enable instance -d raw -i raw1

-- 查看信息

[root@raw1 bin]# ./srvctl config database -d raw -a

raw1 raw1 /u01/app/oracle/product/10.2.0/db_1

raw2 raw2 /u01/app/oracle/product/10.2.0/db_1

DB_NAME: raw

ORACLE_HOME: /u01/app/oracle/product/10.2.0/db_1

SPFILE: +DATA/raw/spfileraw.ora

DOMAIN: null

DB_ROLE: null

START_OPTIONS: null

POLICY:  AUTOMATIC

ENABLE FLAG: DB ENABLED

3) 禁止某个服务在实例上运行

[root@raw1 bin]# ./srvctl enable service -d raw -s rawservice -i raw1

[root@raw1 bin]# ./srvctl disable service -d raw -s rawservice -i raw1

-- 查看

[root@raw1 bin]# ./srvctl config service -d raw -a

dmm PREF: raw2 AVAIL: raw1 TAF: basic


4.3.4 使用remove 删除对象

使用remove命令删除的是对象在OCR中的定义信息,对象本省比如数据库的数据文件等不会被删除,以后随时可以使用add命令重新添加到OCR中。

1) 删除Service,在删除之前,命令会给出确定提示

[root@raw1 bin]# ./srvctl remove service -d raw -s rawservice

2)删除实例,删除之前同样会给出提示

[root@raw1 bin]# ./srvctl remove instance -d raw -i raw1

3)删除数据库

[root@raw1 bin]# ./srvctl remove database -d raw


4.3.5 启动,停止对象与查看对象

在RAC 环境下启动,关闭数据库虽然仍然可以使用SQL/PLUS方法,但是更推荐使用srvctl命令来做这些工作,这可以保证即使更新CRS中运行信息,可以使用start/stop 命令启动,停止对象,然后使用status 命令查看对象状态。

1) 启动数据库,默认启动到open状态

[root@raw1 bin]# ./srvctl start database -d raw

2) 指定启动状态

[root@raw1 bin]# ./srvctl start database -d raw -i raw1 -o mount

[root@raw1 bin]# ./srvctl start database -d raw -i raw1 -o nomount

3) 关闭对象,并指定关闭方式

[root@raw1 bin]# ./srvctl stop instance -d raw -i raw1 -o immediate

[root@raw1 bin]# ./srvctl stop instance -d raw -i raw1 -o abort

4)  在指定实例上启动服务:

[root@raw1 bin]# ./srvctl start service -d raw -s rawservice -i raw1

-- 查看服务状态

[root@raw1 bin]# ./srvctl status service -d raw -v

5) 关闭指定实例上的服务

[root@raw1 bin]# ./srvctl stop service -d raw -s rawservice -i raw1

-- 查看服务状态

[root@raw1 bin]# ./srvctl status service -d raw -v


4.3.6 跟踪srvctl

在Oracle 10g中要跟踪srvctl 非常简单,只要设置srvm_trace=true 这个OS环境变量即可,这个命令的所有函数调用都会输出到屏幕上,可以帮助用户进行诊断。

[root@raw1 bin]# export SRVM_TRACE=TRUE

[root@raw1 bin]# ./srvctl config database -d raw

/u01/app/oracle/product/crs/jdk/jre/bin/java -classpath /u01/app/oracle/product/crs/jlib/netcfg.jar:/u01/app/oracle/product/crs/jdk/jre/lib/rt.jar:/u01/app/oracle/product/crs/jdk/jre/lib/i18n.jar:/u01/app/oracle/product/crs/jlib/srvm.jar:/u01/app/oracle/product/crs/jlib/srvmhas.jar:/u01/app/oracle/product/crs/jlib/srvmasm.jar:/u01/app/oracle/product/crs/srvm/jlib/srvctl.jar -DTRACING.ENABLED=true -DTRACING.LEVEL=2 oracle.ops.opsctl.OPSCTLDriver config database -d raw

[main] [6:58:44:858] [OPSCTLDriver.setInternalDebugLevel:165]  tracing is true at level 2 to file null

[main] [6:58:44:911] [OPSCTLDriver.<init>:95]  Security manager is set

[main] [6:58:44:955] [CommandLineParser.parse:173]  parsing cmdline args

[main] [6:58:44:959] [CommandLineParser.parse2WordCommandOptions:940]  parsing 2-word cmdline

[main] [6:58:44:961] [OPSCTLDriver.execute:174]  executing srvctl command

[main] [6:58:44:963] [OPSCTLDriver.execute:199]  executing 2-word command verb=10 noun=101

[main] [6:58:44:995] [Action.getOPSConfig:162]  get db config for: raw

[main] [6:58:45:2] [CommandLineParser.obtainOPSConfig:1410]  srvctl: get db config for: raw

[main] [6:58:45:47] [GetActiveNodes.create:213]  Going into GetActiveNodes constructor...

... ...


4.4 恢复

假设OCR磁盘和Votedisk磁盘全部破坏,并且都没有备份,该如何恢复, 这时最简单的方法就是重新初始话OCR和Votedisk, 具体操作如下:

4.4.1 停止所有节点的Clusterware Stack

Crsctl stop crs;


4.4.2 分别在每个节点用root用户执行$CRS_HOME/install/rootdelete.sh脚本


4.4.3 在任意一个节点上用root用户执行$CRS_HOME/install/rootinstall.sh 脚本


4.4.4 在和上一步同一个节点上用root执行$CRS_HOME/root.sh脚本


4.4.5 在其他节点用root执行行$CRS_HOME/root.sh脚本


4.4.6 用netca 命令重新配置监听,确认注册到Clusterware中

#crs_stat -t -v


到目前为止,只有Listener,ONS,GSD,VIP 注册到OCR中,还需要把ASM, 数据库都注册到OCR中。   root.sh 干的活 都是nodeapps 资源或者说本地资源

4.4.7  向OCR中添加ASM

 #srvctl add asm -n rac1 -i +ASM1 -o /u01/app/product/database

 #srvctl add asm -n rac2 -i +ASM2 -o /u01/app/product/database


4.4.8 启动ASM

#srvctl start asm -n rac1

#srvctl start asm -n rac2


若在启动时报ORA-27550错误。是因为RAC无法确定使用哪个网卡作为Private Interconnect,解决方法:在两个ASM的pfile文件里添加如下参数:

+ASM1.cluster_interconnects='10.85.10.119'

+ASM2.cluster_interconnects='10.85.10.121'


4.4.9 手工向OCR中添加Database对象。

#srvctl add database -d raw -o /u01/app/product/database


4.4.10 添加2个实例对象

#srvctl add instance -d raw -i raw1 -n raw1

#srvctl add instance -d raw -i raw2 -n raw2


4.4.11 修改实例和ASM实例的依赖关系

#srvctl modify instance -d raw -i raw1 -s +ASM1

#srvctl modify instance -d raw -i raw2 -s +ASM2


4.4.12 启动数据库

#srvctl start database-d raw

若也出现ORA-27550错误。也是因为RAC无法确定使用哪个网卡作为Private Interconnect,修改pfile参数在重启动即可解决。

SQL>alter system set cluster_interconnects='10.85.10.119' scope=spfile sid='raw1';

SQL>alter system set cluster_interconnects='10.85.10.121' scope=spfile sid='raw2';


Srvctl 命令的用法还有很多,下面是在线文档的一个目录,感兴趣的可以自己研究下。
————————————————
 

注: 本片文章整理子张晓明的《大话 Oracle RAC》
————————————————
版权声明:本文为CSDN博主「Dave」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tianlesoftware/article/details/5331067

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值