【oracle 11G Grid 】Crsctl start cluster 和 crsctl start crs 有差别么?

q:Crsctl start cluster 是
11.2新特性和 crsctl start crs
有啥差别呢?

Crsctl start/stop crs管理本地节点的clusterware
stack的启停。包括启动ohasd进程。这个命令仅仅能用来管理本地节点

[root@vmrac2 ~]# crsctl start crs -h

Usage:

crsctl start crs[-excl [-nocrs]|-nowait]

Start OHAS onthis server

where

-excl       
Start Oracle Clusterware in exclusivemode

-nocrs      
Start Oracle Clusterware in exclusivemode without starting CRS

-nowait     
Do not wait for OHAS to start

crsctl start/stop cluster - Manage start/stop the Oracle Clusterware stack onlocal node if you do not specify either -all or -n and nodes remote if option-n or -all be specified ,NOT includingthe
OHASD process. You can't start/stop clusterware stack without OHASD processrunning.

crsctl strat/stop cluster既能够管理本地
clusterware stack,也能够管理整个集群

指定–all
启动集群中全部节点的集群件,即启动整个集群。

-n
启动指定节点的集群件

可是不包括OHASD进程。You
can't start/stop clusterware stack without OHASDprocess running.

[root@vmrac2 ~]# crsctl start cluster -h

Usage:

crsctl startcluster [[-all]|[-n <server>[...]]]

Start CRS stack

where

Default        
Start local server

-all           
Start all servers

-n             
Start named servers

server [...]   One or more blank-separated server names

Despite crsctl start/stop crs manage entire Oracle Clusterware stack on localnode crsctl start/stop crs not allow you to manage remote nodes, unlike crsctlstart/stop cluster that allows you to manage all the nodes, but if the processOASH
is runing.

crsctl start/stop crs 仅仅能管理本地节点的clusterware stack。并不同意我们管理远程节点。

可是当远程或者本地节点OHASD process执行时(Oracle
High AvailabilityServices服务必须可用),才干使用crsctl start/stop crs管理全部节点

我们来做一个实验验证下

我们先把节点2的crs停掉,确保本地已经没有OHASD进程。

[root@vmrac2 ~]# crsctl stop crs

CRS-2791: Starting shutdown of Oracle High AvailabilityServices-managed resources on 'vmrac2'

CRS-2673: Attempting to stop 'ora.crsd' on 'vmrac2'

。。。

。。

CRS-2673: Attempting to stop 'ora.DATANEW.dg' on 'vmrac2'

。。。。

CRS-2677: Stop of 'ora.gipcd' on 'vmrac2' succeeded

。。。

。。

CRS-2793: Shutdown of Oracle High AvailabilityServices-managed resources on 'vmrac2' has completed

CRS-4133: Oracle High Availability Services has beenstopped.

这里能够看到使用 crsctl stop crs已经本地的集群件所有停了下来。

可是为了去确保万无一失。建议在os层面查看下
cluster的进程是否存在

[root@vmrac2 ~]# ps -ef|grep ohasd

root     3747    
1  0Jun19 ?       00:00:00 /bin/sh/etc/init.d/init.ohasd run

[root@vmrac2 ~]# ps -ef|grep d.bin

root    3064427369 
0 13:08 pts/2    00:00:00 grep d.bin

------到这里能够确认集群已经全宕下来了

[root@vmrac2 ~]# ps -ef|grep ohasd

root     3747    
1  0Jun19 ?

00:00:00 /bin/sh/etc/init.d/init.ohasd run

------当然这个脚本存在没有什么关系。假设没有这个sh进程,则
ohasd.bin就无法启动,

这时须要去调查下Snncommd –S96ohasd脚本为什么不能运行

这个后台脚本直接用kill去杀是无法杀掉的,会自己主动再生一个进程。

[root@vmrac2 ~]# ps -ef|grep ohasd

root     3747    
1  0Jun19 ?

00:00:00 /bin/sh/etc/init.d/init.ohasd run

root     4888 
4812  013:39 pts/1   00:00:00 grep ohasd

[root@vmrac2 ~]# kill -9 3747

[root@vmrac2 ~]# ps -ef|grep ohasd

root     4895    
1  013:39 ?       00:00:00 /bin/sh/etc/init.d/init.ohasd run

root     4920 
4812  013:39 pts/1   00:00:00 grep ohasd

[root@vmrac2 ~]# kill -9 4895

