「システム基盤構築のプロフェッショナル」レック・テクノロジー・コンサルティングJapanese | English

レック・テクノロジー・コンサルティング株式会社

技術ブログ

HOME > 技術ブログ > 月別アーカイブ: S.T

月別アーカイブ: S.T

Oracleが使用するメモリ領域(PGA)

初めましての方もそうでない方も宜しくお願い致します。
レック・テクノロジー・コンサルティングのエンジニア「佐々木」にございます。

前回はOracleが使用するメモリ領域の主な片割れ、SGAにつきまして説明させて頂きました。
今回、もう一方のPGAについて述べさせて頂きます。

以下、今回の内容となります。

・PGAとは?
・PGAの構成要素は?
・自動管理について

PGAとは?

 
PGA (Program Global Area)は、サーバ・プロセスが起動された際に確保されるメモリ領域です。
サーバ・プロセスは、ユーザが投げる要求を処理し、結果をユーザに戻す機能を有します。
確保されたPGAは非共有であり、対応するサーバプロセス以外からのアクセスはできません。

PGAは対応するサーバ・プロセスが終了した際に解放されます。

PGAの構成要素は?

 
PGAは、一般的に以下の図に示すような領域から構成されています。

・セッション情報
 セッションに対するユーザーの権限に関する情報です。

・カーソル状態
 現在のセッションで使用している、様々なカーソルの処理状態に関する情報です。

・スタック空間
 セッション変数(ログイン情報)を格納しています。

・ソート領域
 複雑な問い合わせを行った際に使用される領域です。
 以下、それぞれについて領域が割り当てられ、処理が実施されます。

 >>ソートベースの演算子(ORDER BY、GROUP BY等)
 パラメータSORT_AREA_SIZEでサイズ指定します。
 ソートに使用される領域であり、最終行を返したタイミングで解放されます。

 >>ハッシュ結合 
 パラメータHASH_AREA_SIZEでサイズ指定します。
 等価である値を結合に用いる際に使用される領域です。

 >>ビットマップ・マージ
 パラメータBITMAP_MERGE_AREA_SIZEでサイズ指定します。
 ビットマップ索引を含む問い合わせが実施された際、
 索引をスキャンした結果取り出されるビットマップをマージするために使用されます。

 >>ビットマップ作成
 パラメータCREATE_BITMAP_AREA_SIZEでサイズ指定します。
 ビットマップ作成時に割り当てる領域です。

自動管理について

 
リファレンスマニュアルに記載されている通り、○○_AREA_SIZEの各種パラメータは
共有サーバ構成ではない状態では推奨されておりません。

<マニュアルより抜粋>
----------------------------------------------------------------
インスタンスが共有サーバーのオプションで構成されていないかぎり、
SORT_AREA_SIZE パラメータを使用することはお薦めしません。
かわりに、PGA_AGGREGATE_TARGET を設定して、SQL 作業領域の自動サイズ指定
を使用可能にすることをお薦めします。
SORT_AREA_SIZE は、下位互換性を保つために残されます。
----------------------------------------------------------------
※共有サーバについては、別の回で扱われる予定です

PGAの自動メモリの割り当てをするには、パラメータPGA_AGGREGATE_TARGETを設定します。
PGA_AGGREGATE_TARGETを0以外の値に設定した場合、一部のメモリ領域のサイズを必要に応じてOracleが自動的に変更します。

11gからは更にこの自動管理機能が強化されてMEMORY_TARGETというパラメータが登場していますが、こちらについては以前の回をご覧ください。

まとめ

 
・PGAとは、各サーバ・プロセスが独自に保有するメモリ領域です。

・PGAは主にセッション情報/カーソル状態/スタック空間/ソート領域から構成されます。

PGA_AGGREGATE_TARGETを0以外の値に設定することで、PGAの自動管理が有効になります。

・更に11gからはSGA、PGAの自動管理パラメータとしてMEMORY_TARGETがあります。

最後に

 
以上、Oracleが使用するメモリ領域のうちPGAについて説明させて頂きました。

なお、今回をもちまして私の担当箇所は終了となります。
長々とお付き合い頂きまして、誠に恐縮でございます。

マニュアルや関連情報を漁る度に、改めて自分の不勉強を痛感しておりましたが、
逆に、だからOracleはやめられないなどと浮かぶ始末でもありました。

今後、またこういった企画があれば、参加させて頂くこともあると思われますが、
その際は、再度宜しくお願い致します。

では、失礼致します。

Oracleが使用するメモリ領域(PGA)

