このブログを検索

ラベル RAC の投稿を表示しています。 すべての投稿を表示
ラベル RAC の投稿を表示しています。 すべての投稿を表示

2011年8月22日月曜日

REDOログファイルのサイズ変更をする

REDOログファイルのサイズ変更の基本的な考え方は次の通りです。
・REDOログファイルのサイズ変更は不可
・変更は、新規追加(別ファイル)し、不要のものを削除する
・削除は、STATUS=ACTIVEだとできない
・削除は、内容がアーカイブREDOファイルとして出力されていないとできない
・OMF(Oracle Managed Files)を未使用の場合、物理削除も必要
・RACの場合、インスタンス単位でサイズや個数を変えることはできる

まず、REDOログファイルを確認します。
   THREAD#     GROUP#     MBYTES STATUS     MEMBER
---------- ---------- ---------- ---------- ------------------------------
         1          1       1024 INACTIVE   +DATA/redo/redo111.dbf
         1          1       1024 INACTIVE   +LOG/redo/redo112.dbf
         1          2       1024 ACTIVE     +DATA/redo/redo121.dbf
         1          2       1024 ACTIVE     +LOG/redo/redo122.dbf
         1          3       1024 CURRENT    +DATA/redo/redo131.dbf
         1          3       1024 CURRENT    +LOG/redo/redo132.dbf
         2          4       1024 INACTIVE   +LOG/redo/redo212.dbf
         2          4       1024 INACTIVE   +DATA/redo/redo211.dbf
         2          5       1024 ACTIVE     +LOG/redo/redo222.dbf
         2          5       1024 ACTIVE     +DATA/redo/redo221.dbf
         2          6       1024 CURRENT    +LOG/redo/redo232.dbf
         2          6       1024 CURRENT    +DATA/redo/redo231.dbf

次に、新規REDOログファイルを追加します。
ここでは、2ノードRACを想定し、1GB→2GBのサイズ変更を行います。
$ sqlplus sys as sysdba
SQL> ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 7 ('+DATA/redo/redo141.dbf', '+LOG/redo/redo142.dbf') SIZE 2G;
SQL> ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 8 ('+DATA/redo/redo151.dbf', '+LOG/redo/redo152.dbf') SIZE 2G;
SQL> ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 9 ('+DATA/redo/redo161.dbf', '+LOG/redo/redo162.dbf') SIZE 2G;

SQL> ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 10 ('+DATA/redo/redo241.dbf', '+LOG/redo/redo242.dbf') SIZE 2G;
SQL> ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 11 ('+DATA/redo/redo251.dbf', '+LOG/redo/redo252.dbf') SIZE 2G;
SQL> ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 12 ('+DATA/redo/redo261.dbf', '+LOG/redo/redo262.dbf') SIZE 2G;

追加したら、REDOログファイルを強制的にローテートし、追加したREDOログがCURRENTになるまで繰り返します。
REDOログファイルはノードごとにあるので各ノードで実行します。
[oracle@sssdb1 ~]$ sqlplus sys as sysdba
SQL> alter system switch logfile;

[oracle@sssdb1 ~]$ sqlplus sys as sysdba
SQL> alter system switch logfile;

削除したいREDOログファイルをINACTIVEにし、アーカイブREDOログファイルを出力します。
SQL> ALTER SYSTEM CHECKPOINT;

不要になったREDOログファイルを削除します。
SQL> ALTER DATABASE DROP LOGFILE GROUP 1;
SQL> ALTER DATABASE DROP LOGFILE GROUP 2;
SQL> ALTER DATABASE DROP LOGFILE GROUP 3;

SQL> ALTER DATABASE DROP LOGFILE GROUP 4;
SQL> ALTER DATABASE DROP LOGFILE GROUP 5;
SQL> ALTER DATABASE DROP LOGFILE GROUP 6;

