« VirtualBox de Oracle11g R2 RAC #22 | トップページ | VirtualBox 4.0にアップデートした »

2011年1月 6日 (木) / Author : Hiroshi Sekiguchi.

VirtualBox de Oracle11g R2 RAC #23

VirtualBox de Oracle11g R2 RACのつづき。

さて、いよいよVirtualBox de Oracle11g R2 RACの最終回。簡単なTAFのテスト!

  1. ハードウェア構成(VMなのでVMの構成も含めて)、ソフトウェア構成など
  2. Linux (CentOS 5.5 x86_64)のインストール
  3. Openfiler2.3 x86のインストール
  4. Openfiler2.3 x86によるiSCSIボリュームの構成
  5. Oracle RACノードでのiSCSIボリュームの構成 その1その2その3
  6. Oracle所有者、Oracle Grid Infrastructureユーザの作成と関連ディレクトリの作成及び環境変数の設定
  7. Oracle向けLinuxサーバーの構成(カーネルパラメータの設定)
  8. Oracle RACノード間リモートアクセスの構成とntpの構成
    sshの構成は念のために行った、多分、実施しなくても大丈夫だと思うけど…ついでなので、ちょいと意地悪な実験をしてみた)
  9. ローカルネームサーバの構成
  10. Oracle RACノード構成ファイルの確認
  11. Oracle Automatic Storage Management(ASMLib 2.0.5 x84_64)のインストール及び構成
  12. Oracle11g R2 11.2.0.1.0 RACインストール事前作業
  13. Oracle11g R2 11.2.0.1.0 Grid Infrastractureのインストール
  14. Oracle11g R2 11.2.0.1.0 Database softwareのインストール
  15. Oracle11g R2 11.2.0.1.0 examplesのインストール
  16. Oracle Cluster databaseの作成
  17. Net Serviceの確認
  18. Oralce Grid InsfastructureとDatabase構成の確認
  19. Clusterの開始と停止の確認
  20. 簡単なTransparent Application Failover (TAF)の確認

簡単なTransparent Application Failover (TAF)の確認

MacOS X Snow LeopardにあるOracle Instant Client 10g R2 for MacOS Xのtnsnames.oraを編集し以下の定義を追加しておきました!

ORCLTAF =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = discus-rac64-scan.macdeoracle.jp)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.macdeoracle.info)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)

TAF定義の接続識別子で接続します。

discus:˜ oracle$ 
discus:˜ oracle$ sqlplus /nolog

SQL*Plus: Release 10.2.0.4.0 - Production on 木 1月 6 04:47:16 2011

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.

> conn scott/tiger@orcltaf
接続されました。
SCOTT>
SCOTT>
SCOTT> select count(*) from user_objects;

COUNT(*)
----------
0


orcl1インスタンスで、sysユーザで接続し、セッションの状態を確認してみます。

[oracle@discus164 ˜]$ 
[oracle@discus164 ˜]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on 木 1月 6 04:48:42 2011

Copyright (c) 1982, 2009, Oracle. All rights reserved.

SYS>
SYS>
SYS> conn / as sysdba
接続されました。
SYS>
SYS> select
2 instance_name
3 ,username
4 ,failover_type
5 ,failover_method
6 ,failed_over
7 from
8 gv$session sess join gv$instance inst
9 on sess.inst_id = inst.inst_id
10 where
11 sess.username = 'SCOTT'
12 /

INSTANCE_NAME USERNAME FAILOVER_TYPE FAILOVER_M FAI
---------------- ------------------------------ ------------- ---------- ---
orcl1 SCOTT SELECT BASIC NO

SYS>


SCOTTはorcl1インスタンスに接続されクエリが実行されたようですね!
failoverさせるため、orcl1インスタンスをabortで強制停止してみます。

SYS> !srvctl status database -d orcl
インスタンスorcl1はノードdiscus164で実行中です。
インスタンスorcl2はノードdiscus264で実行中です。

SYS> !srvctl stop instance -d orcl -i orcl1 -o abort
SYS>
SYS> !srvctl status database -d orcl
インスタンスorcl1はノードdiscus164で実行されていません。
インスタンスorcl2はノードdiscus264で実行中です。

SYS>
SYS> l
1 select
2 instance_name
3 ,username
4 ,failover_type
5 ,failover_method
6 ,failed_over
7 from
8 gv$session sess join gv$instance inst
9 on sess.inst_id = inst.inst_id
10 where
11* sess.username = 'SCOTT'
SYS> /
select
*
行1でエラーが発生しました。:
ORA-03135: 接続が失われました
プロセスID: 5563
セッションID: 13、シリアル番号: 25


おっと〜、sysユーザでorcl1インスタンスに接続していたのでした〜。exitしちゃいます。


SCOTTユーザで、failoverさせるためクエリを再実行します。

SCOTT> r
1* select count(*) from user_objects

COUNT(*)
----------
0

SCOTT>


インスタンス:orcl2へ接続し直し確認。お〜うまくいけてますね!
orcl1のセッションだったscottユーザのセッションがfailoverしorcl2のセッションになっています。また今回設定したTAFのモードではクエリはエラーにはならず、生存インスタンスへ透過的にfailoverされます。

[oracle@discus264 ˜]$ 
[oracle@discus264 ˜]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on 木 1月 6 04:55:48 2011

Copyright (c) 1982, 2009, Oracle. All rights reserved.

> conn / as sysdba
接続されました。
SYS> select
2 instance_name
3 ,username
4 ,failover_type
5 ,failover_method
6 ,failed_over
7 from
8 gv$session sess join gv$instance inst
9 on sess.inst_id = inst.inst_id
10 where
11 sess.username = 'SCOTT'
12 /