Oracleが使用するメモリ領域(SGA)

初めましての方もそうでない方も宜しくお願い致します。
レック・テクノロジー・コンサルティングのエンジニア「佐々木」にございます。

前回までで、Oracleより情報を確認する際の対象を説明致しました。

続きまして、Oracleが使用するメモリ領域につきまして説明させて頂きます。
なお今回はSGAについて、次回はPGAについての予定です。

以下、今回の内容となります。

・SGAとは?
・SGA関連のパラメータについて
・SGAの構成要素は?
・自動管理について

SGAとは?

 
SGA (System Global Area)は、
Oracleデータベース(以下、Oracle)起動時に確保されるメモリ領域です。
SGAは、複数のユーザからの処理要求を効率よく実行するために共有されるメモリ領域であり、
いくつかの領域で構成されています。

SGA関連のパラメータについて

 
SGAの設定に関するパラメータについて説明致します。
なお、SGAを構成する各領域のサイズを指定するパラメータについては、別項にて記述致します。

・SGA_MAX_SIZE
 SGAの最大サイズを指定します。

・SGA_TARGET
 このパラメータが指定されている場合、SGAの一部のメモリ・サイズが自動的に管理されます。
 ※SGAの自動管理については後述します。

・LOCK_SGA
 SGA全体を物理メモリーにロックします。

・PRE_PAGE_SGA
 インスタンスの起動時にSGA全体をメモリーに読み込むかどうかを指定します。

SGAの構成要素は?

 
ここではSGAを構成する各領域と、そのサイズを指定するパラメータについて説明します。
まず、SGAを構成する要素を図にすると以下のようになります。

では、各要素の詳細を説明します。

・データベース・バッファ・キャッシュ
 デフォルトのブロック・サイズであればDB_CACHE_SIZE
 デフォルト以外のブロック・サイズはDB_nK_CACHE_SIZEパラメータでサイズ指定します。
 nには2、4、8、16、32のうち、DB_CACHE_SIZEに指定したサイズ以外が指定可能です。
 
 ブロックとは、OracleにおけるI/Oの最小単位です。
 データ・ファイルおよびデータベース・バッファ・キャッシュは、指定したデータ・ブロック・サイズで
 管理されています。

 なお、データベース・バッファ・キャッシュは、データ・ファイルから読み込んだデータ・ブロックを一旦コピーしておくメモリ領域です。次回以降、同様のデータを問合せた場合に、データベース・バッファ・キャッシュから読み出せる可能性があり、問合せの高速化が期待できます。
 

・REDOログ・バッファ
 LOG_BUFFERパラメータでサイズ指定します。

 REDO ログ・バッファは、データベースに加えられた変更履歴情報を保持します。
 (INSERT/UPDATE/DELETE/CREATE/ALTER またはDROP)
 REDOログ・バッファの情報は、アクティブなREDO ログ・ファイル(またはREDO ログ・ファイルのグループ)に書き込まれます。

・共有プール
 SHARED_POOL_SIZEパラメータでサイズ指定します。
 共有プール内の主な構造として、ライブラリ・キャッシュディクショナリ・キャッシュがあります。

 ライブラリ・キャッシュは、最近実行されたSQLやPL/SQLの解析情報を格納しています。
 同様の文が実行された場合、ここに格納された情報が再利用されるため、解析に要する時間の短縮が期待できます。

 ディクショナリ・キャッシュには、解析の際に参照されたデータ・ディクショナリの情報が格納されます。
 次回以降の解析時において、同様の情報が必要になった際にここから再利用します。

・Java プール
 JAVA_POOL_SIZEパラメータでサイズ指定します。
 Java プールのメモリは、サーバ・メモリ内でJVM に含まれるセッション固有のJavaコードとデータすべてに使用されます。

・ラージ・プール
 LARGE_POOL_SIZEパラメータでサイズ指定します。
 ラージ・プールは、大量のメモリを割り当てる場合に設定されるオプションのメモリ領域です。

自動管理について

 
 SGA_TARGETを0以外の値に設定した場合一部のメモリ・サイズを必要に応じてOracleが自動的に変更します。これを自動管理機能と呼称します。

自動管理の対象を図で表すと下記のようになります。

