【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. linux如何更改yum源

    更改linux yum源方法:第一步:进入yum配置文件目录:cd /etc/yum.repos.d/第二步:备份配置文件(如果后续出现了问题就可以恢复):mv CentOS-Base.repo Ce ...

  2. 元组Tuple、数组Array、映射Map

    一.元组Tuple 元组Tuple是不同类型的值的聚集,元组的值将单个的值包含在圆括号中来构成,元组可以包含一个不同类型的元素 如 val riple = (100, "Scala" ...

  3. Django用户认证系统

    一. 认证系统概要 create_user 创建用户 authenticate 验证登录 login 记住用户的登录状态 logout 退出登录 is_authenticated 判断用户是否登录 l ...

  4. python--11、协程

    协程,又称微线程,纤程.英文名Coroutine. 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕. 所以子程 ...

  5. MySQL实现当前数据表的所有时间都增加或减少指定的时间间隔

    DATE_ADD() 函数向日期添加指定的时间间隔. 当前表所有数据都往后增加一天时间: UPDATE ACT_BlockNum SET CreateTime = DATE_ADD(CreateTim ...

  6. [系统]no such partition

    电脑系统是win8.1+ubuntu14.2,为了卸载ubuntu,安装CentOS,于是在win8.1下把ubuntu的分区给删除了,重启,出现no such partition grub resc ...

  7. 顺序表查找及其优化(Java)

    顺序表查找(线性查找): private static void Ordersearch(int[] arr,int num) { for (int i = 0; i < arr.length; ...

  8. mysql_数据查询_单表查询

    1.单表查询: 1.1选中表中若干列: SELECT子句的<目标列表达式>可以是表中属性列,也可以是表达式,还可以是字符常量. SELECT Sname,'year of birth:', ...

  9. mitmproxy安装与使用

    mitmproxy安装与使用 (抓包,中间人代理工具.支持SSL) 在开发微信公端的时候开发调试只能用浏览器自带开发工具,本来移动端可以用用fiddler.wireshark等工具来抓包,但是自从改用 ...

  10. IO编程——复制一个文件中的内容到另一个文件

    public class TestIO { public static void main(String[] args) { File inputFile = new File("a.txt ...