Tag Archive: Clusterware

Olá pessoal!

Hoje veremos como realizar corretamente a análise para o troubleshooting do ambiente clusterizado.

Na verdade, não passarei aqui como se fazer um troubleshooting, mas, sim, como conhecer a ordem de inicialização do Clusterware, e, com isso, identificar o lugar onde o problema ocorre.

O Clusterware, é iniciado no boot do sistema operacional, pois é chamado através do /etc/inittab;

Entradas no /etc/inittab referentes ao startup do Clusterware:

h1:35:respawn:/etc/init.d/init.evmd run >/dev/null 2>&1 </dev/null
h2:35:respawn:/etc/init.d/init.cssd fatal >/dev/null 2>&1 </dev/null
h3:35:respawn:/etc/init.d/init.crsd run >/dev/null 2>&1 </dev/null

Assim que o servidor é iniciado, o primeiro processo que tentará ficar online é o CSS, para isso, verificará se tem acesso de leitura/gravação nos Voting Disks;

Para acompanhar a subida do CSS, verificar dois logs:

  • Arquivo: /var/log/messages

As mensagens esperadas são:

    • Cluster Ready Services completed waiting on dependencies;
    • Running CRSD with TZ=;
    • Oracle CSS Family monitor starting.
  • Arquivo: $ORA_CRS_HOME/log/<hostname>/alert.log

A mensagem esperada é:

    • CSSD voting file is online: /dev/voting1

O arquivo /etc/oracle/ocr.loc define a localização do OCR. Necessário para que o processo CRSD seja iniciado. O CSS faz a leitura desse arquivo;

