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
Related posts
Disclaimer
Minhas postagens refletem minhas próprias opiniões e não representam necessariamente as opiniões do meu empregador, a Accenture.