TOPへ ID:050057
 

 Oracle FAQ集 


 
+オブジェクト
  ・HWM(High Water mark、高水位標)とは?
  ・パーティションとは?

+監視

  ログファイルの監視

+トランザクション
  ・
データベースにおけるロック制御の必要性
+パフォーマンス
  ・パフォーマンス遅延時の初動調査方法

 



分類 FAQ
オブジェクト HWM(High Water mark、高水位標)とは?
説明
Oracleは、セグメントヘッダーにHWM(High Water Mark:高水位標)と呼ばれる「過去に表のブロックをどこまで使用したかを示すポインタ」を持つ。データの有無に関わらず、全表操作時にはHWMまでのすべてのブロックを読み込む。例えば、年度末処理などでデータ量が一時的に大きく増加し、その後少ないデータ量に戻る表を考える。このような表は、データが削除され件数が少なくなった後も、全表操作時にはHWMまでのすべてのブロックが読み込まれてしまい、処理が遅くなる。HWMは、表の再作成、もしくはTRUNCATE処理を行わない限り、再設定されない。
 


分類 FAQ
オブジェクト パーティションとは?
説明
パーティションとは、管理しやすくするために大規模な表や索引を分割(=パーティション化)したものである。パーティションの種類を以下に挙げる。

 ・
レンジパーティション:指定した範囲に従ってパーティション化する
 ・
ハッシュパーティション:ハッシュ関数に従ってパーティション化する
 ・
コンポジットパーティション:データを範囲別にパーティション化し、さらにハッシュ関数でサブパーティションに分割する
 ・
リストパーティション:指定したデータに従ってパーティション化する。
 


分類 FAQ
監視 ログファイルの監視
説明
データベースのログファイルには、様々な情報が書き込まれる。例えば、「データベースが起動された」といったメッセージ的なものや、致命的な内部エラーなどが出力される。そのため、定期的にログファイルを監視することで、データベースの障害をすばやく検知し、適切に対処できるようになる。

●監視すべきログファイルと監視キーワード
ログファイル パス 物理ファイル名 監視キーワード 出力内容
アラートログファイル %ORACLE_BASE%\admin\%ORACLE_SID%\bdump alert_%ORACLE_SID%.log ORA- ・発生した全ての内部エラー(ORA-600)、ブロック破損エラー、デッドロックエラー
・データベースの起動/停止、ALTER/CREATE/DROP文などの管理操作
・データベース起動時のデフォルト値でない初期化パラメータ
・共有サーバとディスパッチャプロセスの機能に関係するメッセージとエラー
・マテリアライズドビューの自動リフレッシュ中に発生したエラー
トレースファイル %ORACLE_BASE%\admin\%ORACLE_SID%\bdump %ORACLE_SID%_プロセス名_プロセスID.trc

※SIDがV920、プロセスIDが1000のLGWRプロセスのトレースファイルは、「v920_lgwr_1000.trc」となる。ただし、バージョンやプラットフォームにより異なる。
ORA- ・エラーの詳細やダンプなどの情報
%ORACLE_BASE%\admin\%ORACLE_SID%\udump
%ORACLE_BASE%\admin\%ORACLE_SID%\cdump %ORACLE_SID%CORE.log ORA- ・エラーの詳細やダンプなどの情報
リスナーログ %ORACLE_HOME%\network\log listener.log TNS-
ORA-
・全てのクライアントの接続要求
・リスナー制御ユーティリティによって発行されたコマンド
Net Servicesのクライアントログ カレントディレクトリ sqlnet.log TNS-
ORA-
・Net Services経由で接続時のエラー

データベースに関連するエラーメッセージ数は非常に多く、その内容は多岐にわたる。その中でも、データベースの正常稼動を妨げるようなエラーメッセージや発生頻度の高いエラーメッセージは、DBAにおいてできる限り覚えておくべきである。

