crs_stat -t in 10g was great because you could just print it out and grep for OFFLINE or UNKNOWN to determine if there was a problem. 11g deprecated the use of crs_stat -t. It’s not just that you shouldn’t use it because it will be removed in a future release, it also will print OFFLINE for some components that will never be ONLINE.
As such, I wrote the following to print a format for 11g crsctl that will show it to you in a “greppable” format 🙂
#!/bin/sh
CRS_HOME=/u01/app/11.2.0/grid
awk 'BEGIN {printf "%-45s %-10s %-15s %-12s %-16s\n", "NAME", "TARGET", "STATE", "SERVER", "STATE_DETAILS"}'
awk 'BEGIN {printf "%-45s %-10s %-15s %-12s %-16s\n", "-------------------------", "----------", "----------", "------------", "------------------"}'
$CRS_HOME/bin/crsctl stat res -t \
| awk -v t="$t" '$0 !~ "----" && $0 !~ "TARGET" && $0 !~ "Cluster Resources" && $0 !~ "Local Resources" \
{
if (NF == 1) {\
rs=$0\
} \
else { \
if ($1 ~ "^[0-9]") { \
if ($0 ~ "Shutdown" || (rs ~ "svc$" && $3 == "OFFLINE" )) { \
l = "$CRS_HOME/olsnodes -n"
cmd[NR] = l
while (l | getline line) {
split(line,r," ")
if (r[2] == $1) {
NODE = r[1]
}
}
printf "%-45s %-10s %-15s %-12s %s %s\n", rs, $2, $3, NODE, $4, $5, "", $6, $7 \
} \
else { \
printf "%-45s %-10s %-15s %-12s %s %s\n", rs, $2, $3, $4, $5, $6, $7 \
} \
} \
else { \
printf "%-45s %-10s %-15s %-12s %s %s\n", rs, $1, $2, $3, $4, $5, $6, $7 \
} \
} \
}'
This will produce output such as below…
NAME TARGET STATE SERVER STATE_DETAILS
------------------------- ---------- ---------- ------------ ------------------
ora.ISCSI.dg ONLINE ONLINE dell11gr1
ora.ISCSI.dg ONLINE ONLINE dell11gr2
ora.LISTENER.lsnr ONLINE ONLINE dell11gr1
ora.LISTENER.lsnr ONLINE ONLINE dell11gr2
ora.asm ONLINE ONLINE dell11gr1 Started
ora.asm ONLINE ONLINE dell11gr2 Started
ora.gsd ONLINE ONLINE dell11gr1
ora.gsd ONLINE ONLINE dell11gr2
ora.net1.network ONLINE ONLINE dell11gr1
ora.net1.network ONLINE ONLINE dell11gr2
ora.ons ONLINE ONLINE dell11gr1
ora.ons ONLINE ONLINE dell11gr2
ora.LISTENER_SCAN1.lsnr ONLINE ONLINE dell11gr2
ora.LISTENER_SCAN2.lsnr ONLINE ONLINE dell11gr1
ora.LISTENER_SCAN3.lsnr ONLINE ONLINE dell11gr2
ora.apptest.batch.svc ONLINE ONLINE dell11gr2
ora.apptest.db ONLINE ONLINE dell11gr1 Open
ora.apptest.db ONLINE ONLINE dell11gr2 Open
ora.apptest.online.svc ONLINE ONLINE dell11gr1
ora.cvu ONLINE ONLINE dell11gr2
ora.dell11gr1.vip ONLINE ONLINE dell11gr1
ora.dell11gr2.vip ONLINE ONLINE dell11gr2
ora.oc4j ONLINE ONLINE dell11gr2
ora.scan1.vip ONLINE ONLINE dell11gr2
ora.scan2.vip ONLINE ONLINE dell11gr1
ora.scan3.vip ONLINE ONLINE dell11gr2
UPDATE: 2017/06/23
This reflects the format for 12c
#!/bin/sh
CRS_HOME=/u01/app/12.1.0.2/grid
$CRS_HOME/bin/crsctl stat res -t \
| awk -v t="$t" '$0 !~ "Cluster Resources" && $0 !~ "Local Resources" \
{ \
if ($0 ~ "Name") { \
printf "%-45s %-10s %-15s %-14s %s %s\n", $1, $2, $3, $4, $5, $6
while (++k <= 120) { \
printf("-") \
} \
printf ("\n") \
} \
if (NF == 1) {\
rs=$0 \
} \
else if (NR != 2) { \
if ($1 ~ "^[0-9]") { \
if ($0 ~ "Shutdown" || (rs ~ "svc$" && $3 == "OFFLINE" )) { \
l = "$CRS_HOME/olsnodes -n"
cmd[NR] = l
while (l | getline line) {
split(line,r," ")
if (r[2] == $1) {
NODE = r[1]
}
}
printf "%-45s %-10s %-15s %-14s %s %s\n", rs, $2, $3, NODE, $4, $5, "", $6, $7 \
} \
else { \
printf "%-45s %-10s %-15s %-14s %s %s\n", rs, $2, $3, $4, $5, $6, $7 \
} \
} \
else { \
printf "%-45s %-10s %-15s %-14s %s %s\n", rs, $1, $2, $3, $4, $5, $6, $7 \
} \
} \
}'
13 comments for “Format output of crsctl status for RAC 11gR2 (and now 12c)”