■自動管理機能でサイズが管理される領域

   ・バッファ・キャッシュ(DB_CACHE_SIZE)
   ・共有プール(SHARED_POOL_SIZE)
   ・ラージ・プール(LARGE_POOL_SIZE)
   ・Java プール(JAVA_POOL_SIZE)
   ・Streams プール(STREAMS_POOL_SIZE)

 SGA_TARGETを0以外の値にし、上記個々のパラメータに0を指定した場合、各領域のサイズは完全にOracle任せとなります。もし個々のパラメータに値を設定した場合は、その値を最低値とし、SGA_TARGETの範囲内で自動管理されます。

 11gからは更にこの自動管理機能が強化されてMEMORY_TARGETというパラメータが登場していますが、こちらについては以前の回をご覧ください。

まとめ

 
・SGAとは、複数のユーザで共有されるメモリ領域です。
 
・SGAは主にデータベース・バッファ・キャッシュ/共有プール/Java プールから構成されます(ラージ・プールはオプションの設定です)。

SGA_TARGETを0以外の値に設定することで、SGAの自動管理が有効になります。

・更に11gからはSGA、PGAの自動管理パラメータとしてMEMORY_TARGETがあります。

最後に

 
Oracleのメモリ構造のうち、SGAについて概要を説明させて頂きました。
次回はOracleが使用するメモリ領域(PGA)について説明させて頂きます。

以上、宜しくお願い致します。

Oracleが使用するメモリ領域(SGA)

パラメータファイル(PFILEとSPFILE)

初めましての方もそうでない方も宜しくお願い致します。
レック・テクノロジー・コンサルティングのエンジニア「佐々木」にございます。

今回の内容

 
今回は、Oracleの起動時(startup)の際に読み込まれる、
「パラメータファイル」について説明させて頂きます。
以下、今回の内容となります。

・パラメータファイルとは?
・パラメータファイルについて
・パラメータファイルの作成について

パラメータファイルとは?

 
Oracleに対して「startup」コマンドが実行され、
停止状態からnomountへ移行するタイミングで、
インスタンスやデータベースの構成情報が読み込まれます。
この構成情報をパラメータで指定したファイルがパラメータファイルです。

ここまでについては、過去ブログ(Oracleのファイルと起動)でも
『謎の偉い人がインスタンス君を叩き起こした直後に読み込まれる』と説明がありますね。

今回はもう少し掘り下げていきます。

パラメータファイルについて

 

■パラメータファイルの配置

パラメータファイルは、OSにより以下のパスに配置されます。

・Windows系
%ORACLE_HOME%\database

・UNIX系
$ORACLE_HOME/dbs

※ORACLE_HOMEとは、Oracleソフトウェアのインストール先(フォルダ、ディレクトリ)です。

■パラメータの種類

・動的パラメータ
Oracle起動中にALTER SYSTEM文で変更可能なパラメータを動的パラメータといいます。
動的パラメータは、変更した値が即反映されます。

・静的パラメータ
動的パラメータに対して、Oracle起動中に変更できないパラメータを静的パラメータといいます。
以降で説明するパラメータファイルを変更しておくことで、次回起動時に変更内容が反映されます。

なお、動的か静的かについては、リファレンス・マニュアルに記載されています。

■パラメータファイルの種類

パラメータファイルは、以下の2種類が存在します。

・PFILE初期化パラメータファイル

9i以前から使用されている、テキスト形式のパラメータファイルです。
テキストエディタで(動的/静的)パラメータの変更が可能ですが、
変更した内容は次回起動時まで有効になりません。

動的パラメータで、かつ、変更を即座に反映したい場合は、ALTER SYSTEM文を実行します。

<実行例>
SQL>alter system set PGA_AGGREGATE_TARGET = 838861
※PGA_AGGREGATE_TARGETの部分に、変更したいパラメータ名を指定します。
※838861の部分に、変更後の値を指定します。

ただし、PFILE使用時のALTER SYSTEM文は、
起動中のOracleに対する一時的な変更であり、停止するとその値は消失します。
次回以降も変更後の値を適用したい場合は、前述の通り、pfileを編集しておく必要があります。

・SPFILEサーバーパラメータファイル

9i以降に追加されたバイナリ形式のパラメータファイルです。
バイナリファイルのため、PFILEのようにテキストエディタで変更することはできません。
SPFILE使用時は、動的パラメータも静的パラメータもALTER SYSTEM文で変更を行います。

<実行例>
SQL> alter system set PGA_AGGREGATE_TARGET = 838861

SPFILE使用時は、ALTER SYSTEM文を実行する際に変更を適用する範囲を指定できます

<実行例>
SQL> alter system set PGA_AGGREGATE_TARGET = 838861 scope = memory(他、spfileかboth)

