WR blog

about Enterprise IT, Oracle Database, Jazz/Fusion Music, etc…

WR blog RSS Feed
 
 
 
 

CHAPTER 01 データベースとインスタンス - プロとしてのOracleアーキテクチャ入門

私が中心になって執筆した書籍 「プロとしてのOracleアーキテクチャ入門」について、 紙幅や構成上の制約で触れることができなかった点、誤記などについて、 各章ごとに補足説明をしたいと思っています。

今回のentryでは、「SECTION I Oracleアーキテクチャ概要」の「CHAPTER 01 データベースとインスタンス」 について説明します。 この章では、OS上のファイルの集合として構成される「データベース」と、 OS上のプロセスとメモリとして実現される「インスタンス」について取り上げています。

ファイルはlsコマンド(UNIX/Linux)や、エクスプローラ(Windows)にて実際に確認できます から、「データベース」についてはイメージしやすく実感がわきやすいものと思います。

しかし、プロセスとメモリとして実現される「インスタンス」については、 理解がしにくいかもしれません。このため、書籍のP17 では、UNIX/Linux版Oracleを例にとり、 psコマンドやshow sgaコマンド(SQL*Plus)の実行例を記載することで、 理解を助けるように工夫しています。読者がより親しんでいるであろうOSのWindows版 Oracleを例にとり説明できればよかったのですが、以下の理由でUNIX/Linuxプラットフォーム での説明とせざるをえませんでした。

  • Windows版OracleではOracleのプロセス(バックグラウンドプロセス、サーバープロセス)は Oracle.exe内のスレッドとして実装されているため、容易に確認できないこと
  • Windows版Oracleでは、OracleDatabaseサービスを起動すると、デフォルトでインスタンス も自動的に起動してしまうするため、「インスタンス未起動」→「インスタンス起動」の 流れを説明しにくいため(※: 一旦インスタンスを停止してから、インスタンスを起動する必要がある。)
  • 本書の冒頭部分の、まだ「データベース」や「インスタンス」について理解ができていない 時点で、UNIX/Linux版OracleとWindows版Oracleの実装上の違い(スレッド、プロセス、OracleDatabaseサービス) について触れることは理解の点で混乱を招く可能性が高いこと

ここでは、P17の内容をWindows版Oracleを使って説明してみることにします。UNIX/Linux版OracleとWindows版Oracleのアーキテクチャの違いについて理解の度合いを確認してみてください。

コマンドプロンプトでの実行例を以下に示します。

C:\>net start OracleServiceO111                                           (1)
OracleServiceO111 サービスを開始します................
OracleServiceO111 サービスは正常に開始されました。

C:\>sqlplus /nolog

SQL*Plus: Release 11.1.0.6.0 - Production on 金 11月 7 09:37:02 2008

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

SQL> connect / as sysdba
接続されました。
SQL>
SQL>
SQL> shutdown immediate                                                   (2)
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> host pslist -x oracle                                                (3)

pslist v1.28 - Sysinternals PsList
Copyright c 2000-2004 Mark Russinovich
Sysinternals

Process and thread information for host0:

Name                Pid Pri Thd  Hnd   Priv        CPU Time    Elapsed Time
oracle              712   8   5  151  27592     0:00:15.390     0:01:32.843
                      VM      WS    Priv Priv Pk   Faults NonP Page
                  188172   50300   27592  264788   111314    7  350
 Tid Pri    Cswtch            State     User Time   Kernel Time   Elapsed Time
3988   9       128   Wait:Executive  0:00:00.000   0:00:00.078    0:01:32.843
3232   9       136     Wait:UserReq  0:00:00.000   0:00:00.015    0:01:32.718
3412   9        15     Wait:UserReq  0:00:00.000   0:00:00.000    0:01:32.703
3880  11        15       Wait:Queue  0:00:00.000   0:00:00.000    0:01:32.281
 968   9       646     Wait:UserReq  0:00:00.203   0:00:00.015    0:00:21.484