INSTANCE_NAME USERNAME FAILOVER_TYPE FAILOVER_M FAI
---------------- ------------------------------ ------------- ---------- ---
orcl2 SCOTT SELECT BASIC YES

SYS>


ちなみにcrsctl status resource -tで確認すると

・・・中略・・・
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE discus264
ora.LISTENER_SCAN2.lsnr
1 ONLINE ONLINE discus164
ora.LISTENER_SCAN3.lsnr
1 ONLINE ONLINE discus164
ora.discus164.vip
1 ONLINE ONLINE discus164
ora.discus264.vip
1 ONLINE ONLINE discus264
ora.oc4j
1 OFFLINE OFFLINE
ora.orcl.db
1 OFFLINE OFFLINE Instance Shutdown
2 ONLINE ONLINE discus264 Open
ora.scan1.vip
1 ONLINE ONLINE discus264
ora.scan2.vip
1 ONLINE ONLINE discus164
ora.scan3.vip
1 ONLINE ONLINE discus164
[grid@discus164 ˜]$

となっています。今回のようにデータベースインスタンスだけを停止した場合はこんな状態になるんですね。:)


ついでなので更新トランザクションも試してみましょうかね。
停止したデータベースインスタンスを起動し、scottユーザでupdate文を実行します。

discus:˜ oracle$ 
discus:˜ oracle$ sqlplus scott/tiger@orcltaf

SQL*Plus: Release 10.2.0.4.0 - Production on 木 1月 6 05:20:27 2011

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP
and Data Mining options
に接続されました。
SCOTT>
SCOTT>
SCOTT> insert into hoge values('abc');

1行が作成されました。

SCOTT>


orcl2インスタンスにsysユーザで接続して状態を確認してみます。
scottユーザはorcl1インスタンスに接続してinsert文を実行したようですね。まだ、failoverしていません。

SYS> 
SYS> l
1 select
2 instance_name
3 ,username
4 ,failover_type
5 ,failover_method
6 ,failed_over
7 from
8 gv$session sess join gv$instance inst
9 on sess.inst_id = inst.inst_id
10 where
11* sess.username = 'SCOTT'
SYS> /

INSTANCE_NAME USERNAME FAILOVER_TYPE FAILOVER_M FAI
---------------- ------------------------------ ------------- ---------- ---
orcl1 SCOTT SELECT BASIC NO


では、先ほどと同じようにorcl1インスタンスを強制停止してみます

SYS> !srvctl stop instance -d orcl -i orcl1 -o abort

SYS>
SYS> !srvctl status database -d orcl
インスタンスorcl1はノードdiscus164で実行されていません。
インスタンスorcl2はノードdiscus264で実行中です。


scottユーザで再度insert文を実行してみました。TAF特有のエラーメッセージが返されましたね。

SCOTT> r
1* insert into hoge values('abc')
insert into hoge values('abc')
*
行1でエラーが発生しました。:
ORA-25402: トランザクションをロールバックしてください。


セッションの状態を確認してみると…セッションはfailoverしています!

SYS> r
1 select
2 instance_name
3 ,username
4 ,failover_type
5 ,failover_method
6 ,failed_over
7 from
8 gv$session sess join gv$instance inst
9 on sess.inst_id = inst.inst_id
10 where
11* sess.username = 'SCOTT'

INSTANCE_NAME USERNAME FAILOVER_TYPE FAILOVER_M FAI
---------------- ------------------------------ ------------- ---------- ---
orcl2 SCOTT SELECT BASIC YES


scottユーザのトランザクションをロールバック後、リトライしてみると…

SCOTT> 
SCOTT> rollback;

ロールバックが完了しました。

SCOTT> insert into hoge values('abc');

1行が作成されました。

SCOTT>
SCOTT>

うまくいきましたね :)


ということで、VirtualBox de Oracle11g R2 RAC for Linux x86_64環境のできあがり〜。(完)






これまでのあらすじ
Mac de Oracle - 10万円未満 de RAC (11g編)#28

VirtualBox de RAC (Oracle11g R1編) #1
VirtualBox de RAC (Oracle11g R1編) #2



VirtualBox de Oracle11g R2 RAC #1
VirtualBox de Oracle11g R2 RAC #2 - 事前調査など…
VirtualBox de Oracle11g R2 RAC #3
VirtualBox de Oracle11g R2 RAC #4
VirtualBox de Oracle11g R2 RAC #5
VirtualBox de Oracle11g R2 RAC #6
VirtualBox de Oracle11g R2 RAC #7
VirtualBox de Oracle11g R2 RAC #8
VirtualBox de Oracle11g R2 RAC #9
VirtualBox de Oracle11g R2 RAC #10
VirtualBox de Oracle11g R2 RAC #11
VirtualBox de Oracle11g R2 RAC #12
VirtualBox de Oracle11g R2 RAC #13
VirtualBox de Oracle11g R2 RAC #14
VirtualBox de Oracle11g R2 RAC #15
VirtualBox de Oracle11g R2 RAC #16
VirtualBox de Oracle11g R2 RAC #17
VirtualBox de Oracle11g R2 RAC #18
VirtualBox de Oracle11g R2 RAC #19
VirtualBox de Oracle11g R2 RAC #20
VirtualBox de Oracle11g R2 RAC #21
VirtualBox de Oracle11g R2 RAC #22




VirtualBox de Oracle11g R2 RAC #16 - 番外編

| |

トラックバック


この記事へのトラックバック一覧です: VirtualBox de Oracle11g R2 RAC #23:

コメント

コメントを書く