●発生頻度の高いエラーメッセージ
ログファイル カテゴリー エラー番号 エラー内容 対処方法
アラートログファイル
トレースファイル
領域不足 ORA-01536 表領域stringに対して割り当てられた領域を使い果たしました 不要な表や索引を削除するか、さらに領域を割り当てる
ORA-01658 表領域stringにセグメント用のINITIALエクステントを作成できません 表領域へ領域を追加するか、INITIAL値を小さくして作成する
ORA-01659 stringを超えるMINEXTENTSを表領域stringに割当てできません 表領域へ領域を追加するか、NEXT、MINEXTENTS,OCTINCREASEを小さくして作成する
ORA-01683 索引string.stringのパーティションstringを拡張できません 表領域へ領域を追加する
エクステント ORA-01630 一時セグメントで最大エクステント数stringに達しました
(表領域string)
一時表領域のMAXEXTENTSを大きくするか、表領域のPCTINCREASEを大きくする
ORA-01631 最大エクステント数stringに達しました(表string) MAXEXTENTSを大きくするか、INITIAL、NEXTなどを変更して再作成する
ORA-01632 最大エクステント数stringに達しました(索引string) MAXEXTENTSを大きくするか、INITIAL、NEXTなどを変更して再作成する
ORA-01652 一時セグメントを拡張できません(string分、表領域string) 領域を追加するか、ディスク領域を確保する
ORA-01684 最大エクステント数(表string.string パーティションstring) システムの最大値よりも小さい場合、大きくして作成するか、NEXT、MINEXTENTS、PCTINCREASEを小さくして作成する
ORA-01685 最大エクステント数(索引string.string パーティション string) システムの最大値よりも小さい場合、大きくして作成するか、NEXT、MINEXTENTS、PCTINCREASEを小さくして作成する
リソース ORA-00018 最大セッション数を超えました 初期化パラメータSESSIONを増やす
ORA-00020 最大プロセス数stringを超えました 初期化パラメータPROCESSESを増やす
ロールバックセグメント ORA-01555 スナップショットが古すぎます UNDO表領域を使用している場合、初期化パラメータUNDO_RETENTIONを大きくするか、大きなロールバックセグメントを作成する
ORA-01628 最大エクステント数stringに達しました(ロールバック・セグメントstring) MAXEXTENTSを大きくする
ORA-01629 UNDOを保存して最大エクステント数stringに達しました(表string) 表領域の記憶パラメータを変更する
ブロック障害 ORA-01498 ブロック検査エラーです 作成されたトレースファイルを確認する
ORA-01499 表または索引の相互参照エラーです 作成されたトレースファイルを確認する
ORA-01578 Oracleデータブロックに障害が発生しました(ファイル番号string、ブロック番号string) セグメントを特定し、リカバリを実行する
デッドロック ORA-00060 リソース待機の間にデッドロックが検出されました ROLLBACK処理してから、処理を再実行する
内部エラー ORA-00600 内部エラー・コード、引数:
[string],[string],[string],[string],[string],[string],[string],[string]
オラクル社カスタマーサポートセンターへ連絡する
リスナーログ 接続 TNS-12537 接続がクローズされました 接続先のデータベースを起動する
TNS-12500 リスナーが専用サーバー・プロセスの起動に失敗しました Net Servicesのトレースを取得して、エラーの詳細を確認する
TNS-12535 操作はタイムアウトしました LISTENER.ORA内でCONNECT_TIMEOUT_LISTENERを0にするか、Net Servicesのトレースを取得して、エラーの詳細を確認する
Net Servicesの
クライアントログ
接続 TNS-12203 接続先に接続できません サービスの名称、設定内容が間違っていないか確認する
TNS-12224 リスナーがありません リスナープロセスが起動しているか確認する
TNS-12500 リスナーが専用サーバー・プロセスの起動に失敗しました Net Servicesのトレースを取得して、エラーの詳細を確認する
TNS-12514 リスナーは接続記述子にあるSERVICE_NAMEを解決できませんでした TNSNAMES.ORA内に指定されたSERVICE_NAMEが正しいか確認する
TNS-12535 操作はタイムアウトしました LISTENER.ORA内でCONNECT_TIMEOUT_LISTENERを0にするか、Net Servicesのトレースを取得して、エラーの詳細を確認する
TNS-12571 パケット・ライター障害が発生しました 再処理を実行し、エラーが解消されなければ、Net Servicesのトレースを取得して、エラーの詳細を確認する
 


