DBeaver「イベントハンドラ」で構築する、本番DBを「守り抜く」自動化の極意
こんにちは。現場で泥臭いトラブル対応からアーキテクチャ設計まで渡り歩いてきた、君の先輩エンジニアです。
今日は、多くのエンジニアが「ただのSQLクライアント」としてしか使っていないDBeaverの、奥深くに眠る最強の武器「イベントハンドラ(Event Handlers)」について伝授しようと思う。
これを使えば、君がうっかり本番環境で「WHERE句を忘れたUPDATE」を投げそうになったとき、あるいはクエリ実行後に自動でSlack通知を飛ばしたいとき、DBeaverが君の代わりに「門番」として働いてくれるようになる。
—
1. DBeaverの「イベントハンドラ」とは?
イベントハンドラは、DBeaverでの特定の操作(SQL実行、接続開始など)をフックにして、外部コマンドやスクリプトを自動実行する機能だ。
GUIツールを単なる「SQL入力窓」から、「自分専用の監視・運用自動化エージェント」へと進化させるための機能と言えば分かりやすいだろうか。
設定画面へのアクセス
まずは、この機能を呼び出そう。
1. 上部メニューの [ウィンドウ (Window)] > [設定 (Preferences)] を開く。
2. 左ツリーから [データベース (Database)] > [イベントハンドラ (Event handlers)] を選択。
ここが、君の「自動化工場」の入り口だ。
—
2. 実践:本番環境の「うっかり」を防ぐセーフティネット
現場で一番怖いのは、本番環境での不用意な更新・削除だ。「Production」という接続名が含まれる場合に、特定のクエリをブロックしたり、ログを残したりする仕組みを作ろう。
具体的な設定手順
1. イベントハンドラの画面で [新規 (New)] をクリック。
2. 以下の設定を入力する。
- Command: `sh /path/to/security_check.sh “${context.query}” “${datasource.name}”`
- Event: `before-execute` (クエリが実行される前)
- Filter: `datasource.name matches ‘.Production.’` (本番環境のみ対象)
実行スクリプト(security_check.sh)
このスクリプトは、クエリに `UPDATE` や `DELETE` が含まれており、かつ `WHERE` がない場合に処理を中断させるためのものだ。
!/bin/bash
QUERY=$1
DS_NAME=$2
クエリにUPDATE/DELETEが含まれ、かつWHEREがないかチェック
if [[ “$QUERY” =~ ^(UPDATE|DELETE) ]] && [[ ! “$QUERY” =~ “WHERE” ]]; then
echo “[ALERT] $DS_NAME で危険なクエリを検知しました: $QUERY” >> /var/log/dbeaver_security.log
# ここで終了ステータス1を返すと、DBeaver側はクエリの実行を停止させることが可能
exit 1
fi
exit 0
ポイント: これを設定しておくだけで、君は「本番環境でWHERE句を忘れる」という悪夢から解放される。ツール側でガードを固める、これがプロの現場の作法だ。
—
3. 高度な自動化:実行後に「完了報告」をSlackへ飛ばす
次に、長時間かかる重いクエリや、大事なデータ移行が完了したとき、いちいち画面を見て待つのは時間の無駄だ。実行完了をトリガーにSlackへ通知を送ろう。
設定手順
1. 新規イベントハンドラを作成。
2. Command: `curl -X POST -H ‘Content-type: application/json’ –data ‘{“text”:”クエリ実行完了: ${datasource.name}”}’ https://hooks.slack.com/services/xxx/xxx`
3. Event: `after-execute` (クエリ実行完了後)
4. Filter: `datasource.name matches ‘.’` (全環境対象)
これで、長いクエリを実行してコーヒーを淹れに行っている間に、手元のスマホに「完了」の通知が届く。「待つ時間」を徹底的に排除する、これが生産性を高めるための極意だ。
—
初心者へのメッセージ:なぜ今、これをやるべきか
多くのエンジニアは、ツールを「提供された機能のまま」使っている。しかし、真に優秀なエンジニアは、ツールを自分の好みの形に「調教」する。
今日紹介したイベントハンドラは、ほんの一例に過ぎない。
- ローカルバックアップを自動生成する。
- クエリ実行時間を計測して、遅いクエリを自動でスプレッドシートに記録する。
これらを組み合わせていけば、君の作業環境は「ただのIDE」から「強力なデータベース運用プラットフォーム」へと変貌を遂げる。
まずは、自分の環境で小さなログ出力から試してみてほしい。一度この「自動化の快感」を知ってしまえば、もう昔の不便なやり方には戻れなくなるはずだ。
応援しているよ。何か詰まったら、いつでも聞いてくれ。