[root@vmrac2 ~]# ps -ef|grep ohasd

root
     4933     1  013:40 ?       00:00:00 /bin/sh/etc/init.d/init.ohasd run

root     4958 
4812  013:40 pts/1   00:00:00 grep ohasd

详细測试例如以下:

节点二的集群已经关闭,节点一的还在

节点一操作:

使用crsctl start cluster启动节点2的集群

[root@vmrac1 ~]# crsctl start cluster -n vmrac2

CRS-4405: The following nodes are unknown to Oracle HighAvailability Services:vmrac2

------报错非常明显啊,vmrac2节点上ohasd进程不存在。所以节点1无法启动节点2上的集群

[root@vmrac1 ~]# crsctl start cluster -all

CRS-4690: Oracle Clusterware is already running on 'vmrac1'

CRS-4000: Command Start failed, or completed with errors.

--------------还是由于vmrac2节点上ohasd进程不存在,所以节点1无法启动节点2上的集群

[root@vmrac1 ~]#

节点二操作:

[root@vmrac2 ~]# crsctl start cluster

CRS-4639: Could not contact Oracle High AvailabilityServices

CRS-4000: Command Start failed, or completed with errors.

------crsctl start cluster缺省代表启动本地节点。还是由于vmrac2节点上ohasd进程不存在,所以无法启动节点2上的集群

[root@vmrac2 ~]# crsctl start cluster -n vmrac1

CRS-4639: Could not contact Oracle High AvailabilityServices

CRS-4000: Command Start failed, or completed with errors.

------还是由于vmrac2节点上ohasd进程不存在,集群节点间无法通信,所以无法启动节点1上的集群(这里仅仅是測试下,实际节点1集群是已经启动的)

[root@vmrac2 ~]# crsctl start cluster -all

CRS-4639: Could not contact Oracle High AvailabilityServices

CRS-4000: Command Start failed, or completed with errors.

------还是由于vmrac2节点上ohasd进程不存在,集群节点间无法通信。所以无法启动节点1上的集群(这里仅仅是測试下,实际节点1集群是已经启动的)

通过上面的測试能够发现要想通过crsctl start cluster来管理远程集群节点,则ohasd
(Oracle High AvailabilityServices Daemon)必须在全部集群节点上执行。假设没有执行,则会报出:

CRS-4639: Could not contact Oracle High AvailabilityServices

CRS-4000: Command Start failed, or completed with errors.

类似的错误。

这里我们再略微讨论下为什么必需要求ohasd进程,crsctl
start cluster才干管理各个远程节点

int socket(int domain, inttype,int protocol)

domain:说明我们网络程序所在的主机採用的通讯协族(AF_UNIX和AF_INET等).
AF_UNIX仅仅可以用于单一的Unix系统进程间通信,而AF_INET是针对Internet的,因而可以同意在远程主机之间通信

type:我们网络程序所採用的通讯协议(SOCK_STREAM,SOCK_DGRAM等)
SOCK_STREAM表明我们用的是TCP协议,这样会提供按顺序的,可靠,双向,面向连接的比特流.
SOCK_DGRAM 表明我们用的是UDP协议,这样仅仅会提供定长的,不可靠,无连接的通信.

socket()系统调用,带有三个參数:  

    1、參数domain指明通信域,如PF_UNIX(unix域)。PF_INET(IPv4)。  

      PF_INET6(IPv6)等  

    2、type指明通信类型,最经常使用的如SOCK_STREAM(面向连接可靠方式,  

     比方TCP)、SOCK_DGRAM(非面向连接的非可靠方式,比方UDP)等。

    3、參数protocol指定须要使用的协议。尽管能够对同一个协议  

     家族(protocol
family)(或者说通信域(domain))指定不同的协议  

     參数,可是通常仅仅有一个。对于TCP參数可指定为IPPROTO_TCP,对于  

      UDP能够用IPPROTO_UDP。你不必显式制定这个參数,使用0则依据前  

     两个參数使用默认的协议。

这里对 crsctl startcluster启动跟踪下,trace文件例如以下:

。。。。

6009 socket(PF_INET6,SOCK_DGRAM,
IPPROTO_IP) = 3

