2012年12月19日水曜日

蘇るパラメータファイルその1

サーバー・パラメータ・ファイル(SPFILE)って、
SQL文で動的にパラメータを変えられて、便利です。
今だとデフォルトだとSPFILE使うようになってますよね。
RAC環境だとASM上に配置して、複数ノードで1つのファイルを
使用したりします。
(各ノードにあると、運用管理がちょっと煩雑だったりしますもんね)

今回はそんなSPFILE絡みで、ビックリしたことがあったので、
それを書きたいと思います。(僕だけですかね?びっくりするの)
いつも通り役には立ちません。

検証環境
[OS]
----
Microsoft Windows Server 2003 R2
Enterprise x64 Edition
Service Pack 2
----
[Oracle&GRID]
----
11.2.0.2.0 - 64bit
----

[その他]
----
2ノードRAC、管理者型管理
----

パラメータファイルについて、
OracleR Real Application Clustersインストレーション・ガイド11g リリース2 (11.2) for Microsoft Windows x64 (64-Bit)に
以下の記載があります。


5.4 Oracle RACでのパラメータ・ファイルの検索順序
Oracle RACは、次の順序でパラメータ・ファイルを検索します。
%ORACLE_HOME%\database\spfile%ORACLE_SID%.ora
%ORACLE_HOME%\database\spfile.ora
%ORACLE_HOME%\database\init%ORACLE_SID%.ora

なるほど。
環境を見てみます。

SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      +DATA/strike01/spfilestrike01.ora

上記のどれにも合致しません。
OS上を見てみます。

C:\>dir D:\app\orauser\product\11.2.0\dbhome_1\database\sp*

ファイルが見つかりません

C:\>dir D:\app\orauser\product\11.2.0\dbhome_1\database\init*

2012/12/18  14:04                90 initstrike011.ora

ありました。どうやら3番目のinitファイルは読み込みそうです。
中身を見てます。

C:\>notepad D:\app\orauser\product\11.2.0\dbhome_1\database\initstrike011.ora

SPFILE='+DATA/strike01/spfilestrike01.ora'

この一行だけ書いてあります。
なるほど、旧来の初期化パラメータのファイルであるinit%ORACLE_SID%.oraファイルを読み込んで、
ASM上のSPFILEを読み込んでいると。


そもそも、このinitstrike011.oraとその中身はいつ作られているのでしょうか?
データベース作成スクリプトの1つである、
%ORACLE_BASE%\admin\[データベース名]\scripts\[データベース名].sqlを見てみると、

以下の部分で作っていることが分かります。
host "echo SPFILE='+DATA/strike01/spfilestrike01.ora' > D:\app\orauser\product\11.2.0\dbhome_1\database\initstrike011.ora"


ところで、Oracle DB起動時のnomount状態では、パラメータファイルの内容を読み込み、
メモリ割り当てやプロセスの生成などを行います。

つまり、パラメータファイルがないと
「Oracle DBは起動出来ない。」
やってみます。

SQL> conn /as sysdba
接続されました。
SQL> shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> exit
接続が切断されました。

C:\>del D:\app\orauser\product\11.2.0\dbhome_1\database\initstrike011.ora

C:\>dir D:\app\orauser\product\11.2.0\dbhome_1\database\initstrike011.ora

ファイルが見つかりません

C:\>sqlplus sys/oracle as sysdba

アイドル・インスタンスに接続しました。

SQL> startup
ORA-01078: failure in processing system parameters
LRM-00109: ?p?????[?^?E?t?@?C??'D:\APP\ORAUSER\PRODUCT\11.2.0\DBHOME_1\DATABASE\INITSTRIKE011.ORA'???I?[?v?????????????B
SQL> exit
切断しました。

うん。上がらない。
ファイルないし。

あ、そうそう、RACのリソース起動停止は
srvctlコマンドを使うのが一般的だよな。。

C:\>srvctl start instance -d strike01 -i strike011

C:\>


あれ?普通にプロンプト返ってきた。。

C:\>crsctl stat res ora.strike01.db -t
NAME           TARGET  STATE        SERVER                   STATE_DETAILS

---------------------------------------------------------------------------
Cluster Resources
---------------------------------------------------------------------------

ora.strike01.db
      1        ONLINE  ONLINE       strike-1                 Open

      2        ONLINE  ONLINE       strike-2                 Open

ん????Open?


C:\>sqlplus sys/oracle as sysdba
接続されました。
SQL> select instance_name,status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
strike011        OPEN

SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      +DATA/strike01/spfilestrike01.ora


SQL> exit
接続が切断されました。
OPENしてて、ASM上のSPFILEを読んでるだと・・・

でも、マニュアルには、、、、
=====
Oracle RACは、次の順序でパラメータ・ファイルを検索します。
%ORACLE_HOME%\database\spfile%ORACLE_SID%.ora
%ORACLE_HOME%\database\spfile.ora
%ORACLE_HOME%\database\init%ORACLE_SID%.ora

んーなんだろう。。

C:\>dir D:\app\orauser\product\11.2.0\dbhome_1\database\initstrike011.ora

2012/12/19  18:27                67 initstrike011.ora
               

!!!!!


C:\>notepad D:\app\orauser\product\11.2.0\dbhome_1\database\initstrike011.ora

SPFILE='+DATA/strike01/spfilestrike01.ora'  # line added by Agent


# line added by Agentだと・・・

つづきます。。

0 件のコメント:

コメントを投稿