O CSS solicita o início do CRSD e EVMD ($ORA_CRS_HOME/log/hostname/alert.log.

As mensagens esperadas para esta ação são:

  • The OCR service started on node mvrac1;
  • EVMD started on node mvrac1;
  • CRSD started on node mvrac1;

O CRSD inicializará os recursos do cluster ($ORA_CRS_HOME/log/<hostname>/crsd/crsd.log).

As mensagens esperadas são:

  • “Attempting to start ‘ora.mvrac1.vip’ on member ‘mvrac1′”;
  • “Start of ‘ora.mvrac1.vip’ on member ‘mvrac1′ succeeded.”

Diretórios onde são gerados os logs do Clusterware:

  • $ORA_CRS_HOME/log/<hostname>

Para o restante dos recursos, o caminho de log permanece o mesmo:

Listener:

  • $ORACLE_HOME/network/log/listener.log

ASM:

  • Definido pelo parâmetro BACKGROUND_DUMP_DEST da instância ASM;

Banco de Dados:

  • Definido pelo parâmetro BACKGROUND_DUMP_DEST da instância de banco de dados.

Conhecendo todo o ciclo de inicialização do Clusterware, e onde procurar erros, fica fácil encontrar o problema, ou, ao menos, direcionar o problema para o Suporte Oracle.

Finalizamos hoje a série de artigos das rotinas administrativas do Clusterware.

O próximo artigo iniciará a série que tratará sobre a conversão de um banco de dados single instance para RAC.

Um abraço!

Vinicius







----------------------------------------------------------------------------

Copyright:

Este site e todo o conteúdo aqui publicado pertence ao Blog ViniciusDBA.com.br e possui seus respectivos direitos autorais.

O Conteúdo desde Blog não deve ser publicado, distribuído ou transmitido sem autorização prévia de seu autor.

Oracle e seus produtos são marcas registradas da Oracle Corporation® (http://www.oracle.com) Todo o material aqui encontrado é mantido sem ajuda financeira e mantém como propriedade de seu fundador/escritor.

Disclaimer:
The views expressed on this blog are my own and do not necessarily reflect the views of Oracle.
As opiniões publicadas neste blog (http://www.viniciusdba.com.br) são pessoais e não necessariamente representam a visão da Oracle.


Toda informação aqui encontrado é oferecida através do uso do bom senso e boa fé do seus leitores e não deve ser considerada como material oficial da Oracle Corporation (http://www.oracle.com).

O Autor (e contribuidores) não considera as informações aqui como oficiais e/ou permitidas para redistribuição. Ao utilizar o site http://www.viniciusdba.com.br o leitor deve entender e aceitar que as informações aqui encontradas são de direitos autorais do Autor e contribuidores.

O blog http://www.viniciusdba.com.br não faz revisão de conteúdo publicado por outros como comentários bem como posts em grupo de usuários ou portais.

Seus autores não necessariamente concordam ou apoiam opiniões de seus leitores.

ESTE É UM SITE INDEPENDENTE E NÃO REPRESENTA A ORACLE CORPORATION® (http://www.oracle.com) EM NENHUM SENTIDO. AS OPINIÕES E CONTEÚDOS AQUI ENCONTRADOS NÃO POSSUEM RELAÇÃO COM A VISÃO DA ORACLE CORPORATION®. ESTE SITE NÃO POSSUI NENHUM APOIO OU PATROCINIO DA ORACLE CORPORATION®.

Olá pessoal!

Hoje veremos mais detalhes sobre a ferramenta oifcfg.

Ela é utilizada para definir quais serão as interfaces de rede pública e privada no Clusterware. Além disso, ela é utilizada quando é necessário alterar a faixa de endereço IP e subnet de uma rede específica (necessário quando há mudança na faixa de IP’s utilizada pela corporação).

Características do oifcfg:

  • Pode ser utilizado com o usuário oracle;
  • A partir de qualquer nó, controla todos;
  • Ferramenta para administração das interfaces de rede utilizadas no Clusterware:
    • Pública (VIP);
    • Privada (InterConnect).
  • Caso uma interface de rede queime, essa ferramenta será utilizada para substituir a interface de rede no OCR;
  • Útil para alterar a Subnet de uma interface de rede.

Como citado, as alterações efetuadas através do oifcfg são armazenadas no OCR.

Para verificar quais são as interfaces de rede e seu devido uso no Clusterware:

[oracle@mvrac1 oracle]$ oifcfg getif
eth0  172.23.10.0  global  public
eth1  10.0.0.0  global  cluster_interconnect

Para reconfigurar uma placa de rede para outra faixa de IP, primeiro, é necessário excluir as configurações desta placa:

[oracle@mvrac1 oracle]$ oifcfg delif -global eth0

A opção -global significa que esta configuração deverá ser válida para todos os nós, ou seja, a placa eth0 deverá ser excluída da configuração do Clusterware em todos os nós. Esta opção é utilizada pois também pode ser feita a configuração de uma interface de rede em apenas um nó, com a opção…

Vamos supor que ambas as interfaces serão excluídas pois outras serão configuradas. Vamos agora excluir a configuração da placa eth1:

[oracle@mvrac1 oracle]$ oifcfg delif -global eth1

Agora devemos configurar as placas desejadas:

[oracle@mvrac1 oracle]$ oifcfg setif -global eth3/192.168.111.0:public
[oracle@mvrac1 oracle]$ oifcfg setif -global eth4/10.0.0.0:cluster_interconnect

Lembrando que para alterar o endereço de InterConnect também é necessário alterar a informação no arquivo /etc/hosts e no arquivo de configuração da placa de rede em /etc/sysconfig/network-scripts/ifcfg-ethX.

Para o VIP, além disso, também é necessário alterar o endereço IP no OCR através do srvctl, conforme citado no post Oracle Clusterware – Rotinas Administrativas – Parte 3 – srvctl.

Um abraço!

Vinicius







----------------------------------------------------------------------------

Copyright:

Este site e todo o conteúdo aqui publicado pertence ao Blog ViniciusDBA.com.br e possui seus respectivos direitos autorais.

O Conteúdo desde Blog não deve ser publicado, distribuído ou transmitido sem autorização prévia de seu autor.

Oracle e seus produtos são marcas registradas da Oracle Corporation® (http://www.oracle.com) Todo o material aqui encontrado é mantido sem ajuda financeira e mantém como propriedade de seu fundador/escritor.

Disclaimer:
The views expressed on this blog are my own and do not necessarily reflect the views of Oracle.
As opiniões publicadas neste blog (http://www.viniciusdba.com.br) são pessoais e não necessariamente representam a visão da Oracle.


Toda informação aqui encontrado é oferecida através do uso do bom senso e boa fé do seus leitores e não deve ser considerada como material oficial da Oracle Corporation (http://www.oracle.com).

O Autor (e contribuidores) não considera as informações aqui como oficiais e/ou permitidas para redistribuição. Ao utilizar o site http://www.viniciusdba.com.br o leitor deve entender e aceitar que as informações aqui encontradas são de direitos autorais do Autor e contribuidores.

O blog http://www.viniciusdba.com.br não faz revisão de conteúdo publicado por outros como comentários bem como posts em grupo de usuários ou portais.

Seus autores não necessariamente concordam ou apoiam opiniões de seus leitores.

ESTE É UM SITE INDEPENDENTE E NÃO REPRESENTA A ORACLE CORPORATION® (http://www.oracle.com) EM NENHUM SENTIDO. AS OPINIÕES E CONTEÚDOS AQUI ENCONTRADOS NÃO POSSUEM RELAÇÃO COM A VISÃO DA ORACLE CORPORATION®. ESTE SITE NÃO POSSUI NENHUM APOIO OU PATROCINIO DA ORACLE CORPORATION®.

Olá pessoal!

Hoje veremos sobre as ferramentas de gerenciamento do OCR.

Características do ocrcheck:

  • Pode ser executado com o usuário root ou oracle;
  • Exibe informações a respeito do OCR (tamanho, versão, status, localização;
  • Um log é gerado em $ORA_CRS_HOME/log/<hostname>/client/ocrcheck_<pid>.log

Exemplo de uso, ocrcheck:

[root@mvrac1 oracle]# ocrcheck
Status of Oracle Cluster Registry is as follows :
         Version                  :          2
         Total space (kbytes)     :     256788
         Used space (kbytes)      :       4624
         Available space (kbytes) :     252164
         ID                       :  382969207
         Device/File Name         :  /dev/ocr1
                                    Device/File integrity check succeeded
         Device/File Name         :  /dev/ocr2
                                    Device/File integrity check succeeded

         Cluster registry integrity check succeeded

Como podem observar, o ocrcheck é utilizado para verificar a integridade do OCR.

Conteúdo do log gerado:

Oracle Database 10g CRS Release 10.2.0.4.0 Production Copyright 1996, 2008 Oracle.  All rights reserved.
2010-08-16 10:36:03.160: [OCRCHECK][6617296]ocrcheck starts...
2010-08-16 10:36:21.884: [OCRCHECK][6617296]protchcheck: OCR status : total = [256788], used = [4624], avail = [252164]

O ocrcheck pode ser utilizado caso haja algum problema no Clusterware para verificar a integridade do OCR.

Características do ocrdump:

  • Faz o dump do OCR;
  • Deve ser utilizado com o usuário root;
  • Usado para consultar sobre os registros do OCR em caso de perda e necessidade de novo registro (este, manual);
  • Suporte Oracle pode solicitar para tratar algum problema do Clusterware.

Exemplo de uso, ocrdump:

[root@mvrac1 oracle]# ocrdump /root/ocrdump.txt

Início do arquivo texto gerado:

08/17/2010 20:40:15
/u01/app/oracle/product/10.2.0/crs/bin/ocrdump.bin /root/ocrdump.txt

[SYSTEM]
UNDEF :
SECURITY : {USER_PERMISSION : PROCR_ALL_ACCESS, GROUP_PERMISSION : PROCR_READ, OTHER_PERMISSION : PROCR_READ, USER_NAME : roo
t, GROUP_NAME : root}

[SYSTEM.css]
UNDEF :
SECURITY : {USER_PERMISSION : PROCR_ALL_ACCESS, GROUP_PERMISSION : PROCR_READ, OTHER_PERMISSION : PROCR_READ, USER_NAME : roo
t, GROUP_NAME : root}

[SYSTEM.css.interfaces]
UNDEF :
SECURITY : {USER_PERMISSION : PROCR_ALL_ACCESS, GROUP_PERMISSION : PROCR_CREATE_SUB_KEY, OTHER_PERMISSION : PROCR_READ, USER_
NAME : oracle, GROUP_NAME : oinstall}

[SYSTEM.css.interfaces.global]
UNDEF :
SECURITY : {USER_PERMISSION : PROCR_ALL_ACCESS, GROUP_PERMISSION : PROCR_ALL_ACCESS, OTHER_PERMISSION : PROCR_READ, USER_NAME
 : oracle, GROUP_NAME : oinstall}

Mais um trecho do arquivo gerado:

[DATABASE.DATABASES.mvdb.SPFILE]
ORATEXT : +DG_DADOS/mvdb/spfilemvdb.ora
SECURITY : {USER_PERMISSION : PROCR_ALL_ACCESS, GROUP_PERMISSION : PROCR_WRITE, OTHER_PERMISSION : PROCR_READ, USER_NAME : oracle, GROUP_NAME : dba}

Características do ocrconfig:

  • Ferramenta de configuração do OCR;
  • Deve ser utilizado com o usuário root;
  • Permite realizar backup lógico do OCR (-export -s online);
  • Permite importar o backup lógico;
  • Permite fazer upgrade/downgrade do OCR;
  • Exibe qual é o diretório de backup automático do OCR e os últimos backups automáticos (-showbackup);
  • Altera o local de backup automático (-backuploc );
  • Substitui o local do OCR (-replace ocr | ocrmirror );
  • Sobrescreve a configuração do OCR (-overwrite);
  • Repara o OCR (-repair ocr | ocrmirror );
  • Um log é gerado em $ORA_CRS_HOME/log/<hostname>/client/ocrconfig_<pid>.log

O Clusterware gera um backup automático do OCR a cada 4 horas, conforme citado no post Oracle Clusterware – Arquitetura – Parte 2 – Principais Arquivos: Voting Disk e OCR.

Vamos exibir os backups automáticos:

[root@mvrac1 ~]# ocrconfig -showbackup

mvrac2     2010/08/16 08:16:47     /u01/app/oracle/product/10.2.0/crs/cdata/crs_mv

mvrac2     2010/08/16 02:53:24     /u01/app/oracle/product/10.2.0/crs/cdata/crs_mv

mvrac1     2010/08/11 23:11:57     /u01/app/oracle/product/10.2.0/crs/cdata/crs_mv

mvrac2     2010/08/16 02:53:24     /u01/app/oracle/product/10.2.0/crs/cdata/crs_mv

mvrac1     2010/08/08 02:24:35     /u01/app/oracle/product/10.2.0/crs/cdata/crs_mv

Como pudemos observar, os últimos backups estão no nó MVRAC2.

Verificando os arquivos de backup existentes no diretório:

[root@mvrac2 ~]# ls -ltr /u01/app/oracle/product/10.2.0/crs/cdata/crs_mv
total 28536
-rw-r--r-- 1 root root 4837376 Apr 26 00:19 week.ocr
-rw-r--r-- 1 root root 4861952 Jul 15 03:53 backup02.ocr
-rw-r--r-- 1 root root 4861952 Aug 16 02:53 backup01.ocr
-rw-r--r-- 1 root root 4861952 Aug 16 02:53 day.ocr
-rw-r--r-- 1 root root 4861952 Aug 16 08:16 week_.ocr
-rw-r--r-- 1 root root 4861952 Aug 16 08:16 backup00.ocr

Os backups estão ali.

Vamos fazer uma brincadeira?

Vamos corromper 1 OCR (como root):

[root@mvrac1 ~]# dd if=/dev/zero of=/dev/ocr1
dd: writing to `/dev/ocr1': No space left on device
514018+0 records in
514017+0 records out
263176704 bytes (263 MB) copied, 8.42927 seconds, 31.2 MB/s

Vamos agora verificar a integridade do OCR com o ocrcheck:

[root@mvrac1 ~]# ocrcheck
Status of Oracle Cluster Registry is as follows :
         Version                  :          2
         Total space (kbytes)     :     256788
         Used space (kbytes)      :       4624
         Available space (kbytes) :     252164
         ID                       :  382969207
         Device/File Name         :  /dev/ocr1
                                    Device/File needs to be synchronized with the other device
         Device/File Name         :  /dev/ocr2
                                    Device/File integrity check succeeded

         Cluster registry integrity check succeeded

O device /dev/ocr1 não está mais íntegro.

Bom, vamos agora corromper o outro OCR:

[root@mvrac1 ~]# dd if=/dev/zero of=/dev/ocr2
dd: writing to `/dev/ocr1': No space left on device
514018+0 records in
514017+0 records out
263176704 bytes (263 MB) copied, 8.42927 seconds, 31.2 MB/s

Verificando novamente a integridade do OCR:

[root@mvrac1 ~]# ocrcheck
Segmentation fault

Verificando o status dos componentes do cluster:

[root@mvrac1 ~]# crsstat
HA Resource                                        Target     State
-----------                                        ------     -----
error connecting to CRSD at [(ADDRESS=(PROTOCOL=ipc)(KEY=ora_crsqs))] clsccon 184

Verificando o log $ORA_CRS_HOME/log/mvrac1/alertmvrac1.log:

2010-08-17 20:45:22.046
[client(9701)]CRS-1006:The OCR location /dev/ocr2 is inaccessible. Details in /u01/app/oracle/product/10.2.0/crs/log/mvrac1/client/ocrcheck_9701.log.
2010-08-17 20:45:22.037
[crsd(4403)]CRS-1006:The OCR location /dev/ocr2 is inaccessible. Details in /u01/app/oracle/product/10.2.0/crs/log/mvrac1/crsd/crsd.log.

Trecho do log $ORA_CRS_HOME/mvrac1/crsd/crsd.log:

2010-08-17 20:45:24.233: [  OCRRAW][3055160208]proprdc: backend_ctx->metactx=[0x932bbc8]
2010-08-17 20:45:24.233: [  OCRRAW][3055160208]proprdc: backend_ctx->prop_sctx=[0x9327600]
2010-08-17 20:45:24.233: [  OCRRAW][3055160208]proprdc: backend_ctx->prop_sltsmx=[0x0]
2010-08-17 20:45:24.234: [  OCRRAW][3055160208]proprdc: backend_ctx->prop_sclsctx=[0x9350004]
2010-08-17 20:45:24.234: [  OCRRAW][3055160208]proprdc: backend_ctx->prop_ctx_ocrctx=[0x9357f24]
[  OCRAPI][3055160208]procr_ctx_set_invalid_no_abort: ctx set to invalid
[  OCRAPI][3055160208]procr_ctx_set_invalid: aborting...

Fazendo o restore do OCR:

[root@mvrac2 oracle]# ocrconfig -restore /u01/app/oracle/product/10.2.0/crs/cdata/crs_mv/backup00.ocr

Verificando a integridade do OCR:

[root@mvrac2 oracle]# ocrcheck
Status of Oracle Cluster Registry is as follows :
         Version                  :          2
         Total space (kbytes)     :     256788
         Used space (kbytes)      :       4624
         Available space (kbytes) :     252164
         ID                       :  382969207
         Device/File Name         :  /dev/ocr1
                                    Device/File integrity check succeeded
         Device/File Name         :  /dev/ocr2
                                    Device/File integrity check succeeded

         Cluster registry integrity check succeeded

Verificando o status dos recursos do Clusterware:

[root@mvrac1 crsd]# crsstat
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

Como puderam ver, desde que tenhamos os arquivos de backup do OCR disponíveis, é fácil recuperar o ambiente de Clusterware após um desastre.

No próximo, continuaremos com as rotinas administrativas do Clusterware.

Um abraço!

Vinicius







----------------------------------------------------------------------------

Copyright:

Este site e todo o conteúdo aqui publicado pertence ao Blog ViniciusDBA.com.br e possui seus respectivos direitos autorais.

O Conteúdo desde Blog não deve ser publicado, distribuído ou transmitido sem autorização prévia de seu autor.

Oracle e seus produtos são marcas registradas da Oracle Corporation® (http://www.oracle.com) Todo o material aqui encontrado é mantido sem ajuda financeira e mantém como propriedade de seu fundador/escritor.

Disclaimer:
The views expressed on this blog are my own and do not necessarily reflect the views of Oracle.
As opiniões publicadas neste blog (http://www.viniciusdba.com.br) são pessoais e não necessariamente representam a visão da Oracle.


Toda informação aqui encontrado é oferecida através do uso do bom senso e boa fé do seus leitores e não deve ser considerada como material oficial da Oracle Corporation (http://www.oracle.com).

O Autor (e contribuidores) não considera as informações aqui como oficiais e/ou permitidas para redistribuição. Ao utilizar o site http://www.viniciusdba.com.br o leitor deve entender e aceitar que as informações aqui encontradas são de direitos autorais do Autor e contribuidores.

O blog http://www.viniciusdba.com.br não faz revisão de conteúdo publicado por outros como comentários bem como posts em grupo de usuários ou portais.

Seus autores não necessariamente concordam ou apoiam opiniões de seus leitores.

ESTE É UM SITE INDEPENDENTE E NÃO REPRESENTA A ORACLE CORPORATION® (http://www.oracle.com) EM NENHUM SENTIDO. AS OPINIÕES E CONTEÚDOS AQUI ENCONTRADOS NÃO POSSUEM RELAÇÃO COM A VISÃO DA ORACLE CORPORATION®. ESTE SITE NÃO POSSUI NENHUM APOIO OU PATROCINIO DA ORACLE CORPORATION®.

Olá pessoal!

Hoje veremos como interromper e inicializar recursos individualmente utilizando outros binários: crs_start e crs_stop.

Características do crs_start e crs_stop:

  • Pode ser executado a partir de qualquer nó;
  • Deve ser executado com o usuário root;
  • Controla todos os nós;
  • Inicializa e interrompe individualmente os recursos gerenciados pelo Clusterware.

Alguns exemplos de uso:

Interrompendo o listener do nó MVRAC2 a partir do nó MVRAC1

[root@mvrac1 ~]# crs_stop ora.mvrac2.LISTENER_MVRAC2.lsnr
Attempting to stop `ora.mvrac2.LISTENER_MVRAC2.lsnr` on member `mvrac2`
Stop of `ora.mvrac2.LISTENER_MVRAC2.lsnr` on member `mvrac2` succeeded.

Verificando o status dos componentes:

[root@mvrac1 ~]$ crsstat
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                    OFFLINE    OFFLINE
ora.mvrac2.gsd                                     ONLINE     ONLINE on mvrac2
ora.mvrac2.ons                                     ONLINE     ONLINE on mvrac2
ora.mvrac2.vip                                     ONLINE     ONLINE on mvrac2

Inicializando o listener do nó MVRAC2 a partir do nó MVRAC1:

[root@mvrac1 ~]# crs_start ora.mvrac2.LISTENER_MVRAC2.lsnr
Attempting to start `ora.mvrac2.LISTENER_MVRAC2.lsnr` on member `mvrac2`
Start of `ora.mvrac2.LISTENER_MVRAC2.lsnr` on member `mvrac2` succeeded.

Verificando o status dos componentes:

[root@mvrac1 ~]# crsstat
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

Vocês puderam observar que é necessário especificar o nome completo do recurso, diferentemente do srvctl onde especificamos os recursos através de flags (-n para nó, -d para database, -i para instancia, etc…).

Comparando o crs_start/crs_stop com o srvctl, podemos verificar que o controle de cada recurso individual é mais fino no crs_start/crs_stop, já que no srvctl temos o recurso NODEAPPS que controla os recursos listener, gds, ons e vip. Cada recurso desse pode ser controlado manualmente pelo crs_start/crs_stop.

Além de inicializar/interromper os recursos, ele também “atualiza” o status dos componentes no OCR. Isso pode ser necessários em determinadas ocasiões onde o recurso está OFFLINE mas o seu alvo consta como ONLINE (no caso de uma máquina que não foi inicializada), ou qualquer outra situação.

O recurso pode ser “forçado” a ficar em OFFLINE a partir do crs_stop com a opção -f (force):

[root@mvrac1 ~]# crs_stop ora.mvrac2.LISTENER_MVRAC2.lsnr -f

Bom, o uso do crs_start e crs_stop é bem limitado. Eu só utilizo* esses binários nestas situações específicas.

Também há o binário crs_relocate.

Ele é utilizado para reposicionar um recurso do Clusterware.

Reposicionando o VIP:

[root@mvrac1 ~]# crs_relocate ora.mvrac1.vip
mvrac2 : CRS-1022: Resource ora.mvrac1.LISTENER_MVRAC1.lsnr (application) is running on mvrac1

CRS-0223: Resource 'ora.mvrac1.vip' has placement error.

Se eu tentar fazer o relocate do VIP com o listener no ar, eu receberei esse erro acima, pois o listener é um recurso dependente do VIP.

Neste caso, eu interrompo primeiro o listener:

[root@mvrac1 ~]# crs_stop ora.mvrac1.LISTENER_MVRAC1.lsnr
Attempting to stop `ora.mvrac1.LISTENER_MVRAC1.lsnr` on member `mvrac1`
Stop of `ora.mvrac1.LISTENER_MVRAC1.lsnr` on member `mvrac1` succeeded.

Aí faço o relocate do VIP:

[root@mvrac1 ~]#  crs_relocate ora.mvrac1.vip
Attempting to stop `ora.mvrac1.vip` on member `mvrac1`
Stop of `ora.mvrac1.vip` on member `mvrac1` succeeded.
Attempting to start `ora.mvrac1.vip` on member `mvrac2`
Start of `ora.mvrac1.vip` on member `mvrac2` succeeded.

O relocate geralmente é utilizado quando um recurso (VIP) não foi inicializado no seu nó (por um problema de placa de rede, por exemplo).

Este artigo foi bem simples. No próximo, veremos sobre as ferramentas de gerenciamento do OCR.

Um abraço!

Vinicius

* Corrigido erro de digitação. Obrigado LRezende!







----------------------------------------------------------------------------

Copyright:

Este site e todo o conteúdo aqui publicado pertence ao Blog ViniciusDBA.com.br e possui seus respectivos direitos autorais.

O Conteúdo desde Blog não deve ser publicado, distribuído ou transmitido sem autorização prévia de seu autor.

Oracle e seus produtos são marcas registradas da Oracle Corporation® (http://www.oracle.com) Todo o material aqui encontrado é mantido sem ajuda financeira e mantém como propriedade de seu fundador/escritor.

Disclaimer:
The views expressed on this blog are my own and do not necessarily reflect the views of Oracle.
As opiniões publicadas neste blog (http://www.viniciusdba.com.br) são pessoais e não necessariamente representam a visão da Oracle.


Toda informação aqui encontrado é oferecida através do uso do bom senso e boa fé do seus leitores e não deve ser considerada como material oficial da Oracle Corporation (http://www.oracle.com).

O Autor (e contribuidores) não considera as informações aqui como oficiais e/ou permitidas para redistribuição. Ao utilizar o site http://www.viniciusdba.com.br o leitor deve entender e aceitar que as informações aqui encontradas são de direitos autorais do Autor e contribuidores.

O blog http://www.viniciusdba.com.br não faz revisão de conteúdo publicado por outros como comentários bem como posts em grupo de usuários ou portais.

Seus autores não necessariamente concordam ou apoiam opiniões de seus leitores.

ESTE É UM SITE INDEPENDENTE E NÃO REPRESENTA A ORACLE CORPORATION® (http://www.oracle.com) EM NENHUM SENTIDO. AS OPINIÕES E CONTEÚDOS AQUI ENCONTRADOS NÃO POSSUEM RELAÇÃO COM A VISÃO DA ORACLE CORPORATION®. ESTE SITE NÃO POSSUI NENHUM APOIO OU PATROCINIO DA ORACLE CORPORATION®.

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







----------------------------------------------------------------------------

Copyright:

Este site e todo o conteúdo aqui publicado pertence ao Blog ViniciusDBA.com.br e possui seus respectivos direitos autorais.

O Conteúdo desde Blog não deve ser publicado, distribuído ou transmitido sem autorização prévia de seu autor.

Oracle e seus produtos são marcas registradas da Oracle Corporation® (http://www.oracle.com) Todo o material aqui encontrado é mantido sem ajuda financeira e mantém como propriedade de seu fundador/escritor.

Disclaimer:
The views expressed on this blog are my own and do not necessarily reflect the views of Oracle.
As opiniões publicadas neste blog (http://www.viniciusdba.com.br) são pessoais e não necessariamente representam a visão da Oracle.


Toda informação aqui encontrado é oferecida através do uso do bom senso e boa fé do seus leitores e não deve ser considerada como material oficial da Oracle Corporation (http://www.oracle.com).

O Autor (e contribuidores) não considera as informações aqui como oficiais e/ou permitidas para redistribuição. Ao utilizar o site http://www.viniciusdba.com.br o leitor deve entender e aceitar que as informações aqui encontradas são de direitos autorais do Autor e contribuidores.

O blog http://www.viniciusdba.com.br não faz revisão de conteúdo publicado por outros como comentários bem como posts em grupo de usuários ou portais.

Seus autores não necessariamente concordam ou apoiam opiniões de seus leitores.

ESTE É UM SITE INDEPENDENTE E NÃO REPRESENTA A ORACLE CORPORATION® (http://www.oracle.com) EM NENHUM SENTIDO. AS OPINIÕES E CONTEÚDOS AQUI ENCONTRADOS NÃO POSSUEM RELAÇÃO COM A VISÃO DA ORACLE CORPORATION®. ESTE SITE NÃO POSSUI NENHUM APOIO OU PATROCINIO DA ORACLE CORPORATION®.

Olá pessoal!

Hoje voltamos com a série de artigos que trata sobre as rotinas administrativas do Clusterware.

Hoje veremos com um pouco mais de detalhes o srvctl.

O srvctl, também é conhecido como service control.

Algumas características do srvctl:

  • Pode ser executado a partir de qualquer nó;
  • Deve ser executado com o usuário oracle;
  • Controla todos os nós;
  • Comando preferencial para interromper e iniciar recursos do cluster;
  • Administra nodeapps, listeners, ASM, instâncias, bancos de dados e serviços de banco de dados.

Alguns exemplos de uso:

Interromper o serviço producao do banco de dados mvdb:

srvctl stop service -d mvdb -s producao

Interromper a instância MVDB1 do banco de dados mvdb:

srvctl stop instance -d mvdb -i mvdb1

Interromper o ASM do nó mvrac1:

srvctl stop asm -n mvrac1

Interromper o listener do nó mvrac1:

srvctl stop listener -n mvrac1

Interromper os nodeapps do nó mvrac1:

srvctl stop nodeapps -n mvrac1

Interromper a instância mvdb1 do banco de dados mvdb com shutdown abort:

srvctl stop instance -d mvdb -i mvdb1 -o abort

Iniciar os nodeapps do nó mvdb1:

srvctl start nodeapps -n mvrac1

O Listener é iniciado/interrompido junto com os nodeapps.

Iniciar o listener:

srvctl start listener -n mvrac1

Iniciar o ASM do nó mvrac1:

srvctl start asm -n mvrac1

Iniciar a instância mvdb1 do banco de dados mvdb:

srvctl start instance -d mvdb -i mvdb1

Iniciar o serviço producao do banco de dados mvdb:

srvctl start service -d mvdb -s producao

Interromper o banco de dados mvdb:

srvctl stop database -d mvdb

Iniciar o banco de dados mvdb:

srvctl start database -d mvdb

Observem que é muito prático interromper o banco de dados mvdb a partir de um único comando. Se o DBA quiser interromper o banco de dados através do SQL*Plus, o comando shutdown immediate será realizado somente na instância em que estiver conectado, ou seja, o banco de dados continuará em execução nas outras instâncias. Se o BD estivesse em execução em 6 instâncias/nós, e o DBA quisesse baixar o BD através do SQL*Plus, ele teria que emitir o comando shutdown immediate seis vezes. Já com o srvctl, apenas um comando é necessário.

Se o recurso a ser baixado é uma instância, o banco de dados também deverá ser especificado.

Se o recurso a ser baixado for listener/nodeapps/ASM, basta especificar o nó onde a ação deve ser realizada.

Vamos supor a seguinte situação:

Já temos nosso ambiente em Oracle RAC Standard Edition (máximo de 4 sockets de CPU por cluster), com 2 nós, na empresa onde trabalhamos.

Este ambiente é bem parecido com o ambiente que temos aqui no blog:

  • 2 nós;
  • 1 banco de dados;
    • 2 instâncias de BD.

Este ambiente já existe há 5 anos. E, por conta disso, a empresa decide comprar servidores novos, para obter ganho de processamento e, além disso, ter hardware novo nunca é ruim, não é mesmo?

Como serão adquiridos servidores novos, desejamos realizar instalações novas do Clusterware e Patchset, e trazer o banco de dados que roda nos “servidores antigos” para estes novos servidores.

Portanto, o primeiro passo é instalar o Clusterware nos novos servidores, com IP’s públicos e VIP’s diferentes do cluster atual, para não haver impacto para os usuários.

Com o Clusterware instalado nos novos servidores, faremos a instalação do ASM e criação dos respectivos DG’s (respeitando inclusive os nomes, de preferência). O próximo passo é migrar o banco de dados para o novo cluster.

Desde que os IP’s públicos e VIP’s do novo cluster não estejam registrados no OCR, podemos deixar os servidores com os mesmos hostnames do cluster antigo (mvrac1 e mvrac2, mvrac1-vip, mvrac2-vip, e assim por diante).

Podemos realizar estas tarefas com o ambiente antigo/atual de cluster em operação. Quando levarmos o backup do BD para o novo cluster, podemos deixar este BD montado e aplicando os archivelogs gerados no cluster antigo/atual, como se fosse um standby.

No entanto, esse banco de dados no novo cluster ainda não está registrado no OCR. Com isso, não é possível realizar as operações de load balance e failover. Além disso, os IP’s VIP que ainda rodam no cluster “antigo”, devem ir para o novo cluster.

Neste momento, devemos baixar BD e ASM do cluster antigo, além dos nodeapps.

Em seguida, faremos o OPEN do banco de dados no cluster novo.

Portanto, após subir o banco de dados Oracle RAC nos servidores novos, o seguinte passo deve ser feito:

Registrar o banco de dados no OCR:

srvctl add database -d mvdb -o /u01/app/oracle/product/10.2.0/db_1 -p +DG_DADOS/spfilemvdb.ora -s open -y automatic

Registrar as instâncias mvdb1 e mvdb2 no OCR:

srvtl add instance -d mvdb -i mvdb1 -n mvrac1
srvtl add instance -d mvdb -i mvdb2 -n mvrac2

Se o registro foi feito incorretamente, basta excluir e refazer.

Para remover o BD do OCR:

srvctl remove database -d mvdb

Para remover as instâncias do OCR:

srvctl remove instance -d mvdb -i mvdb1 -n mvrac1
srvctl remove instance -d mvdb -i mvdb2 -n mvrac2

Para deixar o recurso de startup automático do banco desabilitado:

srvctl modify database -d mvdb -y manual

Alterar os VIP’s dos 2 nós no cluster novo:

srvctl modify nodeapps -n mvrac1 -A 172.23.10.21/255.255.255.0/eth0
srvctl modify nodeapps -n mvrac2 -A 172.23.10.22/255.255.255.0/eth0

Alterar o arquivo /etc/hosts dos servidores do cluster novo para refletir a mudança do VIP realizada acima.

Subir os nodeapps no cluster novo.

Pronto! Neste momento o cluster novo já responde pelos mesmos nomes e IP’s do cluster antigo.

Caso queira deixar o ambiente de cluster do cluster antigo operacional, basta alterar os VIP’s através do srvctl, como realizado acima, só não esqueça de alterar o arquivo /etc/hosts após a mudança.

Neste artigo vimos como iniciar e interromper recursos no cluster. Além disso, vimos também como registrar, remover e modificar recursos no OCR.

Espero que este artigo seja útil!

Continuaremos com a continuação desta série em breve.

Um abraço!

Vinicius







----------------------------------------------------------------------------

Copyright:

Este site e todo o conteúdo aqui publicado pertence ao Blog ViniciusDBA.com.br e possui seus respectivos direitos autorais.

O Conteúdo desde Blog não deve ser publicado, distribuído ou transmitido sem autorização prévia de seu autor.

Oracle e seus produtos são marcas registradas da Oracle Corporation® (http://www.oracle.com) Todo o material aqui encontrado é mantido sem ajuda financeira e mantém como propriedade de seu fundador/escritor.

Disclaimer:
The views expressed on this blog are my own and do not necessarily reflect the views of Oracle.
As opiniões publicadas neste blog (http://www.viniciusdba.com.br) são pessoais e não necessariamente representam a visão da Oracle.


Toda informação aqui encontrado é oferecida através do uso do bom senso e boa fé do seus leitores e não deve ser considerada como material oficial da Oracle Corporation (http://www.oracle.com).

O Autor (e contribuidores) não considera as informações aqui como oficiais e/ou permitidas para redistribuição. Ao utilizar o site http://www.viniciusdba.com.br o leitor deve entender e aceitar que as informações aqui encontradas são de direitos autorais do Autor e contribuidores.

O blog http://www.viniciusdba.com.br não faz revisão de conteúdo publicado por outros como comentários bem como posts em grupo de usuários ou portais.

Seus autores não necessariamente concordam ou apoiam opiniões de seus leitores.

ESTE É UM SITE INDEPENDENTE E NÃO REPRESENTA A ORACLE CORPORATION® (http://www.oracle.com) EM NENHUM SENTIDO. AS OPINIÕES E CONTEÚDOS AQUI ENCONTRADOS NÃO POSSUEM RELAÇÃO COM A VISÃO DA ORACLE CORPORATION®. ESTE SITE NÃO POSSUI NENHUM APOIO OU PATROCINIO DA ORACLE CORPORATION®.

Olá pessoal!

Hoje voltamos com a série de artigos que trata sobre as rotinas administrativas do Clusterware.

Hoje veremos com um pouco mais de detalhes o crsctl.

O crsctl, também é conhecido como cluster control.

Algumas características do crsctl:

  • Pode ser executado a partir de qualquer nó;
  • Deve sempre ser executado com o usuário root;
  • Controla todos os nós (exceto o start/stop);
  • É a principal ferramenta de administração do Clusterware;
  • Utilizado para verificação e alteração de parâmetros (indicado somente sob a solicitação do Suporte Oracle);
  • Utilizado para debug do Clusterware;
  • Rotinas administrativas do Clusterware.

Alguns exemplos de uso:

Para verificar o status de TODOS os daemons do Clusterware:

/u01/app/oracle/product/10.2.0/crs/bin/crsctl check crs

Para verificar o status do CRSD:

/u01/app/oracle/product/10.2.0/crs/bin/crsctl check crsd

Para verificar o status do EVMD:

/u01/app/oracle/product/10.2.0/crs/bin/crsctl check evmd

Para verificar o status do CSSD:

/u01/app/oracle/product/10.2.0/crs/bin/crsctl check cssd

Para verificar as versões do Clusterware:

/u01/app/oracle/product/10.2.0/crs/bin/crsctl query crs activeversion
/u01/app/oracle/product/10.2.0/crs/bin/crsctl query crs softwareversion

Para verificar (e alterar) parâmetros:

/u01/app/oracle/product/10.2.0/crs/bin/crsctl get css misscount
/u01/app/oracle/product/10.2.0/crs/bin/crsctl get css disktimeout
/u01/app/oracle/product/10.2.0/crs/bin/crsctl set css misscount 3600
/u01/app/oracle/product/10.2.0/crs/bin/crsctl set css disktimeout 3600

Para Listar módulos do cluster

/u01/app/oracle/product/10.2.0/crs/bin/crsctl lsmodules crs
/u01/app/oracle/product/10.2.0/crs/bin/crsctl lsmodules css
/u01/app/oracle/product/10.2.0/crs/bin/crsctl lsmodules evm

Para habilitar o debug de um módulo e um recurso:

/u01/app/oracle/product/10.2.0/crs/bin/crsctl debug log crs “CRSCOMM:3”  # Vai de 0 a 5
/u01/app/oracle/product/10.2.0/crs/bin/crsctl debug log res “ora.rac1.vip:5”

Para debugar todos os recursos:
Editar o script $ORA_CRS_HOME/bin/racgwrap e definir a variável _USR_ORA_DEBUG como 1

Para exibir os Voting Disks:

/u01/app/oracle/product/10.2.0/crs/bin/crsctl query css votedisk

Para migrar os Voting Disks de raw devices para block devices (essa atividade foi feita também em outro post) – relembre aqui:

Como root, nos nós rac1 e rac2:

/u01/app/oracle/product/10.2.0/crs/bin/crsctl stop crs

Como root, apenas em um nó. Como exemplo, no nó 1:

/u01/app/oracle/product/10.2.0/crs/bin/crsctl add css votedisk /dev/voting1 -force
/u01/app/oracle/product/10.2.0/crs/bin/crsctl add css votedisk /dev/voting2 -force
/u01/app/oracle/product/10.2.0/crs/bin/crsctl add css votedisk /dev/voting3 -force
/u01/app/oracle/product/10.2.0/crs/bin/crsctl query css votedisk
/u01/app/oracle/product/10.2.0/crs/bin/crsctl delete css votedisk /dev/raw/raw1 -force
/u01/app/oracle/product/10.2.0/crs/bin/crsctl delete css votedisk /dev/raw/raw3 -force
/u01/app/oracle/product/10.2.0/crs/bin/crsctl delete css votedisk /dev/raw/raw5 -force
/u01/app/oracle/product/10.2.0/crs/bin/crsctl query css votedisk

Como root nos nós rac1 e rac2:

/u01/app/oracle/product/10.2.0/crs/bin/crsctl start crs

Como puderam ver, o crsctl é utilizado em muitos casos.

Geralmente habilitamos o debug ou alteramos parâmetros sob solicitação do Suporte Oracle mediante algum problema no ambiente.

O objetivo deste post, assim como todos os outros que eu coloco neste blog, não é preparar você para uma prova de certificação, mas, sim para prepará-lo para trabalhar no mundo real.

No próximo artigo, veremos como funciona o srvctl.

Um abraço!

Vinicius







----------------------------------------------------------------------------

Copyright:

Este site e todo o conteúdo aqui publicado pertence ao Blog ViniciusDBA.com.br e possui seus respectivos direitos autorais.

O Conteúdo desde Blog não deve ser publicado, distribuído ou transmitido sem autorização prévia de seu autor.

Oracle e seus produtos são marcas registradas da Oracle Corporation® (http://www.oracle.com) Todo o material aqui encontrado é mantido sem ajuda financeira e mantém como propriedade de seu fundador/escritor.

Disclaimer:
The views expressed on this blog are my own and do not necessarily reflect the views of Oracle.
As opiniões publicadas neste blog (http://www.viniciusdba.com.br) são pessoais e não necessariamente representam a visão da Oracle.


Toda informação aqui encontrado é oferecida através do uso do bom senso e boa fé do seus leitores e não deve ser considerada como material oficial da Oracle Corporation (http://www.oracle.com).

O Autor (e contribuidores) não considera as informações aqui como oficiais e/ou permitidas para redistribuição. Ao utilizar o site http://www.viniciusdba.com.br o leitor deve entender e aceitar que as informações aqui encontradas são de direitos autorais do Autor e contribuidores.

O blog http://www.viniciusdba.com.br não faz revisão de conteúdo publicado por outros como comentários bem como posts em grupo de usuários ou portais.

Seus autores não necessariamente concordam ou apoiam opiniões de seus leitores.

ESTE É UM SITE INDEPENDENTE E NÃO REPRESENTA A ORACLE CORPORATION® (http://www.oracle.com) EM NENHUM SENTIDO. AS OPINIÕES E CONTEÚDOS AQUI ENCONTRADOS NÃO POSSUEM RELAÇÃO COM A VISÃO DA ORACLE CORPORATION®. ESTE SITE NÃO POSSUI NENHUM APOIO OU PATROCINIO DA ORACLE CORPORATION®.

Olá pessoal!

Depois de um longo tempo sem atualizar o blog, voltamos hoje com o início da série de artigos que tratará sobre as rotinas administrativas do Clusterware.

Esse primeiro artigo tratará sobre o start e stop do Clusterware.

Não explicarei em detalhes sobre os binários que utilizaremos para parar os recursos do cluster, pois isso será tratado nos artigos subsequentes. O objetivo deste artigo é deixar você preparado para inicializar e interromper os recursos individualmente ou globalmente.

Vamos lá?

Começaremos com a interrupção de todos os recursos do cluster num nó específico. Para isso, é necessário utilizar o binário crsctl que está em $ORA_CRS_HOME, a execução deste binário deve ser feita através do usuário root.

O atual status dos componentes do cluster é:

[oracle@mvrac1 ~]$ crsstat
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

Podemos observar que todos os recursos do cluster estão ONLINE. Tanto no nó mvrac1 quanto no mvrac2.

Vamos supor que a equipe de infra-estrutura precisa realizar a atualização de um firmware de uma placa do servidor. Ou trocar um processador, ou aumentar memória, enfim, qualquer atividade que exija a interrupção do servidor.

Como utilizamos o Oracle RAC, o ambiente de Banco de Dados não ficará indisponível pois temos dois servidores que executam o banco de dados, desta forma, podemos interromper tranquilamente o servidor que passará pela manutenção, com a garantia que o ambiente de banco de dados continuará disponível aos usuários.

O servidor que passará pela manutenção é o mvrac1. Desta forma, com o usuário root, executaremos o binário crsctl da seguinte forma:

[root@mvrac1 ~]# /u01/app/oracle/product/10.2.0/crs/bin/crsctl stop crs
Stopping resources. This could take several minutes.
Successfully stopped CRS resources.
Stopping CSSD.
Shutting down CSS daemon.
Shutdown request successfully issued.

Vejam que a sintaxe é: crsctl stop crs.

Eu estou solicitando através do crsctl interromper todo o crs (cluster), mas o binário crsctl quando utilizado com as palavras-chave start ou stop, tratará apenas do nó onde é executado, ou seja, interromperá todos os recursos no nó onde o “crsctl stop crs” foi executado, neste caso, o nó mvrac1.

Vamos agora no servidor mvrac2 verificar o status dos recursos do cluster após a interrupção dos recursos no nó mvrac1.

[oracle@mvrac2 crsd]$ crsstat
HA Resource                                        Target     State
-----------                                        ------     -----
ora.mvdb.db                                        ONLINE     ONLINE on mvrac2
ora.mvdb.mvdb1.inst                                ONLINE     OFFLINE
ora.mvdb.mvdb2.inst                                ONLINE     ONLINE on mvrac2
ora.mvdb.producao.cs                               ONLINE     ONLINE on mvrac2
ora.mvdb.producao.mvdb1.srv                        ONLINE     OFFLINE
ora.mvdb.producao.mvdb2.srv                        ONLINE     ONLINE on mvrac2
ora.mvrac1.ASM1.asm                                ONLINE     OFFLINE
ora.mvrac1.LISTENER_MVRAC1.lsnr                    ONLINE     OFFLINE
ora.mvrac1.gsd                                     ONLINE     OFFLINE
ora.mvrac1.ons                                     ONLINE     OFFLINE
ora.mvrac1.vip                                     ONLINE     ONLINE on mvrac2
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

Observem que o recurso ora.mvrac1.vip que é o recurso que controla o VIP (IP Virtual) do nó mvrac1 está agora online no servidor mvrac2. Esse é o comportamento padrão do Clusterware. Quando os recursos são interrompidos através do crsctl, o IP virtual é remanejado para outro servidor que estiver ativo no cluster.

Os recursos são interrompidos na seguinte ordem:

1) Serviços de BD;

2) BD;

3) ASM;

4) Nodeapps (Listener, GSD, ONS e VIP).

Muito bem, para inicializar os recursos do cluster no nó mvrac1, basta utilizar o crsctl com a palavra-chave start, com o usuário root:

[root@mvrac1 ~]# /u01/app/oracle/product/10.2.0/crs/bin/crsctl start crs
Attempting to start CRS stack
The CRS stack will be started shortly

Após isso, vamos verificar o status dos recursos do cluster:

[oracle@mvrac1 ~]$ crsstat
HA Resource                                        Target     State
-----------                                        ------     -----
ora.mvdb.db                                        ONLINE     ONLINE on mvrac2
ora.mvdb.mvdb1.inst                                ONLINE     ONLINE on mvrac1
ora.mvdb.mvdb2.inst                                ONLINE     ONLINE on mvrac2
ora.mvdb.producao.cs                               ONLINE     ONLINE on mvrac2
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

Os recursos são inicializados na seguinte ordem:

1) Nodeapps (Listener, GSD, ONS e VIP);

2) ASM;

3) BD;

4) Serviços de BD.

Agora que já sabemos inicializar/interromper todos os recursos do cluster num nó, vamos ver como interrompemos serviços específicos do cluster num nó, ou então em todo o cluster.

Vamos supor que eu precise alterar um parâmetro somente numa instância, como por exemplo, a quantidade definida para a SGA. A instância que terá o parâmetro alterado é a instância mvdb1, que está em execução no servidor mvrac1:

SQL> alter system set sga_max_size=175m scope=spfile sid='mvdb1';

System altered.

SQL> alter system set sga_target=175m scope=spfile sid='mvdb1';

System altered.

Após alterar o parâmetro, é necessário reiniciar a instância.

Agora utilizaremos o binário srvctl, neste momento, verificaremos apenas as funções de start/stop deste binário. Ele é utilizado para interromper recursos específicos, em todo o cluster ou apenas em nós específicos.

  • Instância de BD:

Para interromper a instância mvdb1, basta executar o seguinte:

[oracle@mvrac1 ~]$ srvctl stop instance -d mvdb -i mvdb1

A sintaxe é: srvctl stop instance -d <DBNAME> -i <INSTANCE_NAME> -o <OPTION_SHUTDOWN>

Exemplos:

srvctl stop instance -d mvdb -i mvdb1 -o abort
srvctl stop instance -d mvdb -i mvdb1 -o transactional

A opção default para o shutdown é a IMMEDIATE.

Para fazer o start o srvctl segue a mesma lógica:

[oracle@mvrac1 ~]$ srvctl start instance -d mvdb -i mvdb1

A sintaxe é: srvctl start instance -d <DBNAME> -i <INSTANCE_NAME> -o <OPTION_STARTUP>

Exemplos:

srvctl start instance -d mvdb -i mvdb1 -o nomount
srvctl start instance -d mvdb -i mvdb1 -o mount

A opção default para o shutdown é a OPEN.

  • Banco de Dados

Assim como baixamos apenas uma instância, podemos também realizar o stop/start de todo o banco de dados, ou seja, todas as instâncias associadas a este banco de dados:

[oracle@mvrac1 ~]$ srvctl stop database -d mvdb

Sua sintaxe é: srvctl stop database -d <DBNAME> -o <OPTION_SHUTDOWN>

Exemplos:

srvctl stop database -d mvdb -o abort
srvctl stop database -d mvdb -o transactional

A opção default para o shutdown é a IMMEDIATE.

Para fazer o startup do banco de dados:

[oracle@mvrac1 ~]$ srvctl start database -d mvdb

Sua sintaxe é: srvctl start database -d <DBNAME> -o <OPTION_STARTUP>

Exemplos:

srvctl start database -d mvdb -o nomount
srvctl start database -d mvdb -o mount

A opção default para o shutdown é a OPEN.

  • ASM

Para interromper o ASM:

[oracle@mvrac1 ~]$ srvctl stop asm -n mvrac1

A sintaxe deste comando é: srvctl stop asm -n <NODENAME>.

Como só há APENAS uma instância ASM por nó, é necessário especificar o nó quando a instância ASM for interrompida.

Para inicializar o ASM:

[oracle@mvrac1 ~]$ srvctl start asm -n mvrac1

A sintaxe deste comando é: srvctl start asm -n <NODENAME>.

Como só há APENAS uma instância ASM por nó, é necessário especificar o nó quando a instância ASM for inicializada.

  • Nodeapps

Para interromper os nodeapps:

[oracle@mvrac1 ~]$ srvctl stop nodeapps -n mvrac1

A sintaxe deste comando é: srvctl stop nodeapps -n <NODENAME> .

Para inicializar os nodeapps:

[oracle@mvrac1 ~]$ srvctl start nodeapps -n mvrac1

A sintaxe deste comando é: srvctl start nodeapps -n <NODENAME>.

  • Listener

Mesmo o Listener fazendo parte dos nodeapps, também é possível pará-lo individualmente com o srvctl.

Para interromper o Listener:

[oracle@mvrac1 ~]$ srvctl stop listener -n mvrac1

A sintaxe deste comando é: srvctl stop listener -n <NODENAME>.

Para inicializar o Listener:

[oracle@mvrac1 ~]$ srvctl start listener -n mvrac1

A sintaxe deste comando é: srvctl start listener -n <NODENAME>.

Bom, por hoje é só. No próximo artigo discutiremos com mais detalhes a utilização do crsctl (pois este não serve somente para interromper e inicializar os recursos do cluster).

Espero que este artigo seja útil.

Caso alguém tenha alguma dúvida, entre em contato através do comentário neste artigo ou então mande um e-mail para blog@viniciusdba.com.br.

Um abraço!

Vinicius







----------------------------------------------------------------------------

Copyright:

Este site e todo o conteúdo aqui publicado pertence ao Blog ViniciusDBA.com.br e possui seus respectivos direitos autorais.

O Conteúdo desde Blog não deve ser publicado, distribuído ou transmitido sem autorização prévia de seu autor.

Oracle e seus produtos são marcas registradas da Oracle Corporation® (http://www.oracle.com) Todo o material aqui encontrado é mantido sem ajuda financeira e mantém como propriedade de seu fundador/escritor.

Disclaimer:
The views expressed on this blog are my own and do not necessarily reflect the views of Oracle.
As opiniões publicadas neste blog (http://www.viniciusdba.com.br) são pessoais e não necessariamente representam a visão da Oracle.


Toda informação aqui encontrado é oferecida através do uso do bom senso e boa fé do seus leitores e não deve ser considerada como material oficial da Oracle Corporation (http://www.oracle.com).

O Autor (e contribuidores) não considera as informações aqui como oficiais e/ou permitidas para redistribuição. Ao utilizar o site http://www.viniciusdba.com.br o leitor deve entender e aceitar que as informações aqui encontradas são de direitos autorais do Autor e contribuidores.

O blog http://www.viniciusdba.com.br não faz revisão de conteúdo publicado por outros como comentários bem como posts em grupo de usuários ou portais.

Seus autores não necessariamente concordam ou apoiam opiniões de seus leitores.

ESTE É UM SITE INDEPENDENTE E NÃO REPRESENTA A ORACLE CORPORATION® (http://www.oracle.com) EM NENHUM SENTIDO. AS OPINIÕES E CONTEÚDOS AQUI ENCONTRADOS NÃO POSSUEM RELAÇÃO COM A VISÃO DA ORACLE CORPORATION®. ESTE SITE NÃO POSSUI NENHUM APOIO OU PATROCINIO DA ORACLE CORPORATION®.