OMF(Oracle Managed Files)を利用していない場合、物理ファイルの削除をします。
この例では、ASMのファイルを削除します。
$ export ORACLE_SID=+sss011
$ asmcmd
ASMCMD> cd DATA/REDO
ASMCMD> rm REDO111.DBF
ASMCMD> rm REDO122.DBF
ASMCMD> rm REDO133.DBF
ASMCMD> rm REDO211.DBF
ASMCMD> rm REDO222.DBF
ASMCMD> rm REDO233.DBF

ASMCMD> cd ../../LOG/REDO
ASMCMD> rm REDO112.DBF
ASMCMD> rm REDO122.DBF
ASMCMD> rm REDO132.DBF
ASMCMD> rm REDO212.DBF
ASMCMD> rm REDO222.DBF
ASMCMD> rm REDO233.DBF

REDOログファイルを一覧表示する

REDOログファイルを一覧表示します。
set pages 10000
set lines 120
COL MEMBER FORMAT A30
COL STATUS FORMAT A10
SELECT LOG.THREAD#,LOG.GROUP#,
    LOG.BYTES/1024/1024 AS MBYTES,
    LOG.STATUS,LOG.ARCHIVED,LOGFILE.MEMBER 
 FROM   V$LOG LOG,V$LOGFILE LOGFILE
 WHERE LOG.GROUP# = LOGFILE.GROUP#
 ORDER BY THREAD#,GROUP#;
実行結果は次の通りです。
この例では2ノードRAC、3グループ、各1GBです。

STATUS=CURRECTが現在使用中のREDOログファイルです。
ACTIVEが使ったことがあるがアーカイブされていないもの、INACTIVEはアーカイブ済のものです。
UNUSEDはREDOログファイル追加後などまったく未使用のものです。

THREAD#     GROUP#     MBYTES STATUS     MEMBER
---------- ---------- ---------- ---------- ------------------------------
         1          1       1024 INACTIVE   +DATA/redo/redo111.dbf
         1          1       1024 INACTIVE   +LOG/redo/redo112.dbf
         1          2       1024 ACTIVE     +DATA/redo/redo121.dbf
         1          2       1024 ACTIVE     +LOG/redo/redo122.dbf
         1          3       1024 CURRENT    +DATA/redo/redo131.dbf
         1          3       1024 CURRENT    +LOG/redo/redo132.dbf
         2          4       1024 INACTIVE   +LOG/redo/redo212.dbf
         2          4       1024 INACTIVE   +DATA/redo/redo211.dbf
         2          5       1024 ACTIVE     +LOG/redo/redo222.dbf
         2          5       1024 ACTIVE     +DATA/redo/redo221.dbf
         2          6       1024 CURRENT    +LOG/redo/redo232.dbf
         2          6       1024 CURRENT    +DATA/redo/redo231.dbf

2011年6月14日火曜日

シングルDBでサービスを追加する

Oracle RACではサービスという論理的な接続先を作ることにより、ノードごとに負荷特性の分離をすることができます。
例えば、APPサービスでWebサイトの処理、BATCHサービスで夜間バッチの処理、などです。
※物理的なノードとはレイヤが少し違います。

シングルDBでもサービスを追加することができます。
用途としては次のようなことが考えられますが、たぶん他にもあるでしょう。
(専用サーバ接続と共用サーバ接続を使い分けるとかできるんでしょうか)
・AWR(STATSPACKのようなもの)をサービスごとに分ける(EEなのでやったことありません)
・再インストールしたら、インスタンス名を間違えた

以前、やってしまったのが2番目。
サービス名は、デフォルトではインスタンス名を引き継ぎます。
そのため、サービス名が変わってしまったためクライアントから接続エラーが発生しました。
クライアント側は変更したくないとの要望があったため、サービス名を追加しました。

手順は次にようにします。

まずはサービス名を確認します。
SQL> show parameter service_name
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      SSS01DB2

