忍者ブログ
情報処理技術者試験の合格を目指す全受験者のための、1問1問「徹底解説」ブログです。単なる過去問の暗記ではなく、なぜその答えになるのかを本質的に理解できるよう解説します。書籍などでは学べない最新用語やトレンドを踏まえてご紹介します。

【データベース】時間を自在に操る復旧!「PITR」の真価|情報処理問題1000本ノック

「最新まで戻す」のは当たり前。PITRの本当の凄さは、あえて「少し前の時点」を指定して復旧できる柔軟性にあります。その仕組みを深掘りしましょう。

1. 疑問:PITRは「最新」まで戻すこと?

【 解説 】 PITR(Point In Time Recovery)の「Point In Time」とは、文字通り「ある特定の時点」という意味です。もちろん「障害が発生する直前の最新状態」を目指して復旧することも多いですが、以下のようなケースで本領を発揮します。

【PITRが活躍する「最新に戻さない」ケース】

■ シナリオ:人為的なミス
・14:00に、担当者が間違って重要なデータを「全削除」してしまった!
最新(14:01)に戻すと…:データが削除された後の「空っぽの状態」になってしまいます。
PITRで13:59に戻すと…:削除される「1分前」の正常な状態をピンポイントで復元できます!

2. 仕組み:バックアップ + ログの積み上げ

復旧作業は、以下の2段階で行われます。これを理解すると、なぜ「点」で戻せるかがわかります。

① フルバックアップのリストア
まずは、過去に取ったバックアップ(例:昨日の深夜3時)を丸ごと戻します。この時点では「昨日の状態」です。

② ロールフォワード(前進復旧)
バックアップ以降に記録された「更新ログ(WALやアーカイブログ)」を、指定した時刻まで1つずつ適用していきます。
★ここで「最新(障害直前)」まで流せば最新になりますし、「ミスをする直前」で止めれば過去の時点になります。

3. 試験対策:紛らわしい用語との比較

用語復旧のゴール
ロールフォワード ログを使ってデータを前進させ、最新状態(または指定時点)にする処理そのもの。
PITR 「○時○分」と時刻を指定して、その瞬間の状態を再現する「手法」のこと。

1. 理解のコツ: PITRはデータベースの「タイムマシン」です。エンジニアが「14時00分00秒の時点に戻れ」と命令すれば、ログをそこまで再生してピタッと止めてくれるイメージです。
2. データベース管理者の視点: PITRを可能にするためには、更新ログを捨てずに保存しておく「アーカイブログモード」の設定が必須です。これができていないと、バックアップを取った時点(面)までしか戻せません。


4. まとめ

PITRは「最新まで戻る」ことも含め、「任意のタイミングを選択して復旧できる」非常に強力な機能です。障害復旧だけでなく、操作ミスという「人災」からデータを守るための必須知識と言えます。


PR

【データベース】表(リレーション)が満たすべき「4つの基本特性」|情報処理問題1000本ノック

リレーショナルデータベースにおいて、表(リレーション)は単なるデータの箱ではありません。数学的な「集合論」に基づいた厳格な特性を持っています。設計の基本となる4つのルールを攻略しましょう。

■ リレーショナルデータベース:表の重要な特性

効率的なデータ管理と矛盾のない操作を実現するために、RDBの表は以下の性質を備えています。

特性具体的な内容と意味
重複する行(組)の禁止 表の中に、全く同じ値を持つ行(タプル)が複数存在することはありません。
・各行を一意に識別するための「キー」の概念が必要な理由です。
行(組)の無順序性 行の並び順(上下)に意味はありません。データは順不同の「集合」として扱われます。
・特定の順番で取得したい場合は、必ず `ORDER BY` 句で指定します。
列(属性)の無順序性 列の並び順(左右)にも意味はありません。列は「名前」によって識別されます。
・「左から2番目の列」といった指定ではなく、列名でデータを操作します。
値の原子性(第一正規形) 全ての属性値はそれ以上分解できない単一の値(スカラ値)である必要があります。
・1つのセルに複数の値を詰め込む「繰り返し集合」は認められません。

試験対策の重要キーワード

  • リレーション(Relation):数学的な意味での「関係」。これがRDBにおける「表」の正体です。
  • タプル(Tuple):表における「行(組)」のこと。
  • アトリビュート(Attribute):表における「列(属性)」のこと。
  • 第一正規化:属性の原子性を確保し、繰り返し項目を排除するプロセスのことです。

※RDBが「集合論」に基づいていることを理解すると、なぜSQLで「何番目のデータ」という指定ができないのか、なぜ重複を嫌うのかといった理由が明確に見えてきます。