DB2 4 min read

Db2のリストア後にROLLFORWARDしても接続できない・時刻指定で戻らないときの逆引き

リストアの後、ROLLFORWARD DATABASE を流して DB20000I が返ったのに、接続が次のエラーで弾かれることがあります。

SQL1117N  A connection to or activation of database "SAMPLE" cannot be made
because of ROLL-FORWARD PENDING.  SQLSTATE=57019

接続できても、戻したはずの更新が無い、取り消したかった更新が入っている、ということもあります。ROLLFORWARD は途中で止まっても DB20000I を返すことがあるため、メッセージだけでは成否が分かりません。

まず見る(結論)

次のコマンドで、ロールフォワードが止まった位置を確認します。DB に接続できない状態でも実行できます。

db2 rollforward db <DB名> query status

見るのは3行です。Rollforward status が not pending か。Last committed transaction が戻したい時刻と合っているか。Next log file to be read に、存在しないログの名前が出ていないか。

症状 → 原因 → 対処(逆引き)

症状 よくある原因 まず打つ手
DB20000I なのに SQL1117N のまま。状態は DB working AND STOP を付けていない ROLLFORWARD DB <DB名> STOP
接続できるが、ある時点から後の更新が無い 途中のアーカイブログが欠けていて、そこで完了した 次回は STOP の前に Next log file to be read を確認する
時刻を指定したら SQL4970N USING LOCAL TIME が無く、日本時間が UTC として読まれた STOP せずリストアからやり直し、USING LOCAL TIME を付ける
時刻を指定したら SQL1275N オンラインバックアップの終了時刻より前を指定した メッセージに出る時刻以降を指定する。または TO END OF BACKUP
リストアで SQL2537N オンラインバックアップに WITHOUT ROLLING FORWARD を付けた 外してリストアし、ロールフォワードする
時点指定の後、戻し直しても元の更新が戻らない STOP した時点から新しいログチェーンが始まった STOP する時点を決めてから実行する

手順書では、TO END OF LOGS AND STOP を1行で打つより、TO END OF LOGS、QUERY STATUS で止まった位置の確認、STOP の3つに分けた方が安全です。STOP した後は戻せません。保留状態の読み方と、バックアップ保留(SQL1116N)との切り分けは「SQL1116N」で扱っています。

それでも切り分けられないとき(実機ログつきの詳解)

ログが欠けたまま AND STOP が成功したときの出力、USING LOCAL TIME を付け忘れて誤った DELETE まで適用された経緯、時点指定の後に増えたログチェーンのディレクトリは、Zennのフル記事にまとめています。

▶ Zennで続きを読む(無料)

Db2 SQL1117N ― ROLLFORWARDが成功したのに保留が解けない・データが戻らない5つの原因


実機ログつきの詳解を読む →

いざという時に迷わないためのバックアップ方式の選定とリカバリの手順を、本書 第4章「バックアップ・リカバリの鉄則」で体系化しています。

現場で引ける Db2 の教科書

現場で引ける!Db2実践エンジニア・バイブル

Db2はRDBMS市場でシェア数%。情報が少なく、頼れるのは膨大な公式マニュアルだけ―― そんな現状を変えたくて、「なぜこの値にするのか」「この障害のとき次に何を見るのか」という、マニュアルに載っていない現場の文脈を1冊にまとめました。書いてあることはすべて実際の現場で経験したことです。

アーキテクチャ/構成パラメーター選定/セキュリティ/バックアップ・リカバリ/HADR/pureScale/日常点検の自動化/メモリ・ロック競合/SQLチューニング/RUNSTATS・REORG/MON_GET監視/現場の難題集 ―― 全12章+運用シェルスクリプト集。

Zennで読む →