Como eu sei para qual nó do meu Oracle RAC estou conectado?

5

Existe uma maneira fácil de determinar em qual nó RAC de um sistema Oracle 11g R2 estou conectado? Estou tentando executar alguns testes de failover e quero ter certeza de que meu aplicativo está corretamente conectado a um nó e, após o desligamento desse nó, fazer a transição sem problemas para outro nó, sem qualquer atraso perceptível no front-end. Talvez seja importante mencionar que fazemos uso do TAF.

Eu considerei usar o Enterprise Manager para isso, mas eu acho que quando estou conectado a um nó rodando em e esse nó desce, eu realmente não tenho a chance de monitorar o status de conectividade dos nós.

    
por Stephan 01.02.2011 / 12:21

5 respostas

5

Para sua sessão atual?

select host_name from gv$instance where instance_number=userenv('instance');

Para todas as sessões:

select i.host_name, s.username from 
  gv$session s join
  gv$instance i on (i.inst_id=s.inst_id)
where 
  username is not null;
    
por 01.02.2011 / 13:35
4

Para a sessão atual:

SELECT sys_context ('USERENV', 'INSTANCE') como instância #,        sys_context ('USERENV', 'INSTANCE_NAME') AS instance_name   DO dual

    
por 01.02.2011 / 13:39
2

Se você está conectado ao node1

SQL> select host_name from v$instance;
instance1

Se você estiver conectado ao nodeN

SQL> select host_name from v$instance;
instanceN

Se você gosta de conhecer todas as instâncias e todos os nós

SQL> select instance_name,host_name from gv$instance;

ou

$ crsctl stat res -t
cluster resource
 1 node host1  online
 2 node host2  online
 n node hostn  offline
    
por 22.10.2014 / 10:52
0
SELECT sid,serial#, inst_id,username,event,ownerid
    FROM GV$SESSION
    WHERE sid=(select sid from v$mystat where rownum=1);
    
por 30.05.2016 / 13:19
0

Eu estava me perguntando a mesma coisa que tentei criar uma forma de definir o ORACLE_SID em um ambiente RAC. Um de meus colegas DBAs tinha um esquema em que ele olhava para o processo pmon e extraía o último dígito como o número da instância, mas isso só funcionava se a instância estivesse em execução. A seguir está minha solução como código personalizado no final de oraenv (renomeado para oraenvr), que pegará o número do nó como o último dígito do nome da instância em execução ou extrairá o último dígito de uma instância ASM em execução. Ele só precisa fazer isso para instâncias não-ASM, porque com o ASM, o nome do banco de dados em / etc / oratab também é o nome da instância (por exemplo, + ASM1). Mas, novamente, você precisará do banco de dados ou da instância do ASM em execução para ter um processo em execução a partir do qual obter o número do nó.

#
# Install any "custom" code here
#
# Add proceeding digit to ORACLE_SID if it's a database instance
#
if [ 'expr $ORACLE_SID|cut -c1-4' != "+ASM" ]; then ## ASM instance name is also the /etc/oratab database name, so we don't need to change it.
   len='ps -ef|grep smon|grep $ORACLE_SID|wc -c'
   if [ $len != "0" ]; then # we found the running non-ASM database instance
      len1='expr $len - 1'
      nodenum='ps -ef|grep smon|grep $ORACLE_SID|cut -c$len1-$len'
   else ## use ASM instance as node number reference since database instance is probably down.
      len='ps -ef|grep smon|grep ASM|wc -c'
      len1='expr $len - 1'
      nodenum='ps -ef|grep smon|grep ASM|cut -c$len1-$len'
   fi
   ORACLE_SID=$ORACLE_SID$nodenum
fi

Blockquote

    
por 01.06.2017 / 17:06