分類 FAQ
トランザクション データベースにおけるロック制御の必要性
説明
参考)ACIDプロパティー

1.ロックとは?

複数のユーザが異なるトランザクションを実行するとき、同時にデータベースに変更を加えたり、ほかのユーザによるコミットされていないトランザクションによって矛盾の生じたデータを取得したりすることを防ぐ必要がある。データやトランザクションを整合性の保たれた状態に維持するためには、ロック制御を使用する。ロック制御によって競合するトランザクションの排他を行い、各トランザクションを分離することで、同時実行を可能にする。ロックは、データベースソフトにより管理され、ユーザがデータベースにアクセスするごとに割り当てられる。


2.ロック制御の必要性

複数のユーザが同時にデータベースにアクセスし、トランザクションを実行するときには、データベースの整合性を妨げるさまざまな問題が生じるおそれがある。ロック制御の必要性は、以下4つの問題に起因する。

A.更新データの紛失

データベースに対して更新が同時に行われて更新処理が衝突し、正しい更新データが取得できないことをいう。こういった場合は、あるトランザクションによってデータベースに対して更新処理がおこなわれている間、ほかのトランザクションによる更新処理を行えないようにすることで防ぐことができる。

B.ダーティーリード

あるトランザクションによってデータの更新が行われているときに、ほかのトランザクションではそのデータを検索で取得する。しかし更新のトランザクションがコミットされないで終了すると、データベースはロールバックされ、更新のトランザクション開始前の状態になり、検索で取得されたデータは、データベースには存在しないデータとなる。このようにコミットされていないトランザクションによって、取得データに矛盾が生じることをダーティーリードという。これは、1つのトランザクションによって更新中のデータに対して、検索を行えないようにすることで防ぐことができる。

C.反復不能読み取り

あるトランザクションにより同一のデータへの読み取りを複数回おこなっているとき、別のトランザクションによってデータが更新されコミットされると、反復して同一データを取得したとき、初回と同じデータを取得できないことになり、データの一貫性が失われる。このような矛盾を反復不能読み取りという、これは、1つのトランザクションによって読み取りが行われているデータに対して、更新処理を行えないようにすることで防ぐことができる。

D.ファントム読み取り

あるトランザクションが読み取りをおこなってテーブルから一連のレコードを取得している最中に、別のトランザクションによってレコードの挿入や削除がおこなわれると、最初のトランザクションの開始時には存在しなかったレコードが出現したり、存在していたレコードが不明になったりする。こういった矛盾をファントム読み取りという、これは、1つのトランザクションによってテーブルの読み取りがおこなわれているテーブルに対しては、挿入や削除が行えないようにすることで防ぐことができる。


分類 FAQ
パフォーマンス パフォーマンス遅延時の初動調査方法
説明
(1)event10046トレース

  パフォーマンス劣化が発生するSQL文が特定できている場合、event 10046トレースの取得を検討する。
  該当トレースを取得することにより、Oracle内部でどのような待機要素が発生しているかを確認できる。

  
取得方法:

    connect ***/***
    alter session set events '10046 trace name context forever ,level 12';

    <遅延発生SQL文>

    alter session set events '10046 trace name context off';

    ※実行ユーザーに alter session システム権限が必要。

  上記を実行するとuser_dump_dest にトレースファイルが出力される。

(2)statspackレポート

  遅延発生SQL文が特定できない場合や、特定のSQL文に依存しないで遅延事象が発生する場合は、statspackレポートを御取得することが問題解析に有効となる。

  以下の手順で取得する。
   
  
statspackの作成:

    @$ORACLE_HOME/rdbms/admin/spcreate.sql

     ※実施はSYSで行う。


  
statspackレポートの取得:

     ※以下の実行ユーザはperfstatになる。

    SQL> execute statspack.snap

     ※こちらは、<遅延発生SQL文> 実行前および実行後(もしくは実行中)の2つのポイントを取得する。

    SQL> @$ORACLE_HOME/rdbms/admin/spreport.sql

     ※こちらでレポートが取得できる。



分類 FAQ
説明

UNIX,Linux