Olá pessoal!

Bom, depois das comemorações devido à nomeação a Oracle ACE, voltaremos ao trabalho!

Continuaremos com a série de artigos/posts que trata sobre as rotinas administrativas do Clusterware.

Hoje veremos mais detalhes a respeito do crs_stat.

Essa ferramenta é utilizada para visualizar o status dos componentes registrados no Clusterware.

Características do crs_stat:

  • Pode ser executado a partir de qualquer nó;
  • Deve ser executado com o usuário oracle;
  • Controla todos os nós;
  • Visualiza o status dos componentes registrados no Clusterware.

Alguns exemplos de uso:

Sintaxe mais utilizada:

[oracle@mvrac1 ~]$ crs_stat -t

A saída do comando será:

Name           Type           Target    State     Host
------------------------------------------------------------
ora.mvdb.db    application    ONLINE    ONLINE    mvrac1
ora....b1.inst application    ONLINE    ONLINE    mvrac1
ora....b2.inst application    ONLINE    ONLINE    mvrac2
ora....ucao.cs application    ONLINE    ONLINE    mvrac1
ora....db1.srv application    ONLINE    ONLINE    mvrac1
ora....db2.srv application    ONLINE    ONLINE    mvrac2
ora....SM1.asm application    ONLINE    ONLINE    mvrac1
ora....C1.lsnr application    ONLINE    ONLINE    mvrac1
ora.mvrac1.gsd application    ONLINE    ONLINE    mvrac1
ora.mvrac1.ons application    ONLINE    ONLINE    mvrac1
ora.mvrac1.vip application    ONLINE    ONLINE    mvrac1
ora....SM2.asm application    ONLINE    ONLINE    mvrac2
ora....C2.lsnr application    ONLINE    ONLINE    mvrac2
ora.mvrac2.gsd application    ONLINE    ONLINE    mvrac2
ora.mvrac2.ons application    ONLINE    ONLINE    mvrac2
ora.mvrac2.vip application    ONLINE    ONLINE    mvrac2

Observem que para alguns dos recursos registrados no Clusterware, o nome é “quebrado” para facilitar a visualização. No entanto, isso não facilita o gerenciamento dos recursos, já que fica mais complicado identificar os recursos.

Para entender a saída do comando:

A primeira coluna exibe o nome do recurso.

A segunda coluna exibe o tipo de recurso no Clusterware. Todos os recursos exibidos são do tipo application.

A coluna TARGET indica qual é o status esperado do recurso.

A coluna STATE indica o status atual do recurso.

A coluna HOST indica em qual host o recurso está em execução.

Outra forma de utilizar o crs_stat é da seguinte forma:

[oracle@mvrac1 ~]$ crs_stat

A saída do comando será:

NAME=ora.mvdb.db
TYPE=application
TARGET=ONLINE
STATE=ONLINE on mvrac1

NAME=ora.mvdb.mvdb1.inst
TYPE=application
TARGET=ONLINE
STATE=ONLINE on mvrac1

NAME=ora.mvdb.mvdb2.inst
TYPE=application
TARGET=ONLINE
STATE=ONLINE on mvrac2

NAME=ora.mvdb.producao.cs
TYPE=application
TARGET=ONLINE
STATE=ONLINE on mvrac1

NAME=ora.mvdb.producao.mvdb1.srv
TYPE=application
TARGET=ONLINE
STATE=ONLINE on mvrac1

NAME=ora.mvdb.producao.mvdb2.srv
TYPE=application
TARGET=ONLINE
STATE=ONLINE on mvrac2

NAME=ora.mvrac1.ASM1.asm
TYPE=application
TARGET=ONLINE
STATE=ONLINE on mvrac1

NAME=ora.mvrac1.LISTENER_MVRAC1.lsnr
TYPE=application
TARGET=ONLINE
STATE=ONLINE on mvrac1

NAME=ora.mvrac1.gsd
TYPE=application
TARGET=ONLINE
STATE=ONLINE on mvrac1

NAME=ora.mvrac1.ons
TYPE=application
TARGET=ONLINE
STATE=ONLINE on mvrac1

NAME=ora.mvrac1.vip
TYPE=application
TARGET=ONLINE
STATE=ONLINE on mvrac1

NAME=ora.mvrac2.ASM2.asm
TYPE=application
TARGET=ONLINE
STATE=ONLINE on mvrac2

NAME=ora.mvrac2.LISTENER_MVRAC2.lsnr
TYPE=application
TARGET=ONLINE
STATE=ONLINE on mvrac2

NAME=ora.mvrac2.gsd
TYPE=application
TARGET=ONLINE
STATE=ONLINE on mvrac2

