SQLデータベースの管理では、バックアップなどの定型処理や複数のSQLをまとめて実行する場合などで、バッチ処理を活用します。
データベースエンジニアの方なら、昔作られたようなSQLを実行するためのBATファイルを見たことがあるでしょう。今回は、バッチ処理の基本から、作り方などを詳しく解説します。
IT用語としてよく使われるバッチとは何か
インフラエンジニアは、よく「その処理はバッチで実行しましょう」と言ったりします。また、SQLデータベースを運用するうえで、情報システムに組み込んでいない特殊な処理に、バッチ処理を使うケースも珍しくありません。
まずは、SQLデータベースにおけるバッチ処理について解説します。
バッチは英語の「batch」が元になった言葉
IT用語としてよく耳にするバッチは、英語の「batch」が元になっています。なお、英語の「batch」は、一回分や一束、一群といった意味です。
つまり、個々のプログラムを1つ1つ個別に実行するのではなく、複数のプログラムをまとめて実行するのがバッチの語源です。
なお、コンピュータが使われ始めたころは、今のようなキーボードやディスプレイが無く、プログラムを実行するにも、その結果をチェックするのも大変な作業でした。
そのため、1つずつ実行するのではなく、複数のプログラムをまとめて実行されていました。これが、バッチ処理の最初です。
バッチ処理はすぐに結果が表示されない処理
昔のコンピュータは非常に高価だったことから、CPUを常に稼働させていました。
そして、そのための仕組みとして、実行予定の複数のプログラムを待機させておき、CPUが空いたら待機中のプログラムを実行する仕組みで運用されており、バッチ処理と呼ばれていました。
つまり、バッチ処理とは、昔はジョブを投入したとしても実行待ちに入ってしまい、すぐに結果が表示されないプログラムの実行を指す言葉でした。
そのため今でも、時間のかかる複数の処理をまとめて実行したり、指定した時刻に実行する処理をバッチ処理と呼んでいます。
SQLによるバッチ処理
SQLが使えるデータベース管理ソフトが組み込まれたWebシステムでは、利用者の操作によって実行されるSQLの他に、データの転送処理やバックアップなどの一括処理が実行されるのが一般的です。
そして、このような処理は、ある時刻に定期的に実行されることが多く、バッチ処理を呼ばれます。
また、そのようなバッチ処理は、深夜の時間帯に実行されることから、夜間バッチと呼ばれることもあります。
なお、このようなバッチによるSQLの実行は、Linuxのシェルスクリプトや、Windows ServerのBATファイルなどで、データベース管理ソフト専用のクライアントソフトでSQLを実行しています。
LinuxサーバーにおけるSQLデータベースのバッチ処理
バッチ処理は、SQLデータベースが稼働しているサーバー上で実行されることが多く、SQLデータベースはUbuntuやCentOSといったLinuxサーバーで稼働していることが多いことから、LinuxOS用のバッチ処理がよく使われます。
次から、LinuxOSで利用される、SQLデータベースで使われるバッチファイルについて解説します。
バックアップ処理
SQLデータベースのバッチ処理として、多くのシステムで利用されているのがバックアップです。
システムによっては、専用のバックアップアプリを活用しているケースもありますが、OS標準のコマンドと組み合わせてバックアップする仕組みを構築する方法もよく使われます。
なお、深夜にシステムを停止し、その間にバックアップする方法が確実ですが、24時間稼働しているWebシステム等は、システムを停止できません。
このようなケースでは、SQLデータベースを稼働した状態で、特定の時刻のデータのスナックショットを作成し、それをバックアップしています。
バックアップ処理用バッチファイルはスキル次第
SQLデータベースのバックアップ用のバッチファイルは、SQLサーバーが稼働しているサーバー、または、ネットワークを介してそのサーバーに接続できるサーバーから実行できます。
もし、レンタルサーバーでSQLデータベースを運用している場合は、そのサーバーでも設定でき、また、ネットワークを介して別のLinuxサーバーからも実行できます。
なお、linuxで利用されることの多いUbuntuやCentOSといったディストリビューションでは、シェルスクリプトや、Rubyのスクリプト、Python3のスクリプトなどでバッチファイルが作られています。
なお、システム管理者のプログラミングスキルに応じて、多機能なバッチファイルを作ることも可能です。
バックアップ処理用バッチファイルの例
次に、MySQLのデータベースをバックアップするために、シェルスクリプトで作成したバッチファイルの例を紹介します。
なお、このバッチファイルは、Linuxの機能であるcronを活用し、指定した時刻に実行します。
シェルスクリプトの例
#!/usr/bun/bash USER_NAME="test" PASSWORD="password" BACKUP_DIR="/mnt/backup" BACKUP_FILE="backup`date +%Y%m%d`.sql" OLD_FILE="backup`date --date '1 day ago' "+%Y%m%d"`.sql" /usr/bin/mysqldump -u$[USER_NAME] -p$[PASSWORD] --single-transaction -A > $[BACKUP_DIR]/$[BACKUP_FILE] if [ $? != 0 ];then echo "エラーが発生しました" else rm $[BACKUP_DIR]/$[OLD_FILE] echo "バックアップが終了しました" fi
Windowsにおけるバッチ処理
先ほどSQLデータベースのサーバーとして使われるこの多いLinuxOSにおけるバッチファイルの例を紹介しましたが、Windowsでもバッチファイルが使われています。次から、Windowsにおけるバッチファイルについて解説します。
情報システムで提供できないデータを取得する処理
情報システムをリリースした後、データベースに格納されたデータを基に、特別なフォーマットでデータを取り出したい、といった要望がよくでます。
この場合、簡単に実現するにはどうすればよいでしょうか。昔から、よく使われている方法が、データベース管理ソフトのクライアントツールを使い、特別に作成したSQLを実行するケースです。
このようなケースでは、クライアントツールに読み込ませるSQLファイルと、実行するためのファイルとして、拡張子が.BATのファイルがバッチファイルとして提供されます。
そのため、このファイルを実行することを、よくバッチ処理と呼びます。
Windows Serevrでも使える
BATファイルを使ったバッチ処理は、SQLサーバーが動作しているWindows Serevrでも実行できます。
例えば、本番環境とテスト環境が構築されたWindows Serverでは、本番環境のデータをテスト環境にコピーするためバッチファイルが用意されるケースがあります。この場合、Windows用のBATファイルが使われます。
WindowsのBATファイルの例
Windowsの拡張子が.BATのファイルは、パソコンがオフィスで使われ始めたMS-DOS時代から使われているファイル形式です。
そして、このファイルに記述しておけば、複数のMS-DOSのコマンドを実行できます。
また、データベース管理ソフトのクライアントツールとして、Windowsのコマンドプロンプトで実行するコマンドが提供されることが多く、そのクライアントツールを実行するために、バッチファイルが使われます。
次に、WindowsバッチファイルでOracle database向けのSQLを実行する例を紹介します。まず、Oracle databaseのクライアントツールは、sqlplusです。インストールされていれば、コマンドプロンプトで利用できます。使い方とバッチファイルの例は次のとおりです。
splplusコマンドの基本
splplus ユーザー名/パスワード@接続文字列 SQLファイル名
BATファイルの例
@echo off set USER_NAME=test set PASSWORD=passwprd set DATABASE=test set SQL_FILE=test.sql sqlplus -s %USER_NAME%/%PASSWORD%@%DATABASE% @%SQL_FILE%
まとめ
SQLデータベースは、専用のクライアントツールやGUI管理ツールから操作できます。
しかし、バックアップなどの定型処理や、複数のSQLをまとめて実行するケースでよく使われるのはバッチファイルです。そのため、データベースを扱うエンジニアなら、バッチファイルを作れるようになりましょう。
なお、SQLデータベース用のバッチファイルは、サーバーによって使えるプログラミング言語が違います。サーバーに応じたバッチファイルが作れるように、プログラミングスキルを身に付けてください。