次に、サービス名を追加します。
今回は、間違えてしまったサービス名は残したまま、OODEVを追加します。
ALTER SYSTEM SET service_names='SSS01DB2','OODEV' SCOPE=BOTH;

追加されたかどうか確認します。
SQL> show parameter service_name

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      SSS01DB2, OODEV


余談ですが、RACでのサービス追加コマンドsrvctl start serviceは、内部的にalter system setしているだけです。
(アラートログを見るとわかります)

2011年4月27日水曜日

Oracle RAC Standard Edition(SE)を使ってみて気づいたこと

※個人の感想に基づいています・・・

まずは、ストレージ共有型クラスタであること。
MySQL Clusterとは違い、データを1箇所に保管するストレージ共有型です。
ストレージの冗長化をストレージ側でしなければならないのが、最大の弱点だと思ってます。
代替ストレージ機を用意しておけばダウンタイムを減らせますが、ハードウェア交換が必要なので1時間単位のダウンは避けられません。
そもそもSEを買うような案件ではそこまで予算がありません。
EEはライセンスおよびサポート費用だけで価格がひと桁変わりますからね・・・。

スタンバイDBにレプリケーションしようにも、Enterprise Edition(EE)でなければできません。
増分バックアップやアーカイブREDOログファイルバックアップをするにしても、分単位でのバックアップは現実的ではないと思います


次、ライセンスのCPU制限
SE RACでは、物理CPUの最大数が4つまでです。ライセンス
いまどき1CPUのサーバはあまり使わないので、2CPUだとノードの最大数が2つまで。
これが何を意味するかというと、failoverが運任せになりうることです。

RACは、ノード間の通信可否結果を投票ディスクというファイルとして共有型ストレージに格納しています。
クラスタソフトウェアは、この投票ディスクを元に多数決で孤立=ネットワーク障害サーバを検知します。
ノードが2台だと多数決にならずどちらか一方をOS再起動します。
そのため、正常稼動しているノードを再起動してしまう可能性があります。

RACは3ノード以上で使うのがお薦めです。


最後に、商用であること。
SEだけの話ではありませんが、購入してみないとサポートを受けられない、購入してみないとどんな特性の製品かわからないことです。
SQL文の数が多すぎるとラッチ待機のせいでSGAを増やせば増やすほどパフォーマンスが落ちる、など買う前にはわからなかったことが多いです。


まとめると、EEでない限りOracle RACは使いたくないな、と。
今の案件、MySQLに移設したいなー。

2011年4月4日月曜日

RACのサービス名一覧フル表示する

RACのサービス状況は、crs_statというコマンドで表示することが出来ます。
オプション-tでサマリ一覧表示ができますが、長い文字列は途中で切れてしまいます。

そこで、パイプなどを使ってサービス名をフル表示することができます。
$ crs_stat | awk '{print $1 "="  $4; }' RS="" FS="\n" | awk '{ printf "%-50s%s\n",$2,$4}' FS="="
ora.sss01.SSS01DBBATCH.cs                         ONLINE on sssdb1
ora.sss01.SSS01DBBATCH.sss011.srv                 ONLINE on sssdb1
ora.sss01.SSS01DBBATCH.sss012.srv                 ONLINE on sssdb2
ora.sss01.SSS01DBBATCH1.cs                        ONLINE on sssdb1
ora.sss01.SSS01DBBATCH1.sss011.srv                ONLINE on sssdb1
ora.sss01.SSS01DBBATCH2.cs                        ONLINE on sssdb2
ora.sss01.SSS01DBBATCH2.sss012.srv                ONLINE on sssdb2
ora.sss01.SSS01DBE.cs                             ONLINE on sssdb1
ora.sss01.SSS01DBE.sss011.srv                     ONLINE on sssdb1
ora.sss01.SSS01DBE.sss012.srv                     ONLINE on sssdb2
ora.sss01.SSS01DBI.cs                             ONLINE on sssdb1