DBエンジニアの備忘ブログ

Oracleを扱っています。自身の備忘として記事を書いていこうかなと思っています。

【Oracle】本当にあった怖い話①【DataPump】

はじめに

Oracle のサポートをしていると、障害が発生して初めてバックアップを使用するということがよくあります。バックアップに関して、あまり知識をもって運用していなかったがために発生した怖い話を紹介します(実際にあった話です)。これを機に、バックアップの重要性を理解してくれる人が一人でも増えたらうれしいです。

エピソード① それ本当?

ある日、本番環境のテーブル(ユーザデータ)を間違って 削除(drop)してしまい、復旧したいとご連絡いただきました。いろいろな手段を試みたものの、うまくいかず最終的に日次で取得しているバックアップからの復旧ということになりました。

別会社にバックアップは任せているとのことで、お客様自身はバックアップの方法を認識しておらず、バックアップログからどういったものか確認の上で、復旧方法を案内してほしいとご要望いただきました。

ログからバックアップに使用しているコマンドを確認したところ、以下のエクスポートコマンドとなっておりました。

expdp system/<PW> directory=<ダンプdir> dumpfile=<ダンプlog>

オチ

何が怖いかお分かりでしたでしょうか。expdp ではデータベースのテーブル単位(tables)やスキーマ単位(schemas)、表領域単位(tablespaces)等でのエクスポートが可能です。
では、今回のお客様では何の単位のエクスポートが行われていたでしょうか。正解はスキーマ単位のエクスポートです。
エクスポート単位のパラメータの指定を省略した場合、デフォルトでは expdp 実行ユーザ(今回は systemユーザ)のスキーマ内のオブジェクト(データ)をエクスポートする動作となります。
Oracle DB において、system ユーザは管理データであり、ユーザデータのエクスポート(バックアップ)は全くできていなかった状態となります。
さようならユーザデータ。