Database Support Blog

  • Oracle Database
2021.12.17

Oracle Databaseのサポート対応で依頼することの多いファイルとコマンド

Oracle Database

この記事は、JPOUG Advent Calendar 2021 の18日目の記事です。

17日目はtomo さんの記事『よくあるオンプレOracleからRDSに移行したDBAの反省文 』でした。DB移行の難しさ、大変さが伝わる臨場感溢れる内容で、非常に参考になります。

事前の検討と検証、大事ですね!

情報取得テンプレートを公開します

サポートセンターには日々多くのお問い合わせをいただきますが、中でもトラブル対応時には原因追求や対処策を検討するためにログやコマンドの結果などの情報取得をお客様にお願いすることが多々あります。

残念ながら私自身は直接サポート対応をする機会がめっきり減っていますが、調査で依頼することの多い情報についてはテンプレートを作成し、いち早くご連絡を差し上げられるようにしていました。

今回は情報取得テンプレートの中から、トラブル対応の初動時に利用頻度の高かったものを紹介します。「あのログどこにあったっけ?」や、(機会がないことが理想ですが)皆様が運用されているOracle Databaseでトラブルが発生した際にご活用いただけると幸いです。

特にOSの指定がないものはLinuxベースで記載しています。自動診断リポジトリ(ADR)が導入された11gR1より前のバージョンではログの出力先が一部異なりますが、最近は非ADR環境のお問い合わせも少なくなってきましたので割愛します。

※免責事項※
・本記事に記載の内容は筆者個人のメモを抜粋/整形して公開しているものです。本内容について、サポートセンターへのご質問はお受けいたしかねますのでご了承ください。
・本内容は予告なく加筆/修正される可能性があります。


Oracle Database - 一般的なログ・ファイル -

主にエラーに関するお問い合わせをいただいた際に依頼することの多い情報です。特にログ情報などは、問題発生前後も含めて警告やパラメータ変更などの出力有無をすることが多いため、抜粋せずに送っていただくとスムーズな対応が可能です。

・アラート・ログ/トレース・ファイル

 
 <diagnostic_dest>/diag/rdbms/<db_unique_name>/<sid>/trace/alert_<sid>.log
 <diagnostic_dest>/diag/rdbms/<db_unique_name>/<sid>/trace/<sid>_<process_name>_<pid>.trc
 