・memory = 現在起動中のインスタンスにのみ適用され、再起動後は以前の値が使用される。
・spfile = 変更をspfileに書き込み、次回再起動時に適用させる。
・both  = 上記二つを併せた指定でデフォルト値現在のインスタンス及び次回再起動時の両方に適用させる。

■デフォルトのパラメータファイル名

・PFILE(初期化パラメータファイル)
init<SID>.ora

・SPFILE(サーバーパラメータファイル)
SPFILE<SID>.ora

■優先順位

前述の配置パスに複数のパラメータファイルが混在していた場合、
startup時に以下の優先順位で読み込んでいきます。

1:startupコマンド実行時に指定したファイル(startup pfile='<ファイル名>')
2:SPFILE<SID>.oraファイル
3:SPFILE.oraファイル
4:init<SID>.oraファイル

パラメータファイルの作成について

 
createコマンドを実行することにより、
・PFILEの内容をコピーしてSPFILEを作成する
SQL> create spfile from pfile;

・SPFILEの内容をコピーしてPFILEを作成する
SQL> create pfile from spfile;

ことが可能です。

※どちらの文も、PFILE/SPFILEそれぞれに指定のファイル名を追記できます。
何も指定しなかった場合は、元ファイルとして前述の配置パスのものが使用され、
デフォルトの名前で同じパスに作成、上書きされます。

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
注)実行前には、パラメータファイルのコピーを実行しておきましょう。

SPFILEが存在し、PFILEが存在しない状態で

create 「spfile」 from 「pfile」;

を実行してしまうと、SPFILEが削除されます。
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

まとめ

 
・パラメータファイルは2種類(PFILEとSPFILE)存在し、パラメータ管理の特徴が異なる
・startup時に読み込まれるインスタンスやデータベースの構成情報を指定する
・環境に存在するパラメータファイルの内容を流用し、新たなパラメータファイルを作成できる

最後に

 
startup時に読み込みされるパラメータファイルの概要につきまして説明させて頂きました。
拙い内容ではありますが、皆様のOracle生活の一助になれば幸いです。
以上、宜しくお願い致します。

パラメータファイル(PFILEとSPFILE)

今Oracleどうなってるの? 情報源その3:動的パフォーマンス・ビュー

初めましての方もそうでない方も宜しくお願い致します。
レック・テクノロジー・コンサルティングのエンジニア「佐々木」にございます。

前回は、Oracleデータベース(以下、Oracle)の構成情報等、明示的に登録や変更を行った結果、
情報が格納されるデータ・ディクショナリ・ビューについて説明致しました。

今回は、データベース稼動状況確認の際に参照する動的パフォーマンス・ビューにつきまして、以下の通り説明させて頂きます。

・動的パフォーマンス・ビューとは?
・動的パフォーマンス・ビューで確認できる情報は?
・問合せる際の注意
・覚えておきたい動的パフォーマンス・ビュー

動的パフォーマンス・ビューとは?

 
Oracleはオープン※し使用され続けている間、特別なビューに稼動に関する情報を格納します。
このビューはリアルタイムに更新されるため「動的パフォーマンス・ビュー」と呼ばれます。
※詳細は「Oracleのファイルと起動」の回を参照

動的パフォーマンス・ビューはV$○○という形式で命名され、SYSユーザーまたはSYSDBAロールが付与されているユーザーのみがアクセスできます。


動的パフォーマンス・ビューで確認できる情報は?

 
上記、あるいは名前の通りではありますが、
動的パフォーマンス・ビューからは現在のパフォーマンス状況を把握するための情報を参照できます。

例えば、
 
・現在接続しているセッションの把握


SQL> select sid, username, status, osuser, process, machine, program from v$session;

       SID USERNAME                       STATUS   OSUSER                         PROCESS      MACHINE                                                          PROGRAM
---------- ------------------------------ -------- ------------------------------ ------------ ---------------------------------------------------------------- ------------------
       148                                ACTIVE   SYSTEM                         136          QAT-3LDR461E7HW                                                  ORACLE.EXE (q000)
       150                                ACTIVE   SYSTEM                         5548         QAT-3LDR461E7HW                                                  ORACLE.EXE (q001)
       170                                ACTIVE   SYSTEM                         5880         QAT-3LDR461E7HW                                                  ORACLE.EXE (PMON)
    ・
    ・
    ・



・長時間実行されているSQLの特定

SQL> select cpu_text, sql_text from v$sql;

CPU_TIME  SQL_TEXT
------------------------------------------------------------------------------------------------
2595      select col#,intcol#,charsetid,charsetform from col$ where obj#=:1 order by intcol# asc
・
・
・



