我如何知道我连接的Oracle RAC的哪个节点?

有没有简单的方法来确定我连接的Oracle 11g R2系统的哪个RAC节点? 我正在尝试执行一些故障转移testing,并且希望确保我的应用程序正确连接到一个节点,并且在此节点节点closures时,平滑过渡到另一个节点,而在前端没有任何明显的延迟。 也许值得一提的是我们利用TAF。

我考虑过使用企业pipe理器,但我想当我连接到一个节点运行时,这个节点宕机,我真的没有机会监控节点的连接状态。

为了你目前的会议?

 从gv $ instance中selecthost_name,其中instance_number = userenv('instance'); 

所有会议:

 从中selecti.host_name,s.username 
   gv $ session s join
   gv $ instance i on(i.inst_id = s.inst_id)
哪里 
  用户名不为空; 

对于本届会议:

SELECT sys_context('USERENV','INSTANCE')AS实例#,sys_context('USERENV','INSTANCE_NAME')AS instance_name FROM dual

如果连接到node1

 SQL> select host_name from v$instance; instance1 

如果你连接到nodeN

 SQL> select host_name from v$instance; instanceN 

如果你想知道所有的实例和所有的节点

 SQL> select instance_name,host_name from gv$instance; 

要么

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

我想知道同样的事情,我试图想出在RAC环境中设置ORACLE_SID的方法。 我的一个DBA同事有一个scheme,他在pmon过程中提取最后一个数字作为实例编号,但只有在实例运行时才有效。 以下是我在oraenv(重命名为oraenvr)结尾处的自定义代码的解决scheme,它将抓取节点号作为正在运行的实例名称的最后一位数字,或从正在运行的ASM实例中提取最后一位数字。 只需要为非ASM实例执行此操作,因为使用ASM时,/ etc / oratab中的数据库名称也是实例名称(例如+ ASM1)。 但是,同样需要运行数据库或ASM实例,以便从中获取节点号。

 # # 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 

大段引用