SQL> startup                                                              (4)
ORACLEインスタンスが起動しました。

Total System Global Area  313860096 bytes
Fixed Size                  1332892 bytes
Variable Size             197134692 bytes
Database Buffers          109051904 bytes
Redo Buffers                6340608 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL> host pslist -x oracle                                                (5)

pslist v1.28 - Sysinternals PsList
Copyright c 2000-2004 Mark Russinovich
Sysinternals

Process and thread information for host0:

Name                Pid Pri Thd  Hnd   Priv        CPU Time    Elapsed Time
oracle              712   8  27  558 256752     0:00:26.750     0:02:27.093
                      VM      WS    Priv Priv Pk   Faults NonP Page
                  562764  211136  256752  266160   193572   53  351
 Tid Pri    Cswtch            State     User Time   Kernel Time   Elapsed Time
3988   9       128   Wait:Executive  0:00:00.000   0:00:00.078    0:02:27.093
3232   9       136     Wait:UserReq  0:00:00.000   0:00:00.015    0:02:26.968
3412   9        22     Wait:UserReq  0:00:00.000   0:00:00.000    0:02:26.953
3880  11        18       Wait:Queue  0:00:00.000   0:00:00.000    0:02:26.531
3844   8       126     Wait:UserReq  0:00:00.000   0:00:00.000    0:00:37.265
3784  15      1870   Wait:DelayExec  0:00:00.000   0:00:00.000    0:00:37.250
3188   8        97     Wait:UserReq  0:00:00.000   0:00:00.000    0:00:37.250
2888   8        95     Wait:UserReq  0:00:00.015   0:00:00.015    0:00:37.218
1356   8       111     Wait:UserReq  0:00:00.000   0:00:00.015    0:00:37.218
2520   8       118     Wait:UserReq  0:00:00.015   0:00:00.000    0:00:37.203
1396   9       219     Wait:UserReq  0:00:00.078   0:00:00.015    0:00:37.203
1260   8       145     Wait:UserReq  0:00:00.015   0:00:00.000    0:00:37.187
2928   9       255     Wait:UserReq  0:00:00.000   0:00:00.015    0:00:37.187
1716   9       129     Wait:UserReq  0:00:00.000   0:00:00.000    0:00:37.171
3804   8       514     Wait:UserReq  0:00:00.062   0:00:00.046    0:00:37.171
1908   8        87     Wait:UserReq  0:00:00.000   0:00:00.015    0:00:37.171
2132   8      1986     Wait:UserReq  0:00:00.984   0:00:00.015    0:00:37.156
3312   8       103     Wait:UserReq  0:00:00.000   0:00:00.015    0:00:37.156
3240   8       113     Wait:UserReq  0:00:00.000   0:00:00.000    0:00:37.140
2856   8        91     Wait:UserReq  0:00:00.000   0:00:00.000    0:00:37.140
2640   8     12670     Wait:UserReq  0:00:06.640   0:00:00.390    0:00:28.734
2796   8       137     Wait:UserReq  0:00:00.015   0:00:00.000    0:00:26.890
1508   8       106     Wait:UserReq  0:00:00.000   0:00:00.000    0:00:26.875
2668   8        72     Wait:UserReq  0:00:00.015   0:00:00.031    0:00:25.562
1624   8        35     Wait:UserReq  0:00:00.000   0:00:00.015    0:00:23.875
 796   8        54     Wait:UserReq  0:00:00.015   0:00:00.000    0:00:15.437
3744   8        33     Wait:UserReq  0:00:00.015   0:00:00.000    0:00:15.421

SQL> select spid, program from v$process;

SPID                     PROGRAM
------------------------ ---------------------
                         PSEUDO
