社内システムの管理者を務める場合、データのセキュリティ体制を確認する必要があります。システム障害・エラーに備えたデータ復旧の手段のひとつに「ロールバック」がありますが、「ロールバックとは何?」と、詳しく知らない方も多いかと思います。
そこで今回は、データベース関連でよく使われるロールバックの概要やメリット・デメリット、「ロールフォワード」との違いについて解説します。
ロールバック(後退復帰)とは?
IT用語のひとつに「ロールバック(後退復帰)」があります。これはデータベース管理において大切な処理で、トランザクション処理を中止する際に使用されます。ここからは、ロールバックについて詳しく説明します。
トランザクション処理の中止を指す
前提としてトランザクションとは、複数のデータ処理をひとつにまとめた仕組みのことです。データベースの変更作業中に問題が発生した場合に備え、複数の作業をひとまとめにして管理します。
上記を踏まえ、ロールバックとは「トランザクション中の変更を取り消して実行前に戻す」ための機能です。
データベースのトランザクション「A」「B」「C」を順に処理する工程を考えてみましょう。途中で処理が失敗すると、元の数値に戻せなくなる可能性があるので、ロールバックでデータを復元できる仕組みを搭載しておくと安心です。

DB(データベース)で使用する用語
そもそもDB(データベース)とは、膨大なデータを体系的に蓄積し、必要なときに取り出せる仕組みのことです。利用者は保存されたデータを簡単に見つけ出し、新しい記録を加えたり、内容を書き換えたりできます。また、古くなったデータを消去する作業もできます。
主にデータベースの更新処理中にエラーが起きた場合、元の状態に戻すためのロールバックが実施されます。
ロールバックの基本的な使い方【MySQLの例】
データベースを操作する際、誤ってデータ更新をしてしまうことは避けられません。以下では、MySQLを使ったロールバックの基本的な使い方を具体例とともに解説します。
ロールバックの基本
MySQLでは、「START TRANSACTION」を使って、トランザクションを行います。エラーなどが発生して、変更を取り消す場合「ROLLBACK」を使用します。問題がない場合は「COMMIT」を実行して変更を確定してください。
ロールバックの具体例
以下では、MySQLを使ったロールバックの具体例を紹介します。
1.テーブルの作成
最初にテーブルを作成して、データを追加します。
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
balance INT
);
INSERT INTO users (name, balance) VALUES ('Suzuki',1000), ('Sato',1500);
2.トランザクションの開始とデータ変更
以下のようにトランザクションを実行し、データ変更を行います。
START TRANSACTION;
UPDATE users SET balance = balance-200 WHERE name ='Suzuki';
UPDATE users SET balance = balance-500 WHERE name ='Sato';
3.ROLLBACKの実行
データが誤っていた場合は「ROLLBACK; 」を用いることで、取り消しができます。
ROLLBACK;
4.変更の確定
データの問題がない場合は「COMMIT;」を使用して、データ変更の確定をします。
COMMIT;
ロールバックを行うメリット
ロールバックを行うメリットは主に以下の通りです。
ここからは、それぞれのメリットについて詳しく解説します。
エラーや問題発生時にすぐに対応できる
変更作業の途中で問題が見つかった際、素早いデータの保護が求められます。ロールバックの仕組みがあれば、作業開始前の状態に素早く復旧できるので、被害を最小限に抑えられます。
これにより、エラーや問題が起きてもデータベースに保存されたデータの信頼性を保てます。
プログラムを安心して更新できる
プログラム更新の途中で更新が失敗しても、ロールバックを実施することで復元が可能です。
また、プログラム更新後に不具合が発生した場合、一度プログラムを元の状態に戻すこともできるので、比較的安全にプログラムの新機能追加や改良できる点はメリットと言えます。

ロールバックを行うデメリット
ロールバックにはメリットがある反面、以下のようなデメリットも存在します。
ここからは、ロールバックを行うデメリットについて解説します。
処理実行の整合性を保てない場合がある
特定のデータベースでは、外部の実行処理を元に戻せないことがあります。この場合、ロールバックを実施しても元の状態に復元できません。また、ロールバックを実行した結果、データの整合性がとれない現象も発生する場合があります。
ロールバックを利用する際には、システム設計の段階で適切なデータベース管理の方式を組み込むことが重要です。
大規模なデータベースでは時間がかかる
トランザクション処理で扱うデータ量が多い場合や、参照するデータベースの規模が膨大な場合、処理をやり直す際に時間がかかることがあります。この問題を回避するには、適切にトランザクション処理を設計する必要があります。
ロールバックとロールフォワードの違い
データを復旧する方法のひとつに「ロールフォワード」があります。ロールフォワードは、トランザクション以前のバックアップから未実行の処理を再度実行して、トラブル直前の状態まで復元します。
ロールフォワードは、処理を進めながら障害の原因を特定し、データをトラブル発生直前の状態まで復元することが可能です。主に稼働中のシステムでトラブルが発生した際の対応に利用されますが、その利用機会は限定的です。

まとめ
今回の記事では、ロールバックの意味やメリット・デメリット、ロールフォワードの違いなどについて解説しました。ロールバックとは、データベース管理におけるトランザクション処理の中止機能です。
トランザクション中の変更を取り消して実行前の状態に戻すことで、エラーや問題発生時に迅速な対応が可能になり、プログラムの安全な更新も実現できます。
一方でデメリットとして、処理実行の整合性を保てない場合があり、大規模データベースでは時間を要します。
また、類似機能のロールフォワードは、バックアップから未実行処理を再度実行して障害直前まで復元する方式で、主にシステム稼働中のトラブル対応に使用されますが、利用頻度は限られています。