アーカイブログを有効にした翌朝、あるいはリストアを流した直後に、db2 connect そのものが弾かれることがあります。特定の表が触れないのではなく、データベースに入れません。
SQL1116N A connection to or activation of database "SAMPLE" failed because
the database is in BACKUP PENDING state. SQLSTATE=57019
データベースが保留状態のため接続を受け付けていません。DBに入れないので SELECT も MON_GET_* も打てず、状態を調べる手段から先に塞がれます。この記事では接続できないまま状態を読む方法と、症状からの逆引きを最短でまとめます。再現手順と実機ログは末尾のZenn記事にあります。
まず見る(結論)
最初の分岐はdb2 connect が通るかどうかです。弾かれるならデータベースかインスタンスの側、通るなら表スペースや表の側です。データベース側の保留状態は接続なしで読めます。
# 保留フラグとログ運用の設定を読む(接続は不要)
db2 get db cfg for <DB名> | grep -i -E 'pending|LOGARCHMETH'
Backup pending が YES ならバックアップ保留(SQL1116N)、Rollforward pending が NO 以外ならロールフォワード保留(SQL1117N)です。SQL1116N に理由コードは付きません。SQLSTATEも SQL1117N と同じ 57019 なので、判別はメッセージ番号そのものを読んで行います。
症状 → 原因 → 対処(逆引き)
| 症状 | よくある原因 | まず打つ手 |
|---|---|---|
LOGARCHMETH1 を変更した直後から、全アプリの接続が SQL1116N で止まった |
循環ログからアーカイブログへ切り替えたため、前方復旧の起点となるバックアップが無くDB全体がバックアップ保留になった | オフラインで BACKUP DATABASE <DB名> TO <path> を取る |
止めたくないのでオンラインバックアップを打ったら SQL2413N で弾かれた |
バックアップ保留中は ONLINE バックアップが許可されない |
ONLINE を外して取り直す(接続は既に全部弾かれているのでDBは止まっている) |
DB全体をリストアした後、接続が SQL1117N で弾かれる |
リストア済みでロールフォワードが未実行(ロールフォワード保留) | ROLLFORWARD DATABASE <DB名> TO END OF LOGS AND STOP |
| ロールフォワードを流したのに保留が解けない | AND STOP(または AND COMPLETE)を付けずに終えた |
AND STOP 付きで実行し直す |
点検スクリプトは Backup pending = NO なのに、後から接続が弾かれた |
フラグは誰かがDBを開こうとするまで NO のまま。設定変更だけでは立たない |
設定変更の直後は db2 connect を1回打って確かめる |
| 点検スクリプトがロールフォワード保留だけ検知できない | Rollforward pending は YES ではなく DATABASE という値を取る |
判定を = YES ではなく != NO で書き直す |
状態を見ようとした GET DB CFG が SQL1024N で落ちる |
SHOW DETAIL を付けている。この形は接続が必要 |
SHOW DETAIL を外す(保留行を読むだけなら不要) |
db2 connect は通るが、特定の表スペースの表だけ触れない |
DB全体ではなく表スペース単位の保留(SQL0290N) |
表スペースの状態を見る(SQL0290N の記事) |
db2start は成功するのに db2 connect だけ失敗する |
インスタンスではなくデータベース側の保留状態。インスタンス側が原因なら SQL1032N になる |
db2 get db cfg for <DB名> の保留行を先に読む |
DBに入れない状態でも GET DB CFG・LIST DB DIRECTORY・LIST HISTORY BACKUP・インスタンスレベルの db2pd - は動きます。MON_GET_* と db2pd -db <DB名> -... は接続や活動化が要るため使えません。障害時に動く手段だけで点検を組んでおくと、この状況でも詰まりません。
LOGARCHMETH1 の変更とバックアップを別作業にしている
循環ログからアーカイブログへ切り替えると、その時点で前方復旧の起点が存在しないため、Db2はデータベースをバックアップ保留にします。設定を1つ変えただけで全アプリの接続が止まるのはこの経路です。切り替え直後は Backup pending がまだ NO に見えるので、点検スクリプトの結果だけでは気付けません。最初のアプリケーションが接続しに来た時点で SQL1116N に変わります。変更手順に「変更 → オフラインバックアップ → 接続確認」をひとまとめに書いておくのが確実です。
それでも切り分からないとき(実機ログつきの詳解)
接続できない状態で何が読めて何が読めないかの実測一覧、LOGARCHMETH1 変更からの再現手順、オフラインバックアップとロールフォワードでの解除ログ、db2diag.log で追うときの検索語まで含めた詳しい解説は、Zennのフル記事にまとめています。
関連: SQL0290N 表スペース・アクセスは許可されません / SQL1032N データベース・マネージャーが起動していない / SQL0964C トランザクションログがいっぱいです
いざという時に迷わないためのバックアップ方式の選定とリカバリの手順を、本書 第4章「バックアップ・リカバリの鉄則」で体系化しています。
現場で引ける Db2 の教科書
現場で引ける!Db2実践エンジニア・バイブル
Db2はRDBMS市場でシェア数%。情報が少なく、頼れるのは膨大な公式マニュアルだけ―― そんな現状を変えたくて、「なぜこの値にするのか」「この障害のとき次に何を見るのか」という、マニュアルに載っていない現場の文脈を1冊にまとめました。書いてあることはすべて実際の現場で経験したことです。
アーキテクチャ/構成パラメーター選定/セキュリティ/バックアップ・リカバリ/HADR/pureScale/日常点検の自動化/メモリ・ロック競合/SQLチューニング/RUNSTATS・REORG/MON_GET監視/現場の難題集 ―― 全12章+運用シェルスクリプト集。