・現在までのメモリ使用状況の確認

SQL> select * from v$pgastat;

NAME                                                                  VALUE UNIT
---------------------------------------------------------------- ---------- -----
aggregate PGA target parameter                                    203423744 bytes
aggregate PGA auto target                                         173684736 bytes
global memory bound                                                40684544 bytes
total PGA inuse                                                    10507264 bytes
・
・
・
SQL> select * from v$sgastat;

POOL         NAME                            BYTES
------------ -------------------------- ----------
fixed_sga                     1250428
buffer_cache                427819008
log_buffer                    7135232
shared pool  dpslut_kfdsg                      256
shared pool  hot latch diagnostics              80
shared pool  ENQUEUE STATS                    8360
shared pool  transaction                    264528
shared pool  KCB buffer wait statistic        3352
shared pool  invalid low rba queue            1280
shared pool  KQF optimizer stats table        2396
shared pool  CCursor                       2033592
・
・
・



・REDOログファイルの状態確認

SQL> select * from v$log;

GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TI
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------
1          1          2   52428800          1 NO  INACTIVE                568387 12-02-17
2          1          3   52428800          1 NO  CURRENT                 574301 12-02-17
3          1          1   52428800          1 NO  INACTIVE                534907 12-02-17

SQL> select * from v$logfile;

GROUP# STATUS  TYPE    MEMBER

---------- ------- ------- -----------------------------------------------------------------------
3         ONLINE  J:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG
2         ONLINE  J:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG
1         ONLINE  J:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG



・現在取得されているロック情報

SQL> select * from v$lock;

ADDR     KADDR           SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
-------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
33834244 33834258        165 XR          4          0          1          0       3042          0
338342A0 338342B4        165 CF          0          0          2          0       3042          0
33834358 3383436C        165 RS         25          1          2          0       3036          0
33834410 33834424        166 RT          1          0          6          0       3036          0
3383446C 33834480        167 PW          1          0          3          0       3033          0
33834580 33834594        167 MR          1          0          4          0       3036          0
338345DC 338345F0        167 MR          2          0          4          0       3036          0
33834638 3383464C        167 MR          3          0          4          0       3036          0



等を調査する際に、動的パフォーマンス・ビューを参照します。


問合せる際の注意

 
・動的パフォーマンス・ビューでサポートされているのは、単純な問合せのみ

 スクリプトで監視する際等、結合やgroup by、ソート処理が日常的に実施されていますが、これらは正式にサポートされておりません。もし結合やgroup byでの参照する場合には、「create table xxx  as select~」の実行等でデータを複製しそちらでselectを発行することとなります。

・表示される値は、その時点までの累積値

 V$には、オープンされてから問合せるまでの稼動情報が全て反映された形で格納されています。
 そのため、ただ単発で問合せただけではパフォーマンスの変化を把握することは難しいものとなります。ピーク時間帯やあるSQLを実行したタイミング等、確認したい事象に関して前後二点でV$ビューを問合せ、その差分を確認する必要があります。

覚えておきたい動的パフォーマンス・ビュー

 
本項では、稼働状況の確認などで使用する基本的な動的パフォーマンス・ビューを紹介致します。

・v$bgprocess
 バックグラウンド・プロセスに関する情報を表示します。

・v$database
 制御ファイルからのデータベースに関する情報を表示します。

・v$datafile
 制御ファイルからのデータ・ファイル情報を表示します。

・v$lock
 現在Oracle データベースによって保持されているロック、およびロックまたは
ラッチに対する未処理の要求を表示します。

・v$pga_target_advice
 PGA_AGGREGATE_TARGET パラメータの値が変更された場合に、パフォーマンスがどの程度上下するかの予測値を表示します。

・v$pgastat
 PGA メモリー使用統計と、自動PGA メモリー・マネージャに関する統計を表示します。

・v$process
 現在アクティブなプロセスの情報を表示します。

・v$session
 カレント・セッションごとのセッション情報を表示します。

・v$session_event
 セッションごとのイベントの待機情報を表示します。

・v$session_wait
 アクティブ・セッションが待機しているリソースまたはイベントを表示します。

・v$sesstat
 ユーザー・セッションについての統計情報を表示します。

・v$sga
 システム・グローバル領域(SGA)のサマリー情報を表示します。

・v$sgastat
 システム・グローバル領域(SGA)の詳細情報を示します。

・v$sql
 共有SQL領域についての統計情報を表示します。