NAME=ora.mvrac2.ons
TYPE=application
TARGET=ONLINE
STATE=ONLINE on mvrac2

NAME=ora.mvrac2.vip
TYPE=application
TARGET=ONLINE
STATE=ONLINE on mvrac2

Observem que mesmo exibindo o status de todos os componentes sem quebras de texto, para um cluster com muitos recursos registrados se torna inviável utilizar o comando desta forma, pois também não fica fácil gerenciar os componentes desta forma.

Para solucionar isso, um bom conhecimento em shell scripting resolve. Ou então, podemos utilizar alguma solução já criada por alguém.

Este é o caso! 🙂

Existe um guru em Oracle RAC chamado Jeffrey Hunter. Ele desenvolveu um script que facilita a leitura do status dos componentes do clusterware.

O script pode ser baixado diretamente do site dele: http://www.idevelopment.info/data/Oracle/DBA_scripts/UNIX_Shell_Scripts/rac_crs_stat

O script está reproduzido abaixo:

#!/bin/ksh

# +----------------------------------------------------------------------------+
# |                          Jeffrey M. Hunter                                 |
# |                      jhunter@idevelopment.info                             |
# |                         www.idevelopment.info                              |
# |----------------------------------------------------------------------------|
# |      Copyright (c) 1998-2009 Jeffrey M. Hunter. All rights reserved.       |
# |----------------------------------------------------------------------------|
# | DATABASE : Oracle                                                          |
# | FILE     : rac_crs_stat                                                    |
# | CLASS    : UNIX Shell Scripts                                              |
# | PURPOSE  : This KSH script will query all CRS resources using the crs_stat |
# |            script. The report will be a formatted version of the           |
# |            crs_stat -t command, but in tabular form with resource name     |
# |            and status. Filtering options are available by passing in a     |
# |            single string parameter to this script. This argument will be   |
# |            used to limit the output to HA resources whose names match      |
# |            that string.                                                    |
# | USAGE    : rac_crs_stat.ksh [RESOURCE_KEY]                                 |
# | NOTE     : This script requires the environment $ORA_CRS_HOME to be set to |
# |            your CRS installation.                                          |
# | NOTE     : As with any code, ensure to test this script in a development   |
# |            environment before attempting to run it in production.          |
# +----------------------------------------------------------------------------+

# +----------------------------------------------------------------------------+
# | GLOBAL VARIABLES                                                           |
# +----------------------------------------------------------------------------+

RSC_KEY=$1
QSTAT=-u
AWK=/usr/bin/awk

# +----------------------------------------------------------------------------+
# | TABLE HEADER                                                               |
# +----------------------------------------------------------------------------+

$AWK \
  'BEGIN {printf "%-50s %-10s %-18s\n", "HA Resource", "Target", "State";
          printf "%-50s %-10s %-18s\n", "-----------", "------", "-----";}'

# +----------------------------------------------------------------------------+
# | TABLE BODY                                                                 |
# +----------------------------------------------------------------------------+

$ORA_CRS_HOME/bin/crs_stat $QSTAT | $AWK \
 'BEGIN { FS="="; state = 0; }
  $1~/NAME/ && $2~/'$RSC_KEY'/ {appname = $2; state=1};
  state == 0 {next;}
  $1~/TARGET/ && state == 1 {apptarget = $2; state=2;}
  $1~/STATE/ && state == 2 {appstate = $2; state=3;}
  state == 3 {printf "%-50s %-10s %-18s\n", appname, apptarget, appstate; state=0;}'

Eu gosto de alterar o script incluindo uma variável de ambiente, que para o script, já deveria estar definida no sistema operacional. Alterar da seguinte forma:

De:

# +----------------------------------------------------------------------------+
# | TABLE BODY                                                                 |
# +----------------------------------------------------------------------------+

$ORA_CRS_HOME/bin/crs_stat $QSTAT | $AWK \

Para:

# +----------------------------------------------------------------------------+
# | TABLE BODY                                                                 |
# +----------------------------------------------------------------------------+

ORA_CRS_HOME=/u01/app/oracle/product/10.2.0/crs
$ORA_CRS_HOME/bin/crs_stat $QSTAT | $AWK \

Observem que incluí a linha onde defino a localização de ORA_CRS_HOME.

Eu costumo colocar esse script, com permissão de escrita (chmod +x) em /usr/local/bin, pois assim qualquer usuário do sistema operacional conseguirá visualizar o status dos componentes do clusterware.