6009 bind(3, {sa_family=AF_INET6, sin6_port=htons(0), inet_pton(AF_INET6,"::1",
&sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0

6009 getsockname(3, {sa_family=AF_INET6, sin6_port=htons(19527),inet_pton(AF_INET6,
"::1", &sin6_addr), sin6_flowinfo=0,sin6_scope_id=0}, [15812988179826343964]) = 0

6009 getpeername(3, 0x7fff0257b028, [15812988179826343964])
= -1 ENOTCONN(Transport endpoint is not connected)

6009 getsockopt(3, SOL_SOCKET, SO_SNDBUF, [168803484727246848],
[4]) = 0

6009 getsockopt(3, SOL_SOCKET, SO_RCVBUF, [168803484727246848],
[4]) = 0

6009 fcntl(3, F_SETFD, FD_CLOEXEC)    =
0

6009 fcntl(3, F_SETFL, O_RDONLY|O_NONBLOCK) = 0

6009 times({tms_utime=2, tms_stime=2, tms_cutime=0, tms_cstime=0})
=465828655

6009 access("/var/tmp/.oracle", F_OK) =
0

6009 chmod("/var/tmp/.oracle", 01777) =
0

6009 socket(PF_FILE, SOCK_STREAM, 0)  =
4

6009 access("/var/tmp/.oracle/sOHASD_UI_SOCKET", F_OK) = 0

6009 connect(4, {sa_family=AF_FILE, path="/var/tmp/.oracle/sOHASD_UI_SOCKET"...},
110)= -1 ECONNREFUSED (Connection refused)

6009 access("/var/tmp/.oracle/sOHASD_UI_SOCKET", F_OK) = 0

6009 nanosleep({0, 100000000}, {16, 140733232680592}) = 0

6009 close(4)                         =
0

6009 socket(PF_FILE, SOCK_STREAM, 0)  =
4

。。。。。

。。

------这里我们再节点以上观察下是谁会使用这个socket文件

root@vmrac1 ~]# lsof/var/tmp/.oracle/sOHASD_UI_SOCKET

COMMAND    PID USER  FD  TYPE            DEVICE
SIZE   NODE NAME

ohasd.bin    29191 root 634u unix
   0xffff81005b939700     9176933 /var/tmp/.oracle/sOHASD_UI_SOCKET

[root@vmrac1 ~]# ls -l/var/tmp/.oracle/sOHASD_UI_SOCKET

srwxrwxrwx 1 root root 0 Jun 19 13:27/var/tmp/.oracle/sOHASD_UI_SOCKET

那节点二上的状况如呢?

[root@vmrac2 ~]# ls -l/var/tmp/.oracle/sOHASD_UI_SOCKET

srwxrwxrwx 1 root root 0 Jun 19 13:27/var/tmp/.oracle/sOHASD_UI_SOCKET

[root@vmrac2 ~]# lsof/var/tmp/.oracle/sOHASD_UI_SOCKET

这时我使用crsctl start crs继续观察:

[root@vmrac2 ~]# crsctl start crs

lsof/var/tmp/.oracle/sOHASD_UI_SOCKETCRS-4123: Oracle High Availability Serviceshas been started.

[root@vmrac2 ~]# ps -ef|grep 6560

root     6560    1 214:53
?

00:00:01/u02/app/11.2.0.3/grid/bin/ohasd.bin reboot

root     6877 4812 0
14:54 pts/1   00:00:00 grep 6560

此时迅速在节点2的还有一个窗体观察/var/tmp/.oracle/sOHASD_UI_SOCKET这个socket

[root@vmrac2 ~]# lsof/var/tmp/.oracle/sOHASD_UI_SOCKET

[root@vmrac2 ~]# lsof/var/tmp/.oracle/sOHASD_UI_SOCKET

[root@vmrac2 ~]# lsof/var/tmp/.oracle/sOHASD_UI_SOCKET

COMMAND   PID USER  FD  TYPE            DEVICE
SIZE     NODE NAME

ohasd.bin
6560 root 631u unix 0xffff8100792f71c0     151906805
/var/tmp/.oracle/sOHASD_UI_SOCKET

这里能够观察到 ohasd进程会使用/var/tmp/.oracle/sOHASD_UI_SOCKET这个socket文件来建立集群间节点通信,这也就解释了。为什么没有ohasd进程,我就不能使用
crsctl start cluster 命令来管理集群中远程节点。

【oracle 11G Grid 】Crsctl start cluster 和 crsctl start crs 有差别么?的更多相关文章

  1. windows 环境怎样恢复 (oracle 11g grid) ocr voting 损坏的集群

     windows 环境怎样恢复 (oracle 11g grid) ocr voting 损坏的集群 oracle 11g 以后 ocr 能够放到 asm 磁盘上,而ASM的启动依赖于ocr和vo ...

  2. oracle 11g GRID 中 关于 OLR 须要知道的一些内容

     oracle 11g GRID 中 关于 OLR 须要知道的一些内容 1.检查olr 的状态: [root@vmrac1 ~]# ocrcheck -local Status of Oracle ...

  3. oracle 11g grid软件安装[20180121]

      实验环境:     系统->Redhat 6.5     Oracle软件版本->oracle 11.2.0.4.0        系统初始化     设定hosts主机名和对应IP地 ...

  4. 卸载oracle 11g grid软件

    一,使用deinstall 同样,卸载grid软件在11g中也推出了了卸载工具deinstall卸载同卸载oracle数据库软件 具体可参考:Behaviour of the Oracle De-in ...

  5. Linux安装Oracle 11g Grid Infrastructure 出现OUI-10182错误解决办法

      已确保安装的ORACLE_BASE目录是属于grid:oinstall 但安装时总是报:OUI-10182 The effective user ID does not match the own ...

  6. oracle 11g 中 (oracle 10g) crsctl 的 替换命令

     oracle 11g 中 (oracle 10g) crsctl 的 替换命令 Deprecated Command Replacement Commands crs_stat  ---集群状态 ...

  7. 安装Oracle 11g RAC R2 之Linux DNS 配置

    Oracle 11g RAC 集群中引入了SCAN(Single Client Access Name)的概念,也就是指集群的单客户端访问名称.SCAN 这个特性为客户端提供了单一的主机名,用于访问集 ...

  8. Oracle 11g rac中关于crsctl stop cluster/crs/has的区别

    转载至http://www.oracleplus.net/arch/1203.html,整理后得. 1 通过命令查看cluster/has/crs管理的内容 [root@11rac1 ~]# crsc ...

  9. 測试oracle 11g cluster 中OLR的重要性

     測试oracle 11g cluster 中OLR的重要性 called an Oracle Local Registry (OLR): each node in a cluster has a ...

随机推荐

  1. 上传Android代码到gerrit服务器

    1. 配置default.xml default.xml是跟Android代码配套的,可参考google Android源码下的default.xml(.repo/manifests/default. ...

  2. linux的touch命令

    linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件. 1.命令格式: touch [选项]... 文件... 2.命令参数: -a    ...

  3. Python 必选参数,默认参数,可变参数,关键字参数和命名关键字参数

    Py的参数还真是多,用起来还是很方便的,这么多参数种类可见它在工程上的实用性还是非常广泛的. 挺有意思的,本文主要参照Liaoxuefeng的Python教程. #必选参数 def quadratic ...

  4. Redis 的简单运算

    Redis 的简单运算 命令 说明 备注 incr key 在原字段上加 1 只能对整数操作 incrby key increment 在原字段上加上整数 (increment) 只能对整数操作 de ...

  5. webstorm进行VisualSVN配置及上传项目到项目库

    以前建站一直都是自己一个人,最近要做一个比较大的网站,寻思着利用svn在整个开发过程中会比较快,于是摸索着配置了一下. 首先,下载VisualSVN这个软件,官网链接 https://www.visu ...

  6. servlet-响应信息的content-Type作用

    package servlet; import java.io.File; import java.io.FileInputStream; import java.io.IOException; im ...

  7. 海盗(Haidao)网店系统最新官方版

    产品介绍:经过开发团队半个月的努力,Haidao v1.1 beta版终于和大家见面了,在这个版本中我们重点系统目录结构和整体框架进行了改进,同时新增加了多个功能模块. 四大功能模块意在打造最灵活的电 ...

  8. Python标准库sys

    1.命令行参数sys.argv 我们从Python语言之模块第一部分的例子开始,看看sys.argv中到底存了些什么内容. #Filename: using_sys.py import sys i=0 ...

  9. (转)分布式文件存储FastDFS(五)FastDFS常用命令总结

    http://blog.csdn.net/xingjiarong/article/details/50561471 1.启动FastDFS tracker: /usr/local/bin/fdfs_t ...

  10. python开发 面试题

    一.简述列表与元组的区别 答: 元组tuple与列表List相同点 元组tuple与列表List都是序列类型的容器对象,可以存放任何类型的数据.支持切片.迭代等操作. 元组tuple与列表List区别 ...