・インシデント・ファイル

 
 <diagnostic_dest>/diag/rdbms/<db_unique_name>/<sid>/incident/incdir_<incident_number>/*
 

・リスナー・ログ

 
 <diagnostic_dest>/diag/tnslsnr/<hostname>/<listener_name>/trace/listener.log
 

diagnostic_destの位置は「SQL> show parameter diagnostic_dest」で確認できます。

listener.logはクライアントから接続要求がある度に書き込まれるため非常に肥大化しやすいファイルでしたが、19c以降ではlistener.oraにLOG_FILE_NUM_<listener_name>、LOG_FILE_SIZE_<listener_name>の設定を追加することでローテーションできるようになりました。


Oracle Database - 構成情報 -

エラーや仕様に関するご質問の際に依頼することの多い情報です。初期化パラメータ・ファイルはWindowsと他OSで出力先が異なります。※実際の対応では初期化パラメータの情報は「SQL> show parameter」でご提供いただくことがほとんどです。

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

 
 ・Linux
 $ORACLE_HOME/dbs/init<sid>.ora
 $ORACLE_HOME/dbs/spfile<sid>.ora
 
 ・Windows
 %ORACLE_HOME%\database\init<sid>.ora
 %ORACLE_HOME%\database\spfile<sid>.ora
 

・Oracle Net 構成ファイル

 
 $ORACLE_HOME/network/admin/listener.ora
 $ORACLE_HOME/network/admin/tnsnames.ora
 $ORACLE_HOME/network/admin/sqlnet.ora
 

各ファイルを正常に読み込めているかの確認は、lsnrctlやtnspingコマンドで行います。

 
 % lsnrctl status <listener_name>
 % lsnrctl services <listener_name>
 % tnsping <接続識別子>
 

Oracle Database - インストール/DB作成/パッチ適用情報 -

Oracle DatabaseのインストールやDBCAでのデータベース作成、パッチの適用に失敗した際に依頼することの多い情報です。$oraInventory のパスは /etc/oraInst.loc 内のinventory_loc で定義されています。

・インストール・セッションのログ

 
 ・Linux
  $oraInventory/logs/installActionsYYYY-MM-DD_HH24-MI-SS%p.log
  $oraInventory/logs/oraInstallYYYY-MM-DD_HH24-MI-SS%p.log
  $ORACLE_HOME/install/make.log
 
 ・Windows
  C:\Program Files\Oracle\Inventory\logs\installActionsYYYY-MM-DD_HH24-MI-SS%p.log
 

・Database Configuration Assistant(DBCA)のログ

 
 $ORACLE_HOME/cfgtoollogs/dbca/trace.log_YYYY-MM-DD_HH24-MI-SS%p
 $ORACLE_HOME/cfgtoollogs/dbca/<DB_NAME>
 

・OPatchログ・ファイル

 
 $ORACLE_HOME/cfgtoollogs/opatch/opatchYYYY-MM-DD_HH24-MI-SS%p.log
 

・適用済みパッチ

 
 % $ORACLE_HOME/OPatch/opatch lsinventory -detail >> opatch_lsinventory.log
 

・インストール済みrpmパッケージ

 
 % rpm -qa >> rpm.log
 

Oracle Database - パフォーマンス情報 -

処理パフォーマンスの低下時に依頼することの多い情報です。インスタンス全体のパフォーマンス情報はSTATSPACK/AWRレポートから確認します。

・STATSPACKレポート

 
 1.perfstatユーザに接続し、spreport.sql を実行
  SQL> conn perfstat/<pwd>
  SQL> @$ORACLE_HOME/rdbms/admin/spreport.sql
 
 2.STATSPACKレポートに含む開始/終了Snap Idを指定
 
  例)12月18日 16:00 - 17:00 のレポートを作成する場合
  Listing all Completed Snapshots
  
                                                          Snap
  Instance     DB Name        Snap Id   Snap Started     Level Comment
  ------------ ------------ --------- ------------------ ----- --------------------
  v19ee        V19EE                1 18 12月 2021 16:00     6
                                     2 18 12月 2021 17:00     6
                                     3 18 12月 2021 18:00     6
                                     4 18 12月 2021 19:00     6
 
  begin_snapに値を入力してください: 1
  end_snapに値を入力してください: 2
 
 3.レポートファイル名はそのままEnterを押下
  指定したSnap IDを含むファイル名でカレントディレクトリに作成されます
 
  report_nameに値を入力してください:
 
  パフォーマンス問題が発生していた時間帯と、比較用に前後1時間分をご提供ください
  たとえば、以下例で17:00-18:00でパフォーマンス問題が発生していた場合、開始/終了Snap Idに
  1-2、2-3、3-4を指定し、計3回spreport.sqlを実行します。
 

・AWRレポート

 
 1.DBA権限のあるユーザで接続し、awrrpt.sqlを実行
  SQL> conn /as sysdba
  SQL> @$ORACLE_HOME/rdbms/admin/awrrpt.sql
 
 2.レポートの形式でtextを選択
  report_typeに値を入力してください: text
 
 3.スナップショットを一覧表示する日数を指定
 
 
  例) 2日以内に取得されたスナップショト一覧を表示
  num_daysに値を入力してください: 2
 
 
 4.AWRレポートに含む開始/終了のSnap Idを指定
 
  例)12月18日 16:00 - 17:00 のレポートを作成する場合
  Listing the last 2 days of Completed Snapshots
  Instance     DB Name      Snap Id       Snap Started    Snap Level
  ------------ ------------ ---------- ------------------ ----------
  v19ee        V19EE                 1 18 12月 2021 16:00          1
                                     2 18 12月 2021 17:00          1
                                     3 18 12月 2021 18:00          1
                                     4 18 12月 2021 19:00          1
 
  begin_snapに値を入力してください: 1
  end_snapに値を入力してください: :2
 
 5.レポートファイル名はそのままEnterを押下
  指定したSnap IDを含むファイル名でカレントディレクトリに作成されます
 
  report_nameに値を入力してください:
 
  パフォーマンス問題が発生していた時間帯と、比較用に前後1時間分を取得します。
  たとえば、17:00-18:00でパフォーマンス問題が発生していた場合、手順4.の開始/終了Snap Idに
  1-2、2-3、3-4を指定し、計3回awrrpt.sqlを実行します。
 

SQL単位で実行計画の情報を見るためにはSTATSPACK/AWR SQLレポートを取得します。

・STATSPACK SQLレポート

 
 ※STATSPACKがレベル6以上で取得されている必要があります
 
 1.perfstatユーザに接続し、sprepsqlt.sql を実行
  SQL> conn perfstat/<pwd>
  SQL> @$ORACLE_HOME/rdbms/admin/sprepsql.sql
 
 2.対象のSQLが実行されていた時間を含む開始/終了Snap Idを指定
 
  例)12月18日 16:00 - 17:00 に実行されていたSQLを対象とする場合
  Listing all Completed Snapshots
  
                                                          Snap
  Instance     DB Name        Snap Id   Snap Started     Level Comment
  ------------ ------------ --------- ------------------ ----- --------------------
  v19ee        V19EE                1 18 12月 2021 16:00     6
                                     2 18 12月 2021 17:00     6
                                     3 18 12月 2021 18:00     6
                                     4 18 12月 2021 19:00     6
  
  begin_snapに値を入力してください: 1
  end_snapに値を入力してください: :2
 
 3.対象のSQLのHash Valueを指定
  STATSPACKレポート内のOld Hash Valueから確認します。
 
  hash_valueに値を入力してください: 
 
 4.レポートファイル名はそのままEnterを押下
  指定したHash Valueを含むファイル名でカレントディレクトリに作成されます
 
  report_nameに値を入力してください:
 

・AWR SQLレポート

 
 1.DBA権限のあるユーザでログインし、awrsqrpt.sqlを実行
  
  SQL> conn sys/ as sysdba
  SQL> @$ORACLE_HOME/rdbms/admin/awrsqrpt.sql
  
 2.レポートの形式でTEXT を指定
  
  Enter value for report_type: text
  
 3.スナップショットを一覧表示する日数を指定
  ※「2」を指定すると現在から 2日以内に取得されたスナップショト一覧を表示
  
  Enter value for num_days: 2
  
 4.SQLレポートを出力する開始/終了のスナップIDを指定
  
  begin_snapに値を入力してください:
  end_snapに値を入力してください:
  
 5.レポート出力するSQL_IDを指定
  AWRレポートやV$SQL、V$SESSIONなどから確認します
 
 
  Specify the SQL Id
  ~~~~~~~~~~~~~~~~~~
  Enter value for sql_id:
  
 6.レポートファイル名はそのままEnterを押下
  
  report_nameに値を入力してください:
 

セッション単位の情報を見るためにはASHを利用します。CTAS(※CREATE TABLE AS SELECT)で別テーブルに抜き出し→EXPDPを送っていただく方法もありますが、確認範囲が広くない場合は「set markup csv on(12.2~利用可)」を使用しCSV形式で送付していただく方がお客様の手間が少ないため、こちらで依頼します。※必要があればSQL*Loader(Express Mode)でインポートします

・ASH

 
 1.以下を記載したash.sql ファイルを作成
  
  system/
  set pages 10000 lines 4000
  set trims on
  set markup csv on
  spool ash.log
  select * from dba_hist_active_sess_history 
  where sample_time   
  between to_timestamp('21-12-18 10:00:00','YY-MM-DD HH24:MI:SS') 
  and to_timestamp('21-12-18 11:00:00','YY-MM-DD HH24:MI:SS'); 
  spool off
 
 2.スクリプトを実行
 
  % sqlplus @ash.sql > /dev/null
 

STATSPACK/AWR/ASHレポートの取得方法については、My Oracle Supportにドキュメントがありますので、こちらも参照ください。※AWR/ASHの利用にはEnterprise Edition + Diagnostics Packのライセンスが必要です

Doc ID 1705202.1:STATSPACKでの統計情報の採取方法及びレポートの出力方法について(KROWN:18832)
Doc ID 1726691.1:STATSPACK を使用した実行計画の確認方法(KROWN:83426)
Doc ID 1752159.1:AWR レポートの作成手順と出力される項目について (11g)(KROWN:146855)
Doc ID 1753507.1:AWR の SQL レポート作成手順と出力される項目について (KROWN:149615)
Doc ID 1742219.1:Active Session History(ASH) 情報の取得方法(KROWN:127934)


OS - システムログ/エラーログ -

データベース側のログにOSエラーが確認できる場合や、突然データベースが停止した/起動ができない、パフォーマンスダウンなどのトラブルの際に依頼することの多い情報です。

 
 ・Linux
  /var/log/messages
 
 ・Windows
   1. 「コントロールパネル」→「管理ツール」から"イベント ビューア"を起動
   2. 「Windows ログ」の"システム"と"Application"をそれぞれ右クリックからcsv形式で保存
 
 ・AIX
   /bin/errpt -a > messages.out 
   syslog(/etc/syslog.conf で出力先が定義されています)
 

OS - パフォーマンス情報 -

CPU、メモリなどの使用率が高い場合などに依頼することの多い情報です。他のログ情報と突き合わせるために、取得時刻を含めることが重要です。

 
 ・Linux
  % top -b -n 1 >> top.log
  % ps -elf |awk '{print strftime("%y-%m-%d %H:%M:%S"), $0}'  >> ps_elf.log
  % ps aux |awk '{print strftime("%y-%m-%d %H:%M:%S"), $0}' >> ps_aux.log
  % vmstat -t 10 6 >> vmstat.log
  % iostat -t 10 6  >> iostat.log
 
 ・Windows
  DOS> echo %date% %time% & tasklist
  DOS> typeperf -sc 6 -si 10 "\Process(_Total)\Virtual Bytes" >> typeperf_Virtual_Bytes.log
  DOS> typeperf -sc 6 -si 10 "\Memory\Committed Bytes" >> typeperf_Committed_Bytes.log
  DOS> typeperf -sc 6 -si 10 "\Processor(_Total)\%% Processor Time" >> typeperf_Processor_Time.log
 

OS - OSWatcherBB -

パフォーマンス情報は正常時と比較をすることで調査により有用ですので、定期取得されていることが望ましい情報です。OSWatcherBB(ドキュメントID 1509957.1)などを利用されることをおすすめします。

 
 <OSWbb解凍ディレクトリ>/archive/oswiostat/<hostname>_iostat_YY.MM.DD.HH24MI.dat
 <OSWbb解凍ディレクトリ>/archive/oswmeminfo/<hostname>_meminfo_YY.MM.DD.HH24MI.dat
 <OSWbb解凍ディレクトリ>/archive/oswmpstat/<hostname>_mpstat_YY.MM.DD.HH24MI.dat
 <OSWbb解凍ディレクトリ>/archive/oswnetstat/<hostname>_netstat_YY.MM.DD.HH24MI.dat
 <OSWbb解凍ディレクトリ>/archive/oswprvtnet/<hostname>_prvtnet_YY.MM.DD.HH24MI.dat
 <OSWbb解凍ディレクトリ>/archive/oswps/<hostname>_ps_YY.MM.DD.HH24MI.dat
 <OSWbb解凍ディレクトリ>/archive/oswslabinfo/<hostname>_slabinfo_YY.MM.DD.HH24MI.dat
 <OSWbb解凍ディレクトリ>/archive/oswtop/<hostname>_top_YY.MM.DD.HH24MI.dat
 <OSWbb解凍ディレクトリ>/archive/oswvmstat/<hostname>_vmstat_YY.MM.DD.HH24MI.dat
 

OSWatcherのログ・ファイルは1時間単位で分かれています。指定した日付のみログを取得する場合は、以下のようなコマンドを利用します。

 
 % find /opt/oracle/oak/oswbb/archive -name '*21.12.18*' | xargs tar -cvf /tmp/osw_logs_1218.tar
 % find . -name '*12.18*' -print -exec zip /tmp/osw_logs_1218.zip {} \;
 

OS - 構成ファイル/システムファイル -

接続エラーやリソース不足など、設定に依存する問題が発生した際に依頼することの多い情報です。

・hostsファイル

 
 ・Linux
  % cat /etc/hosts
 
 ・Windows
  C:\windows\system32\drivers\etc\hosts
 

・システムファイル

 
 ・Linux
  % cat /etc/sysctl.conf
  % cat /etc/inittab
  % cat /etc/ntp.conf
  % cat /etc/syslog.conf
  % cat /etc/rsyslog.conf
  % cat /etc/security/limits.conf
 

OS - その他コマンド -

動作不良などの調査でシステムやリソースの状態を確認する際に依頼することの多いコマンドです。

・ネットワーク情報

 
 ・Linux
  % ifconfig -a
 
 ・Windows
  DOS> ipconfig /all
 
 ・共通
  % netstat -a -n
  % netstat -sn
  % ping <ホスト名>
  % nslookup <ホスト名>
 

・ディスクの空き/ファイルサイズ

 
 ・Linux
  su - 
  # df -ha
  # df -k
  # df -i
  # du -k /u01 | sort -nr | head -n 100
  # ls -l <ファイルパス>
 
 ・Windows
  DOS> fsutil volume diskfree C:
  DOS> dir <ファイルパス>
 

・システム情報

 
 ・Linux
  % cat /etc/*release
  % cat /proc/cpuinfo
  % cat /proc/meminfo
 
 ・Windows
  DOS> systeminfo
 

・環境変数

 
 ・Linux
  % env >> env.log
 
 ・Windows
  DOS> set >> set.log
 

最後に

実際はテキストファイルに雑多にまとめていた中から調査に必要な箇所だけ切り出し、引数などを調整して利用していたため、ブログにするにあたって分類に思った以上に時間がかかった上に若干ごちゃっとしてしまいました。

有事の際に迅速に情報確認/収集ができるよう、本記事を参考に、皆様が管理されている環境に合わせてまとめていただけますと幸いです。また、今回は記載しませんでしたが21cからデフォルトとなる読み取り専用ORACLE_HOMEの構成では一部ファイルの位置が異なりますのでご注意ください。

本当はサポート対応で依頼することの多いSQL文も記載しようと思っていましたが、こちらも記載すると長尺の巻物が出来上がりそうだったので一旦はログとコマンドだけにしました。需要がありましたら書こうと思いますので、励ましのお便りお待ちしています。

明日は凌直孝さんです。よろしくお願いします。


JPOUG Advent Calendar執筆記事

2021年 18日目
Oracle Databaseのサポート対応で依頼することの多いファイルとコマンド
https://www.ashisuto.co.jp/db_blog/article/jpoug-oracledb-logfiles-command.html

2020年 17日目
Oracle Databaseバージョンアップ後の性能劣化で試したい暫定対処
https://www.ashisuto.co.jp/db_blog/article/jpoug-vup-temp-solution.html

2019年 24日目
【Oracle Database】DMLリダイレクションで一歩進んだ Active Data Guard の使い方(19c新機能)
https://www.ashisuto.co.jp/db_blog/article/20191224_ADG_REDIRECT_DML.html

2019年 20日目
【Oracle Database Cloud】"超"現実的に考える!Oracle CloudへのDB移行ガイド
https://www.ashisuto.co.jp/db_blog/article/20191220_cloud.html

2017年 14日目
Oracle Database 12cR2へのアップグレード後に発生するORA-01017
https://www.ashisuto.co.jp/db_blog/article/201712-ora-01017.html

2016年 9日目
【Oracle Database】2016年にサポートにお問い合わせをいただいたORAエラー TOP5
https://www.ashisuto.co.jp/db_blog/article/2016_oerr_rank.html

2015年 15日目
パフォーマンスダウンを「再現待ち」にしないための準備
https://www.ashisuto.co.jp/db_blog/article/20151215_oracle_pfmdwn.html

筆者情報

大野 高志

ビジネスインフラ技術本部

2007年アシスト入社。Oracle Databaseのサポート業務を経て、サポートセンターに蓄積されたナレッジを使用したサービスの立ち上げに従事。現在は「 アシストの超サポ 」を広め、カスタマーエンゲージメントの構築を実現するための活動を行っている。


■本記事の内容について
 本記事に示した定義及び条件は変更される場合があります。あらかじめご了承ください。

■商標に関して
 OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。
 文中の社名、商品名等は各社の商標または登録商標である場合があります。


Oracle Databaseライセンスのご相談ならアシスト

関連している記事

  • Oracle Database
  • Oracle Cloud
  • PostgreSQL
  • AWS
  • Exadata
2022.05.24

入社2年目がレポート!Cloud Database Days 2022技術セッションの見どころ

2022年5月26日~6月3日に開催される「Cloud Database Days 2022」。その中でも10個に分かれた技術セッションについて、ポイントを押さえてそれぞれご紹介いたします!

  • Oracle Database
2022.05.20

Oracle Databaseライセンスの定義とルールを正しく理解する ~第3回:仮想化環境編~

今回はOracle Databaseライセンス「仮想化環境編」です。これまでエディション、ライセンスの種類、カウントの方法、という基本的な内容を説明してきましたが、より構成に踏み込み、「ハードウェア分割の基本的な考え方」や「仮想化環境の考慮点」=Soft Partitioning理解のポイントを説明しします。

  • Oracle Database
2022.04.27

DBエンジニア厳選!DB基盤に効果的なOracle EE基本機能5選

DB基盤刷新を検討中の方に向けてOracle Database Enterprise Editionの『基本機能』をご紹介します。プリセールスエンジニアとしてお客様とお話をしながらよく聞くお悩みや課題をベースにOracle Database歴15年の筆者が独断で選出したおすすめ機能をランキング形式でご紹介します。

ページの先頭へ戻る