・v$sqlplan
 ライブラリ・キャッシュにロードされる子カーソルごとの実行計画情報を表示します。

・v$sysstat
 システム全体の統計情報を表示します。

・v$system_event
 イベントの待機の合計の情報を表示します。

・v$transaction
 システム内のアクティブ・トランザクションに関する情報を表示します。

※動的パフォーマンス・ビューの列等、詳細については「リファレンス」マニュアルに記載があります。


まとめ

 
・動的パフォーマンス・ビューには、Oracleがオープンされてからの稼動情報が累積的に格納されています。

・特定の時間帯や特定のSQL文などのパフォーマンスを把握するには、前後二点でV$ビューを問合せ、差分を取得する必要があります。

最後に

 
今回は、Oracleの稼動状況を把握する際に使用する動的パフォーマンス・ビューについてご紹介しました。最後のビュー一覧につきましては一旦眺める程度でいざ必要になった際にマニュアルと併せて詳細を確認頂くのが楽かも知れません。

なお、今回で情報源シリーズは終了となります。
次回はOracleが使用するメモリ領域(SGA)について説明させて頂きます。

以上、宜しくお願い致します。

今Oracleどうなってるの? 情報源その3:動的パフォーマンス・ビュー

今Oracleどうなってるの? 情報源その2:データ・ディクショナリ

初めましての方もそうでない方も宜しくお願い致します。
レック・テクノロジー・コンサルティングのエンジニア「佐々木」にございます。

前回は、Oracleデータベース(以下、Oracle)が稼動中に随時出力されるアラート・ログについて、概要や出力内容を説明致しました。

今回は、Oracleの構成情報確認の際に参照するデータ・ディクショナリ・ビューについて、以下の通り説明させて頂きます。

・データ・ディクショナリ・ビューとは?
・データ・ディクショナリ・ビューの種類について
・覚えておきたいデータ・ディクショナリ・ビュー

データ・ディクショナリ・ビューとは?

 
Oracleの構成やユーザ、そして権限等の設定情報は、
直接アクセスすることができないデータ・ディクショナリ表に格納されます。

直接のアクセスは禁じられていますが、Oracleの構成やユーザ情報など、格納されている情報を確認しなければならない状況には確実に遭遇します。そのような時は、データ・ディクショナリ・ビュー※を参照します。
ビューとは、あらかじめ定義された行と列の集合のみにアクセスを限定させたものです。

データ・ディクショナリ表に格納されている情報は自動的に更新されます。
しかしながら、そのタイミングが「明示的に管理コマンドを実行した」場合のみであるため、
静的データ・ディクショナリと呼ばれます。

データ・ディクショナリ・ビューの種類について

 
データ・ディクショナリ・ビューには、ほぼ同様の列について参照できる3種類のビューが基本的に存在します。
異なる点は、参照できる範囲となります。

以下、より強い権限が必要な順に説明致します。
なお、「○○」にはビュー名の一部が入ります。

・DBA_○○ビュー

データベース管理者の使用を想定した、Oracle全体の情報を表示するビューです。
参照に必要なSELECT ANY TABLE権限は、Oracle作成時にDBAロールに付与されます。
ロールとは、権限(およびロール)のグループに名前をつけたものです。
 
DBA_TABLESビューの検索例(一部抜粋)
 
SQL> show user
ユーザーは"SYS"です。
 
SQL> select owner,table_name from dba_tables order by owner,table_name;
OWNER                          TABLE_NAME
------------------------------ ------------------------------
CTXSYS                         DR$NUMBER_SEQUENCE
CTXSYS                         DR$OBJECT_ATTRIBUTE
MDSYS                          SDO_COORD_AXES
OLAPSYS                        CWM2$AWDIMCREATEACCESS
SYS                            OLAPTABLEVELTUPLES
SYSTEM                         MVIEW$_ADV_PARTITION
TESTUSER1                      TEST1
TESTUSER1                      TEST3
TESTUSER1                      TEST5
TESTUSER2                      TEST2
TESTUSER2                      TEST4
TESTUSER2                      TEST6
・・・

・ALL_○○ビュー

SELECTを実行したユーザがアクセスできる情報を全て表示します。
実行ユーザが所有者であるオブジェクトの情報に加えて、権限やロールの付与により参照が許可された別ユーザのオブジェクトについての情報も含まれます。
 
ALL_TABLESビューの検索例(一部抜粋)
 
あらかじめ、TESTUSER2のTEST2/4/6表のSELECT権限をTESTUSER1に付与しています。
 
