✅ bashスクリプトを使ったモニタリングツール作成
📁 スクリプト構築の手順:
-
モニタリング実行サーバの選定:
-
アプリケーションサーバ上で実行するのが望ましい(ネットワーク問題も検知できる)。
-
今回はDBサーバ上で実行。
-
-
ディレクトリ作成 → 初期チェック作成:
-
SQL*Plus
を使って DB 接続確認。 -
dual
テーブルから "Success" を返すSQLを使い、結果に "Success" が含まれていれば接続成功。
-
-
接続情報を変数化:
-
ユーザー名、パスワード、ホスト、ポート、サービス名などを変数で定義。
-
-
スクリプトのログ出力整備:
-
ログに日時、サーバー名、サービス名などを出力する
logging
関数を作成。
-
-
追加チェック:ブロックセッション確認:
-
セッションのブロッキング状態を確認するSQLを追加。
-
アプリケーションユーザーでは参照できず、
DBSNMP
ユーザーを解錠して使用。 -
DBSNMPユーザーはデフォルトでロックされているため、アンロックが必要。
-
-
SQLのループ処理化:
-
チェックするSQL文をリスト化し、forループで実行。
-
新しいSQLを追加したい場合はリストに追加するだけで済む。
-
-
異常検知のロジック:
-
接続チェックの結果に "Success" がなければエラー。
-
他のチェックは、出力があればエラー、なければ正常。
-
エラー時にはログに
ERROR
を付け、後続で通知(SlackやPagerDuty、メールなど)するよう実装予定。
-
-
最後にテスト実行と修正:
-
continue
ステートメントで正しくループを制御。 -
接続チェック、セッションチェック、バックアップ日付チェックなどを含む4つの項目を確認。
-
バックアップが45日前であり、エラーとして検出される。
🔧 Gmail SMTPを使ったメール通知機能の構築と統合(要約)
📌 目的
-
自作のDB監視スクリプトに、問題検出時のメール通知機能を追加。
-
GmailのSMTPリレーを使って、安全にメール送信する仕組みを構築。
📨 Gmail SMTPリレーの設定手順
-
Postfixのインストール
-
メール送信に使用するMTA(Mail Transfer Agent)として
postfix
をインストール。 -
起動時に自動起動するよう設定。
-
-
Postfix設定の変更
-
GmailのSMTPサーバ(
smtp.gmail.com:587
など)をリレー先として指定。 -
Gmailアカウントの認証情報を
/etc/postfix/sasl_passwd
ファイルに保存。
-
-
セキュリティ設定
-
認証情報ファイルのパーミッションを厳しく(600など)制限。
-
postmap
コマンドでハッシュ化ファイルを作成。 -
Postfixを再起動して設定を反映。
-
-
Gmail側の設定
-
アカウントで「安全性の低いアプリのアクセス」を有効にしておく(必要に応じてアプリパスワード使用)。
-
-
メール送信テスト
-
mail
コマンド等でテストメールを送信。 -
エラーが出る場合は、設定ファイルの重複箇所などを修正。
-
💻 監視スクリプトとの統合
-
メール送信関数
send_email()
を作成-
引数に「件名」「宛先」「本文」を取り、Postfix経由でメール送信。
-
-
環境変数の設定
-
スクリプト内で
ORACLE_HOME
やPATH
を明示的に設定(再ログイン時のエラー防止)。
-
-
エラー検出時にメール送信
-
例:バックアップの問題が検出されたら即座に通知メールを送信。
-
🖥 OSレベルのチェック追加
-
ディスク使用率チェック(85%超でアラート)
-
**ロードアベレージ(平均負荷)**チェック(プロセスが多すぎるとアラート)
🚫 同時実行防止処理の追加
-
スクリプト実行時にロックファイルを作成。
-
ロックファイルが存在する場合は異常とみなして即終了&通知。
⏰ スケジューリング(Cronの設定)
-
監視スクリプトを 5分ごとに実行。
-
ログファイルに毎回結果を追記(
logs/yyyy-mm-dd.log
の形式)。 -
実行結果に問題があれば、その都度メール通知。
📌 最後に:追加課題(推奨)
-
各組織によって必要なチェック項目が異なるため、
-
他の監視SQL(例:遅いクエリ検知、表領域の空き容量、無効インデックスなど)を調査し、スクリプトに追加することが推奨されている。
🧭 Oracle Enterprise Manager Express(EM Express)の概要と接続方法
🔍 EM Expressとは?
-
Oracleデータベースの管理ツール。
-
以前はFlashベースだったが、Flash終了に伴い利用できなくなった。
-
Oracle 19c以降ではJavaベースに移行。
-
現時点(19c)では、利用できる機能は限定的(Performanceタブのみ)
→ ユーザー管理・メモリ・ストレージ管理は非対応。
🌐 接続に必要な準備
🔹 CDBへの接続
-
DBMS_XDB_CONFIG パッケージを使って、CDBのHTTPSポート番号を確認。
-
DBMS_XDB_CONFIG.GETHTTPSPORT()
→ 例:5500
を返す。
-
-
URL形式:
https://<IPアドレス>:<ポート番号>/em
-
CDBに接続する際は、コンテナ名の指定は不要。
-
成功すると、PerformanceタブとStorageタブが表示される。
-
Storageタブでは、CDBの表領域(Tablespace)情報が閲覧可能。
-
🔹 PDBへの接続
-
GETHTTPSPORT()
ではPDBのポート番号は取得できない。 -
SETHTTPSPORT()
を使用して手動でポートを設定(例:5502
)。 -
再度
GETHTTPSPORT()
で確認すると、設定したポート番号が返る。 -
接続URLにPDBのポート番号を使い、CISユーザーなどの資格情報でログイン可能。
📘 レッスン概要:データベースにワークロード(負荷)をかける方法
🔽 1. 必要なスクリプトのダウンロードと準備
-
Oracle Learning Library から ワークロード用のスクリプトをダウンロード&解凍。
-
setup_workload.sql
を実行するよう記載があるが、その中身を事前に確認。-
setup_workload.sql
は以下のスクリプトを実行:-
unlock_accounts.sql
:HR/OE/SHユーザーのロック解除とパスワード設定 -
setup_order.sql
:注文処理用のスキーマ(Order Entry)のオブジェクト作成
-
-
🛠 2. サンプルスキーマのインストール(Order Entry / Sales History)
🔹 手順
-
Oracleの提供する サンプルスキーマ(Order Entry, Sales History)を準備。
-
スクリプト内のパスを自環境のものに変える必要があるため、Perlコマンドを使って一括置換。
-
特定の文字列(
__SUB__CWD__
)を実際のディレクトリパスに変換。
-
-
PDB1
に接続し、インストールスクリプトを実行(順番に実行)。-
実行時には質問(インストール場所や表領域名など)に回答。
-
エラーがないことを確認。
-
▶️ 3. 負荷(ワークロード)生成スクリプトの実行
🔹 setup_workload.sql
-
必要なユーザー(OEなど)やオブジェクトを用意するスクリプト。
-
引数:
-
ユーザー名(例:OE)
-
パスワード
-
サービス名
-
サーバーIPアドレス
-
🔹 start_workload.sh
-
実際にデータベースに対して操作(INSERT/UPDATE/DELETE)を並列実行するスクリプト。
-
insert_orders.sql
などのスクリプトを繰り返し呼び出して負荷を生成。 -
接続方法:完全な接続文字列(ホスト、ポート、サービス名)を指定する必要あり。
-
Load Factor により負荷のレベル(同時実行数)を設定可能。
🔹 モニタリング
-
別ターミナルで
top
コマンドを使って、Oracleプロセスが増加し、負荷がかかっている様子を確認可能。
📌 補足
-
各スクリプトの内容(特にPL/SQLコード)は学習目的でも一度目を通すと理解が深まる。
-
接続エラー防止のために、接続方法(TNS形式)や環境変数の確認を忘れずに。
🔍 Oracle Enterprise Manager Express を使用して、PDB負荷状況を可視化・分析
📊 主な機能と操作方法
-
Performance Hub メニューから、過去1時間のリアルタイムデータを確認可能。
-
時間スライダーを使って、関心のある期間を指定可能。
-
Active Session History(ASH)チャートで、セッションごとの待機イベントやCPU使用状況を視覚的に確認。
-
ユーザーごとの負荷を確認するため、Weight Class ➝ Session Identifier ➝ Username でフィルタ設定可能。
-
ユーザーの負荷内容を Concurrency(同時実行)や Scheduler(スケジューラ) などで分類。
🧠 詳細分析機能
-
Top Dimensions ➝ Module を使って、ユーザーが実行していた処理単位(モジュール)を特定可能。
-
Workloadタブでは以下の情報が確認できる:
-
CPU統計
-
待機時間統計
-
Workload Profile(例:Parse Callsなど)
-
セッション情報(例:Open Cursors)
-
-
Active Session History Analyticsでは、実行中のSQLに関する詳細を表示:
-
SQL ID をクリックすると、SQLのテキスト、実行時間、IO量、リクエスト数などを確認可能。
-
💡 ポイント
-
フィルタや統計項目の切り替えにより、特定ユーザーや処理に絞った分析が可能。
-
実データを用いたトラブルシューティングやパフォーマンス監視に活用できる。
-
分からない項目は調査しながら操作を習得するのが望ましい。
🔍 AWR(自動ワークロードリポジトリ)とは?
Oracleデータベースが内部で収集・保持する統計情報のデータウェアハウスであり、パフォーマンス問題の検出や自己チューニングに利用されます。
🛠️ AWRレポートの作成手順
-
awrrpt.sql
スクリプトの実行:
Oracle Home 配下のrdbms/admin
ディレクトリにあるスクリプトを使う。 -
レポート形式の選択:
HTML形式(デフォルト)またはTEXT形式を選べる。 -
スナップショット期間の指定:
デフォルトでは60分ごとにスナップショット(統計情報)が自動取得され、最大8日間保存。開始スナップショットIDと終了スナップショットIDを指定。 -
レポート名の入力:
指定した名前でカレントディレクトリに保存される。 -
ローカルにコピーしてHTMLレポートを閲覧。
📈 AWRレポートの内容と利点
-
基本情報: DB名、バージョン、起動時間、コンテナ情報など。
-
解析期間中の負荷状況: CPU不足、I/Oリソースの待機などが確認可能。
-
待機イベント: サーバープロセスがどのイベントで待機していたかの統計情報。性能問題の「兆候」として利用できる(ただし原因ではない)。
-
イベントの分類: 待機イベントは「Wait Class」でグループ化される。
🔍 特に注目すべき情報
-
Top Foreground Events by Wait Time: 最も多くの待機時間を要したイベント。
-
Top SQL by Elapsed Time: 実行時間が長いSQLの特定に役立つ。
-
プロセスタイプ別の統計: 負荷のかかっているプロセスの分類が確認可能。