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



【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进程,这个命令只能用来管理本地节点

[[email protected] ~]# 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.

[[email protected] ~]# 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进程。

[[email protected] ~]# 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的进程是否存在

[[email protected] ~]# ps -ef|grep ohasd

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

[[email protected] ~]# ps -ef|grep d.bin

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

------到这里可以确认集群已经全宕下来了

[[email protected] ~]# 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去杀是无法杀掉的,会自动再生一个进程。

[[email protected]rac2 ~]# 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

[[email protected] ~]# kill -9 3747

[[email protected] ~]# 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

[[email protected] ~]# kill -9 4895

[[email protected] ~]# 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的集群

[[email protected] ~]# crsctl start cluster -n vmrac2

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

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

[[email protected] ~]# 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上的集群

[[email protected] ~]#

节点二操作:

[[email protected] ~]# 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上的集群

[[email protected] ~]# 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集群是已经启动的)

[[email protected] ~]# 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文件

[email protected] ~]# 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

[[email protected] ~]# ls -l/var/tmp/.oracle/sOHASD_UI_SOCKET

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

那节点二上的状况如呢?

[[email protected] ~]# ls -l/var/tmp/.oracle/sOHASD_UI_SOCKET

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

[[email protected] ~]# lsof/var/tmp/.oracle/sOHASD_UI_SOCKET

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

[[email protected] ~]# crsctl start crs

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

[[email protected] ~]# 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

[[email protected] ~]# lsof/var/tmp/.oracle/sOHASD_UI_SOCKET

[[email protected] ~]# lsof/var/tmp/.oracle/sOHASD_UI_SOCKET

[[email protected] ~]# 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 有区别么?

时间: 2024-08-06 08:46:41

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

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

 oracle 11g GRID 中 关于 OLR 需要知道的一些内容 1.检查olr 的状态: [[email protected] ~]# ocrcheck -local Status of Oracle Local Registry is as follows : Version                  :          3 Total space (kbytes)     :     262120 Used space (kbytes)      :       274

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

 windows 环境怎样恢复 (oracle 11g grid) ocr voting 损坏的集群 oracle 11g 以后 ocr 能够放到 asm 磁盘上,而ASM的启动依赖于ocr和votedisk,所以在丢失ocr或votedisk 会导致cluter无法正常启动 假设原来的ocr 位置已经不存在,则必须使用同样的名字在原来同样的位置创建一个空 OCR . 建议使用下面步骤来恢复OCR: 1.确定当前集群节点数 C:\>olsnodes 2.关闭 oracle clusterwa

windows 环境如何恢复 (oracle 11g grid) ocr voting 损坏的集群

 windows 环境如何恢复 (oracle 11g grid) ocr voting 损坏的集群 oracle 11g 以后 ocr 可以放到 asm 磁盘上,而ASM的启动依赖于ocr和votedisk,所以在丢失ocr或votedisk 会导致cluter无法正常启动 如果原来的ocr 位置已经不存在,则必须使用相同的名字在原来相同的位置创建一个空 OCR . 建议使用以下步骤来恢复OCR: 1.确定当前集群节点数 C:\>olsnodes 2.关闭 oracle clusterwa

一步一步教你在redhat linux 下安装oracle 11g grid + database

给想学习oracle的新手看看,老鸟请飘过 操作系统信息: Vbox虚拟机软件版本: 安装所需要的软件: 所需软件下载地址: http://pan.baidu.com/s/1mgl8kzu 具体安装步骤: 一.新建虚拟机,并安装redhat5.4操作系统(64位) 注意:这里最小也要2G内存 由于我是做实验的虚拟机,存储我们这里选择动态分配.如果该虚拟机日后可能会经常使用,可将虚拟硬盘分配模式改为固定大小,这样性能会更好一些. 我们在这里分配了50G的存储空间 挂载操作系统镜像 完成后如下图所示

oracle 11g grid软件安装[20180121]

实验环境: 系统->Redhat 6.5 Oracle软件版本->oracle 11.2.0.4.0 系统初始化 设定hosts主机名和对应IP地址 vi /etc/hosts 192.168.139.11 t-redhat-02 t-redhat-02.com 关闭selinux vi /etc/selinux/config #SELINUX=enforcing SELINUX=disabled 关闭防火墙和自动 service iptables stop&&service

卸载oracle 11g grid软件

一,使用deinstall 同样,卸载grid软件在11g中也推出了了卸载工具deinstall卸载同卸载oracle数据库软件 具体可参考:Behaviour of the Oracle De-install/Deinstall/Uninstall Utility in 11gR2 (文档 ID 1363753.1) 二,手动卸载 但是有时候莫名其妙使用自带deinstall工具无法卸载,依然还需要进行手动卸载 下面介绍如何进行手动卸载 1.通过root用户进入到grid的ORACLE_HOM

oracle 11g grid安装

1.创建oracle用户及用户组 groupadd oinstall groupadd dba useradd -g oinstall -G dba -m oracle 设置oracle用户的口令: passwd oracle 我这里设置为oracle 2.创建相关目录 mkdir -p /u01 chown -R oracle.oinstall /u01 3.修改oracle用户环境变量 su - oracle vi .bash_profile export PATH export ORACL

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

 oracle 11g 中 (oracle 10g) crsctl 的 替换命令 Deprecated Command Replacement Commands crs_stat  ---集群状态检查 crsctl check cluster -all crsctl stat res -t crs_register  --集群资源注冊 crsctl add resource crsctl add type crsctl modify resource crsctl modify type c

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

Oracle 11g RAC 集群中引入了SCAN(Single Client Access Name)的概念,也就是指集群的单客户端访问名称.SCAN 这个特性为客户端提供了单一的主机名,用于访问集群中运行的 Oracle 数据库.如果您在集群中添加或删除节点,使用 SCAN 的客户端无需更改自己的 TNS 配置.无论集群包含哪些节点,SCAN 资源及其关联的 IP 地址提供了一个稳定的名称供客户端进行连接使用.在Oracle 11g grid 安装时即要求为该特性配置DNS解析方式或GNS解