web-dev-qa-db-ja.com

Oracle RACのどのノードに接続しているのかを知るにはどうすればよいですか?

Oracle 11g R2システムのどのRACノードに接続しているかを簡単に判断する方法はありますか?いくつかのフェイルオーバーテストを実行しようとしています。アプリケーションが1つのノードに正しく接続されていることを確認します。このノードのシャットダウン時に、ノードはフロントエンドでの顕著な遅延なしに別のノードにスムーズに移行します。多分それは私たちがTAFを利用していることを言及する価値があります。

私はこれにEnterprise Managerを使用することを検討しましたが、emを実行している1つのノードに接続していて、このノードがダウンした場合、ノードの接続ステータスを監視する機会が実際にはないでしょう。

5
Stephan

現在のセッションは?

gv $ instanceからHost_nameを選択します。ここで、instance_number = userenv( 'instance');

すべてのセッション:

からi.Host_name、s.usernameを選択します。gv$ session s join 
 gv $ instance i on(i.inst_id = s.inst_id)
 where 
 username nullではありません。
4
HampusLi

現在のセッション:

SELECT sys_context( 'USERENV'、 'INSTANCE')AS instance#、sys_context( 'USERENV'、 'INSTANCE_NAME')AS instance_name FROM dual

5
Hakan

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
2
aitor
SELECT sid,serial#, inst_id,username,event,ownerid
    FROM GV$SESSION
    WHERE sid=(select sid from v$mystat where rownum=1);
0
aitor

RAC環境でOracle_SIDを設定する方法を思いついたのと同じことを考えていました。私の仲間のDBAの1人は、pmonプロセスを見て、最後の数字をインスタンス番号として抽出するというスキームを持っていましたが、これはインスタンスが実行されている場合にのみ機能しました。以下は、oraenvの末尾にあるカスタムコードとしての私のソリューションです(oraenvrに名前が変更されています)。これは、実行中のインスタンス名の最後の数字としてノード番号を取得するか、実行中のASMインスタンスから最後の数字を抽出します。 ASMでは、/ etc/oratab内のデータベース名もインスタンス名(+ ASM1など)であるため、ASM以外のインスタンスに対してのみこれを行う必要があります。ただし、ここでも、データベースまたは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

ブロッククォート

0
TexasKev