3844                     ORACLE.EXE (PMON)
3784                     ORACLE.EXE (VKTM)
3188                     ORACLE.EXE (DIAG)
2888                     ORACLE.EXE (DBRM)
1356                     ORACLE.EXE (PSP0)
1396                     ORACLE.EXE (MMAN)
2520                     ORACLE.EXE (DIA0)
1260                     ORACLE.EXE (DBW0)
2928                     ORACLE.EXE (LGWR)
1716                     ORACLE.EXE (CKPT)
3804                     ORACLE.EXE (SMON)
1908                     ORACLE.EXE (RECO)
2132                     ORACLE.EXE (MMON)
3312                     ORACLE.EXE (MMNL)
3240                     ORACLE.EXE (D000)
2856                     ORACLE.EXE (S000)
2796                     ORACLE.EXE (FBDA)
3476                     ORACLE.EXE (CJQ0)
1508                     ORACLE.EXE (SMCO)
2668                     ORACLE.EXE (QMNC)
2764                     ORACLE.EXE (W000)
796                      ORACLE.EXE (q000)
3744                     ORACLE.EXE (q001)
1704                     ORACLE.EXE (SHAD)

25行が選択されました。

(1)では、Oracleインスタンスに対応したWindowsサービス OracleDatabaseO111を起動しています。 この実行例ではインスタンスのORACLE_SIDはO111です。これでOracle.exeが起動します。

(2)では、OracleDatabaseサービス起動時に自動的にインスタンスが起動するため、インスタンスを一旦 shutdownしています。

(3) では、pslistを使って、Oracle.exe内のスレッドを確認しています。ここでは、5つのスレッドが 起動していることがわかります。 なお、pslistはMicrosoft(旧sysinternal)から公開されているプロセス、スレッドの情報が確認 できるコマンドラインツールです。

pslistを使用するには、上記URLからファイルをダウンロード、展開して、 PATH環境変数を設定する必要があります。

(4) では、インスタンスを起動しています。 (5) では、pslistを使って、Oracle.exe内のスレッドを再度確認しています。ここでは、27つのスレッドが 起動していることがわかります。(3)のインスタンス停止時よりも起動しているスレッド数が増えて いることがわかるでしょう。これらのスレッドがバックグラウンドプロセスに相当します。 pslistのTID(スレッドID)は、V$PROCESSから確認できるSPIDに対応します。

(6) では、v$process の実行結果を示しています。pslistの実行結果と照らし合わせてみてください。

インスタンスとプロセスから構成されるUNIX/Linux版Oracleと異なり、 サービスやスレッドも関連するWindows版Oracleは、理解しにくいかもしれません。 実はこの理解のしにくさが、書籍でUNIX/Linuxプラットフォーム上での Oracleを例にとりpsコマンドやshow sgaコマンド(SQL*Plus)の実行例を用いて説明した理由でも あります。

なお、UNIX/Linux版OracleとWindows版Oracleのアーキテクチャの違いについては、書籍 P106でも触れていますので、是非参考にしてください。 また、マニュアル『Oracle Databaseプラットフォーム・ガイド 11gリリース1(11.1) for Microsoft Windows E05885-03』 の『1 WindowsでのOracle Databaseアーキテクチャ』、『D Oracle DatabaseのWindowsとUNIXでの相違点』にも説明があります。必要に応じて確認してみてください。

Leave a Reply

Profile

Jazz/Fusion Musicを愛するIT技術者です。 現在、Oracle Database 関連の仕事をしています。

保有資格

  • Oracle Master 10g Platinum
  • Oracle Master 11g Gold
  • Oracle Master Expert 10g RAC
  • Oracle Master Expert Oracle on Linux
  • LPIC level2
  • 日商簿記3級

連絡先

ご連絡は、wrcsus4 _at_ gmail _dot_ com にお願いいたします。

 

November 2008
M T W T F S S
« Oct   Jan »
 12
3456789
10111213141516
17181920212223
24252627282930

Recent Posts

Recent Comments

Tags

Categories

Pages

Archives

Meta