SQL> show user
ユーザーは"TESTUSER1"です。

SQL> select owner, table_name from all_tables order by owner, table_name;

OWNER                          TABLE_NAME
------------------------------ ------------------------------
TESTUSER1                      TEST1
TESTUSER1                      TEST3
TESTUSER1                      TEST5
TESTUSER2                      TEST2
TESTUSER2                      TEST4
TESTUSER2                      TEST6

・USER_○○ビュー

実行ユーザが所有者であるオブジェクトの情報のみを表示します。
特に権限は必要ありません。
所有者が本人でしかないために、DBAやALLと異なりowner列が存在しません。
 
USER_TABLESビューの検索例(一部抜粋)
 
SQL> show user
ユーザーは"TESTUSER1"です。
 
SQL> select table_name from user_tables order by table_name;

TABLE_NAME
------------------------------
TEST1
TEST3
TEST5

※「基本的に」と書きました通り、DBA/ALL/USERの接頭辞のいずれもつかないもの、
いずれかがつかないもの、DBAのみのビューが存在します。

以下、一例を記述致します。

・接頭辞がいずれもつかないビュー
 DICTIONARY、DICT_COLUMNS 等
 
・接頭辞のいずれかがつかないビュー
 ○○_TABLESPACES 等 
 ※○○_TABLESPACESは、ALLがありません。
 
・DBAのみしかないビュー
 DBA_DATA_FILES 等

覚えておきたいデータ・ディクショナリ・ビュー

 
本項では、基本的な情報収集の際に参照すると想定されるデータ・ディクショナリ・ビューを紹介致します。

なお、DBA/ALL/USERの箇所は「○○」とします。

・○○_CONS_COLUMNS
 制約の指定された列の情報を表示します。

・○○_CONSTRAINTS
 制約の情報を表示します。

・DBA_DATA_FILES
 データファイルの情報を表示します。

・○○_DB_LINKS
 データベース・リンクの情報を表示します。

・DICTIONARY
 使用可能なデータ・ディクショナリ(・ビュー)を表示します。

・DICT_COLUMNS
 データ・ディクショナリ(・ビュー)の列の情報を表示します。

・○○_DIRECTORIES
 ディレクトリの情報を表示します。

・○○_INDEXES
 索引の情報を表示します。

・○○_IND_COLUMNS
 索引の設定された列の情報を表示します。

・○○_JOBS
 ジョブの情報を表示します。

・○○_OBJECTS
 オブジェクトの情報を表示します。

・DBA_PROFILES
 プロファイル及び制限の設定情報を表示します。

・○○_RECYCLEBIN
 ごみ箱に関する情報を表示します。

・DBA_ROLES
 存在するロールを表示します。

・○○_ROLE_PRIVS
 ユーザ及びロールに付与されたロールの情報を表示します。

・○○_ROLLBACK_SEGS
 ロールバック・セグメントの情報を表示します。

・○○_SYS_PRIVS
 ユーザ及びロールに付与されたシステム権限の情報を表示します。

・○○_TABLES
 表の情報を表示します。

・○○_TABLESPACES
 表領域の情報を表示します。

・○○_TAB_PRIVS
 付与されたオブジェクト権限の情報を表示します。

・DBA_TEMP_FILES
 一時表領域に属するTempファイルの情報を表示します。

・○○_USERS
 データベース内のユーザ情報を表示します。

・○○_VIEWS
 ビューの情報を表示します。

※データ・ディクショナリ・ビューの列等、詳細については「リファレンス」マニュアルに記載があります。

まとめ

 
・データ・ディクショナリとはOracleの構成情報を格納する表であり、
 そこから情報を取得するためにデータ・ディクショナリ・ビュー経由で参照します。

・多くのデータ・ディクショナリ・ビューは、閲覧できる範囲によって「DBA/ALL/USER」
 の3種類に分けられています。

最後に

 
Oracleの構成を確認するであろうデータ・ディクショナリ・ビューについて概要を書かせて頂きました。
最後のビュー一覧につきましては一旦眺める程度で、いざ必要になった際にマニュアルと併せて詳細を確認頂くのが楽かも知れません。

次回は動的パフォーマンス・ビューについて、です。

以上、宜しくお願い致します。

今Oracleどうなってるの? 情報源その2:データ・ディクショナリ

今Oracleどうなってるの? 情報源その1:アラート・ログ

お初にお目にかかります、レック・テクノロジー・コンサルティングのエンジニア「佐々木」にございます。

