株式会社コーソル

コーソルDatabaseエンジニアのブログ

技術ブログ

RDBMSのアーキテクチャから考える論理破損の検知

今週の特濃JPOUG | Japan Oracle User Groupに関連したお話です。

上記のエントリに記載した論理破損の厄介さを踏まえ、では「この厄介な論理破損をどうやって検知すればいいのだろうか?」という点を考えます。

原理的には、論理発生の発生原因はいろいろありますが、実際的な発生傾向を踏まえるとLost Writeに限定して議論しても問題ないはずです。Lost Writeは、データファイルに存在するブロックのうち、一部のブロックが古いままになっている状態と言えます。当然ですが、データファイルはRDBMSから見るとデータの格納場所として位置づけられるため、データファイルが想定どおり更新されていないと、正しいデータが得られるはずがないのは当然のことです。開発の現場に例えて言うなら、「設計書が間違っていたなら、成果物も間違うのは当たり前でしょ?」みたいな話です。

でも、設計書の変更履歴のところに設計書の記載内容に反した内容が書かれてれば、間違いに気づく可能性があるかもしれません。「あれ?変更履歴には列XXXX削除って書いてあるのに、何故本文には列XXXXが残っているんだ?ミスじゃない?」みたいに。

同じことはRDBMSにも言えます。RDBMSにおいて変更履歴に相当するのは、オンラインREDOログファイル(WALファイル、ログファイル、トランザクションログなど、製品によって呼び方は様々ですが)になります。オンラインREDOログファイルを用いてリカバリを実行すれば、データファイルのLost Writeに気づくことができる可能性があります。

上記の考え方を実装するに当たり、考慮すべき点は以下になるでしょう。

  • 早期検出のためには、頻繁にリカバリを行う必要があるが、現実的ではない
  • RDBMSでは、オンラインREDOログファイル(更新履歴)とデータファイルの整合性チェックを行うことができるのは一般に更新時のみ。あまり更新を行わないブロックについては、早期に破損を検出できないことになる。

これらの考慮点をふまえて、論理破損の早期検出のためにOracle Database 11gから組み込まれた機能が、Data Guard環境における DB_LOST_WRITE_PROTECT です。

プロフィール

On7tWW6m1Ul4

渡部 亮太

・Oracle ACE
・AWS Certified Solutions Architect - Associate
・ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

カテゴリー

アーカイブ