HA Resource                                        Target     State             
-----------                                        ------     -----             
ora.mvdb.db                                        ONLINE     ONLINE on mvrac1  
ora.mvdb.mvdb1.inst                                ONLINE     ONLINE on mvrac1  
ora.mvdb.mvdb2.inst                                ONLINE     ONLINE on mvrac2  
ora.mvdb.producao.cs                               ONLINE     ONLINE on mvrac1  
ora.mvdb.producao.mvdb1.srv                        ONLINE     ONLINE on mvrac1  
ora.mvdb.producao.mvdb2.srv                        ONLINE     ONLINE on mvrac2  
ora.mvrac1.ASM1.asm                                ONLINE     ONLINE on mvrac1  
ora.mvrac1.LISTENER_MVRAC1.lsnr                    ONLINE     ONLINE on mvrac1  
ora.mvrac1.gsd                                     ONLINE     ONLINE on mvrac1  
ora.mvrac1.ons                                     ONLINE     ONLINE on mvrac1  
ora.mvrac1.vip                                     ONLINE     ONLINE on mvrac1  
ora.mvrac2.ASM2.asm                                ONLINE     ONLINE on mvrac2  
ora.mvrac2.LISTENER_MVRAC2.lsnr                    ONLINE     ONLINE on mvrac2  
ora.mvrac2.gsd                                     ONLINE     ONLINE on mvrac2  
ora.mvrac2.ons                                     ONLINE     ONLINE on mvrac2  
ora.mvrac2.vip                                     ONLINE     ONLINE on mvrac2

Agora sim a saída está fácil de ser visualizada.

Uma outra forma de utilizar o crs_stat é da seguinte forma:

Visualizando o perfil (profile) do Listener do nó MVRAC1:

crs_stat -p

A saída do comando será:

NAME=ora.mvrac1.LISTENER_MVRAC1.lsnr
TYPE=application
ACTION_SCRIPT=/u01/app/oracle/product/10.2.0/db_1/bin/racgwrap
ACTIVE_PLACEMENT=0
AUTO_START=1
CHECK_INTERVAL=600
DESCRIPTION=CRS application for listener on node
FAILOVER_DELAY=0
FAILURE_INTERVAL=0
FAILURE_THRESHOLD=0
HOSTING_MEMBERS=mvrac1
OPTIONAL_RESOURCES=
PLACEMENT=restricted
REQUIRED_RESOURCES=ora.mvrac1.vip
RESTART_ATTEMPTS=5
SCRIPT_TIMEOUT=600
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=
USR_ORA_INST_NOT_SHUTDOWN=
USR_ORA_LANG=
USR_ORA_NETMASK=
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=

Alguns campos importantes:

ACTION_SCRIPT=/u01/app/oracle/product/10.2.0/db_1/bin/racgwrap

Todo recurso do clusterware tem um “action script”. O action script é o script que monitora o status e dispara o start/stop dos componentes do clusterware.

AUTO_START=1

AUTO_START indica se o recurso deve ser iniciado automaticamente pelo Clusterware.

Valores de referência:

  • AUTO_START=0: Se o recurso estava em execução antes do stop do Clusterware, ele será iniciado automaticamente. Se o recurso estava OFFLINE antes do stop do Clusterware, ele não será iniciado automaticamente. Resumindo, ele “conserva” o status do componentes antes do Stop do Clusterware;
  • AUTO_START=1: O Clusterware SEMPRE iniciará o recurso automaticamente;
  • AUTO_START=2: O Clusterware NUNCA iniciará o recurso automaticamente;
PLACEMENT=restricted

PLACEMENT significa que esse recurso só pode ser executado no nó mvrac1. Este recurso nunca poderá ser executado em outro nó. Apenas como exemplo, esse campo para um recurso VIP será exibido da seguinte forma:

PLACEMENT=favored

Isso indica que o recurso preferencialmente será executado no nó específico, mas que ele pode ser levado para outro nó quando o nó “principal” deste recurso estiver indisponível.

REQUIRED_RESOURCES=ora.mvrac1.vip

REQUIRED_RESOURCE indica quais são os recursos exigidos/necessários para que o recurso em questão possa ser executado. No caso do Listener num ambiente RAC, o VIP precisa estar online para que ele possa ser iniciado. Se o VIP estiver offline, o clusterware tentará inicializar o VIP antes do Listener.

RESTART_ATTEMPTS=5

Por default, quando um recurso estiver offline, o Clusterware tentará inicializar este recurso 5 vezes. Se as 5 tentativas falharem, o componente ficará no status OFFLINE e com a coluna TARGET em ONLINE.

Espero que este post de hoje tenha sido útil!

Voltaremos logo com a continuação desta série de artigos.

Um abraço!

Vinicius