主にOracleの構築/保守/運用に携わっておりますが、
「とりあえずOracleデータベース(以下、Oracle)に接続してから考える」等、感覚的にOracleを扱う習慣が身についてしまっております。

そのため、一旦基礎的な内容を覚えなおすことを目的の一つとし、
僭越ながらコラム執筆者として名を連ねさせて頂きました。

Oracleの情報を把握しようとする際、確認するべき対象は観点により変わります。

多数ある問題切り分けの情報より、今回はアラート・ログにつきまして、以下の通り説明させて頂きます。

・アラート・ログとは?
・アラート・ログに出力される内容は?
・アラート・ログの今後

アラート・ログとは?

 
アラート・ログは、Oracleが稼動中に出力するログの一つです。
一般的には、Oracleの動作に問題が発生した際に状況把握の第一歩として確認することとなります。

アラート・ログは「alert_<SID>.log」というファイル名で作成され、
background_dump_dest初期化パラメータで指定されているパスに配置されています。


SQL> show parameter background_dump_dest

NAME                       TYPE        VALUE
-------------------------- ----------- ------------------------------------------------
background_dump_dest       string      J:\ORACLE\PRODUCT\10.2.0\ADMIN\ORCL\BDUMP

アラート・ログに出力される内容は?

 
アラート・ログは、稼動中のさまざまな情報が逐次記録されていきます。
以下、アラート・ログに出力される主な内容です。

-バージョン情報
-エラー番号及びエラーメッセージ
-トレースファイルの出力情報、出力先パス
-Oracleの起動/停止
-デフォルト値以外の設定がされている初期化パラメータ
-CREATE/ALTER/DROP文実行等、管理操作の履歴
-バックグラウンドプロセスの起動

※ただし、SQLの打ち間違いによるもの等、Oracleの稼動に影響がないエラーについては記録されません。

以下、実際のアラート・ログの内容を一部抜粋します。

Fri Feb 17 00:57:39 2012
Starting ORACLE instance (normal)
LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0
Picked latch-free SCN scheme 2
Using LOG_ARCHIVE_DEST_10 parameter default value as USE_DB_RECOVERY_FILE_DEST
Autotune of undo retention is turned on.
IMODE=BR
ILAT =18
LICENSE_MAX_USERS = 0
SYS auditing is disabled
ksdpec: called for event 13740 prior to event group initialization
Starting up ORACLE RDBMS Version: 10.2.0.1.0.
System parameters with non-default values:
processes                = 150
spfile                   = J:\ORACLE\PRODUCT\10.2.0\DB_1\DBS\SPFILEORCL.ORA
sga_target               = 612368384
control_files            = J:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL, J:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL, J:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL
db_block_size            = 8192
compatible               = 10.2.0.1.0
db_file_multiblock_read_count= 16
db_recovery_file_dest    = J:\oracle\product\10.2.0/flash_recovery_area



アラート・ログの今後

 
ここまでのアラート・ログにつきましては、実はバージョン「10gR2」までの内容で説明させて頂きました。
11gからはADR(Automatic Diagnostic Repository)機能にて、ログを一括管理するため他のログと併せてアラート・ログの出力仕様も変更されますため、以下に概要を記述致します。

・XML形式での出力

 従来のテキスト形式のアラートログに加えて、XML形式のアラートログファイルも出力されます。

・出力先の初期化パラメータの変更

 diagnostic_dest初期化パラメータで指定したパス以下に、一定のディレクトリ構造が作成され、
 そこに出力される形となります。

・コマンドラインのツールの追加

 ADRCIツールを介してアラートログを参照します。

・従来のアラートログの出力先の変更

 diagnostic_destで指定したパス以下のtraceディレクトリ内に、従来のテキスト形式のアラート・ログ
 が出力されます。
※なお、XML形式で出力されたアラートログをADRCIツールより参照した場合であっても、出力されるログの内容は10gR2以前と同様となります。

今回のまとめ

 
・アラート・ログは、Oracleの稼動状況が出力されるログです。
・11g以降は、アラート・ログの出力仕様が変わります

最後に

 
Oracleの稼動状況を確認する際に、
「何をおいてもまず見ろ、話はそれからだ」とまで一部で言われるアラート・ログについて書かせて頂きました。

次回は、静的データディクショナリ・ビューについて、です。

以上、宜しくお願い致します。

今Oracleどうなってるの? 情報源その1:アラート・ログ
資料請求・お問い合わせはこちら

▲ ページトップに戻る

技術ブログ

2020年7月
« 6月  
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
採用に関するお問い合わせはこちら