VirtualBox de Oracle11g R2 RAC #23
VirtualBox de Oracle11g R2 RACのつづき。
さて、いよいよVirtualBox de Oracle11g R2 RACの最終回。簡単なTAFのテスト!
- ハードウェア構成(VMなのでVMの構成も含めて)、ソフトウェア構成など
- Linux (CentOS 5.5 x86_64)のインストール
- Openfiler2.3 x86のインストール
- Openfiler2.3 x86によるiSCSIボリュームの構成
- Oracle RACノードでのiSCSIボリュームの構成 その1、その2、その3
- Oracle所有者、Oracle Grid Infrastructureユーザの作成と関連ディレクトリの作成及び環境変数の設定
- Oracle向けLinuxサーバーの構成(カーネルパラメータの設定)
- Oracle RACノード間リモートアクセスの構成とntpの構成
(sshの構成は念のために行った、多分、実施しなくても大丈夫だと思うけど…ついでなので、ちょいと意地悪な実験をしてみた) - ローカルネームサーバの構成
- Oracle RACノード構成ファイルの確認
- Oracle Automatic Storage Management(ASMLib 2.0.5 x84_64)のインストール及び構成
- Oracle11g R2 11.2.0.1.0 RACインストール事前作業
- Oracle11g R2 11.2.0.1.0 Grid Infrastractureのインストール
- Oracle11g R2 11.2.0.1.0 Database softwareのインストール
- Oracle11g R2 11.2.0.1.0 examplesのインストール
- Oracle Cluster databaseの作成
- Net Serviceの確認
- Oralce Grid InsfastructureとDatabase構成の確認
- Clusterの開始と停止の確認
- 簡単な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 - 番外編
| 固定リンク | 0 | コメント (0) | トラックバック (0)
最近のコメント