Loading...

We've detected that your browser language is Chinese. Would you like to visit our Chinese website? [ Dismiss ]
By: Emma

データベース管理者にとって、復元状態から抜け出せないSQLデータベースへの対応は業務を妨害し、データアクセスを遮断し、基幹システムのダウンタイムを引き起こす可能性があります。この問題は多くの場合、復元処理の未完了または設定不備が原因で発生します。

本ガイドでは、データベースが復元状態でスタックする原因を解説し、DBAの実務経験に基づきT‑SQLコマンドを含む6つの実用的な解決方法を紹介し、効率的に問題を解消します。

SQLデータベースが復元状態でスタックする要因

データベースが復元モードのままになる大半のケースは、修正可能な単純な問題に起因します。考えられる原因と、後述する解決策との関連は以下の通りです。

  1. 復元ワークフローの未完了:最終的なオンライン化コマンドの実行忘れ、不要なトランザクションログの適用待ち状態。
  2. SSMS GUIの設定ミス:必要なファイルが存在しない状態で末尾ログバックアップや追加ログ復元を選択し、復元処理が停止。
  3. セッションロックまたは排他アクセスの問題:既存接続やロックがSQL Serverの最終リカバリ処理をブロック。
  4. 高可用性(HA)環境の異常:ミラーリング/Always Onの設定ミス、ログシッピングの同期失敗によりデータベースが復元状態に閉じ込められる。
  5. ログシッピングによる見かけ上の異常:セカンダリ待機サーバーは仕様上復元状態となる(正常動作)。
  6. データ破損またはメタデータの不整合:バックアップファイルの破損、ディスクエラー、メタデータの不整合により復元が部分的に失敗(リカバリ保留状態に遷移する場合あり)。
i2BackupでSQL Serverのバックアップとリカバリを自動化

手動による復元処理は人為的ミスが発生しやすくなります。i2BackupはSQL Serverのバックアップからリカバリまでの一連の処理を自動化し、復元状態でのスタックを回避し、リカバリ時間を短縮します。詳細はこちら »

SQL Serverデータベースが復元状態でスタックした場合の6つの効果的な解決策

以下に復元モードから抜け出すための実行可能な6つの対処法を記載します。順番に試すか、長期的な運用効率のためにSQL Serverバックアップソリューションの導入を検討してください。

解決策1:WITH RECOVERYで復元処理を強制完了

この問題はNORECOVERYフラグを使用して復元を実行し、最終的なリカバリ手順が省略された場合に発生します。SQL Serverエンジンが追加のトランザクションログの適用を待機するため、復元状態のまま利用不可となります。

対処方法

適用するバックアップファイルがこれ以上存在しない場合、下記コマンドを実行してデータベースをオンライン化できます。

-- [YourDatabaseName]を実際のデータベース名に置き換え
RESTORE DATABASE [YourDatabaseName] WITH RECOVERY;
GO

動作原理

WITH RECOVERYパラメータは復元シーケンスが完了したことをSQL Serverに通知します。エンジンはコミットされていないトランザクションをロールバックするUndoフェーズを実行し、データの整合性を確保します。これによりデータベースの状態が「復元」から「オンライン」へ遷移し、ユーザーがアクセス可能になります。

解決策2:SSMS GUIの操作ミスを修正

SSMSの復元ウィザードにて「末尾ログバックアップを取得する」オプションにチェックを入れたままにし、バックアップが失敗する、または誤って「データベースを非稼働状態のままにする」を選択すると、データベースが復元状態でスタックします。

対処方法

正しい設定で復元処理を再実行します。手順は以下の通りです。

  1. 対象データベースを右クリックし、タスク復元データベースを選択。 Right‑click your database and go to Tasks > Restore > Database.
  2. オプションタブにて、既存のデータベースを上書きする(WITH REPLACE)を選択。
  3. リカバリ状態のドロップダウンからRESTORE WITH RECOVERYを選択。
  4. 復元前に末尾ログバックアップを取得するのチェックを外し、処理のハングを防止。
  5. OKをクリックし復元を開始。 restart the restore process with the correct settings

動作原理

これらの設定によりウィザードはリカバリ処理を最後まで実行します。RESTORE WITH RECOVERYを選択することでSQL Serverはデータを確定させオンライン化します。末尾ログバックアップを無効にすることで、破損またはアクセス不可のログファイルを待機する状態を回避します。

解決策3:排他アクセスとセッションロックへの対応

バックグラウンドタスクやアプリケーション接続が最終リカバリ手順をブロックする場合があります。SQL Serverがオンライン化に必要な排他アクセスを取得できないため、復元状態のままとなります。

対処方法

他のすべての接続を強制的に切断し、データベースがリカバリを完了できるようにします。下記スクリプトを実行します。

-- すべてのアクティブセッションを終了しトランザクションをロールバック
ALTER DATABASE [YourDatabaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
-- データベースをオンライン化
RESTORE DATABASE [YourDatabaseName] WITH RECOVERY;
GO
-- マルチユーザーモードに戻す
ALTER DATABASE [YourDatabaseName] SET MULTI_USER;
GO

動作原理

SET SINGLE_USER WITH ROLLBACK IMMEDIATEコマンドはユーザーを切断しトランザクションをロールバックすることでセッションロックを解除します。ロックが解消されるとエンジンは安全に最終リカバリフェーズを実行可能になります。データベースがオンラインに遷移後、MULTI_USERに切り替えることでアプリケーションが再接続できるようになります。

解決策4:データベースミラーリング/Always Onの異常

ミラーリングやAlways On可用性グループといったHA環境では、セカンダリデータベースはプライマリからのログ更新を受け入れるため、通常復元状態となります。サーバー間の通信が切断、またはグループからデータベースを不正に削除すると、セカンダリ側が復元状態から抜け出せなくなります。

対処方法

プライマリとセカンダリの接続を手動で解除する必要があります。データベースミラーリングの場合はセカンダリインスタンス上で下記コマンドを実行します。

-- ミラーリング関係を解除しデータベースを解放
ALTER DATABASE [YourDatabaseName] SET PARTNER OFF;
GO

可用性グループに参加しているデータベースの場合、セカンダリサーバーにて下記コマンドを実行します。

-- 可用性グループからデータベースを削除
ALTER DATABASE [YourDatabaseName] SET HADR OFF;
GO

動作原理

これらのコマンドはSQL Serverに対し、パートナーサーバーからのデータ受信を停止するよう指示します。PARTNERまたはHADRをOFFに設定することでセカンダリデータベースはスタンドアロンに変換されます。外部ログの待機状態が解除された後、解決策1のWITH RECOVERYコマンドでオンライン化できます。

解決策5:ログシッピングとスタンバイモード(見かけ上の異常)

ログシッピング構成では、セカンダリデータベースは仕様上「復元」または「スタンバイ」状態となり、プライマリからのトランザクションログバックアップを継続的に受信・適用します。経験の浅いDBAはこれを障害と誤認することがありますが、正常な動作です。

対処方法

まずデータベースがログシッピングの対象か確認してください。障害復旧のフェイルオーバーなど、実際にオンライン化する必要がある場合はログシッピングジョブを停止し、手動でデータベースをリカバリします。

-- ログシッピングを解除しデータベースをオンライン化する場合のみ実行
RESTORE DATABASE [YourDatabaseName] WITH RECOVERY;
GO

状態のままデータベースを読み取り可能にしたい場合は、ログシッピングの設定をNORECOVERYモードではなくスタンバイモードに変更してください。

動作原理

これは技術的な障害ではなく見かけ上の異常です。ログシッピングはコピー先データベースを非リカバリ状態に保ち、プライマリのログを追従させます。リカバリコマンドを実行するとログの待機を終了しデータを確定させアクセス可能になりますが、ログシッピングの連鎖は切断されます。

解決策6:データ破損またはメタデータ不整合への対応

ハードウェアトラブル、ディスク領域不足、バックアップファイルの破損により復元が途中で失敗する場合があります。これによりデータベースがリカバリ保留または恒久的な復元状態に陥ります。この場合SQL Serverはデータとログシーケンス番号(LSN)の整合性を検証できず、オンライン化ができなくなります。

対処方法

破損による復元失敗が疑われる場合、スタックしたメタデータをクリアし、検証済みの正常なバックアップから再復元するのが最善策です。

  1. エラーログの確認:SQL Serverエラーログを開き、ページチェックサムエラーやI/Oエラーなど具体的なエラーを特定。
  2. データベースの削除:不整合な状態のため、データベースを削除する必要がある場合があります。
  3. 検証付きで再復元:REPLACEとCHECKSUMオプションを使用し、クリーンな復元を実行。
-- 単純なリカバリが不可能な場合、スタックしたデータベースを削除
DROP DATABASE [YourDatabaseName];
GO
-- 正常なバックアップファイルから再復元
RESTORE DATABASE [YourDatabaseName]
FROM DISK = 'C:\Backups\YourBackup.bak'
WITH RECOVERY, REPLACE, STATS = 10;
GO

動作原理

メタデータ不整合またはデータ破損が発生すると、内部のリカバリRedo/Undoフェーズが失敗します。データベースを削除しREPLACEコマンドを使用することで破損したポインタを除去し、SQL Serverがファイルを再作成します。STATS = 10を指定することで進捗を監視し、処理の再ハングを防止できます。

SQL Serverの安定したバックアップ・復元手段

大規模エンタープライズ環境では、手動のT‑SQLスクリプトやSSMS GUIだけに依存するのはリスクが伴います。複雑なデータを扱う大規模環境では、フラグの指定ミス一つで多大なダウンタイムが発生する可能性があります。業務継続性を確保するため、多くの組織はi2Backupのようなエンタープライズ向けソリューションを採用しています。

i2BackupがエンタープライズDBAの安定した環境維持を支援するポイント:

  • 状態管理の自動化:i2Backupは復元処理全体を制御し、復元からオンラインへの遷移を自動実行。リカバリコマンドの実行忘れによる復元状態のスタックを回避。
  • リアルタイム同期:ブロックレベル増分同期によりリアルタイム保護を実現。RPOを秒単位に抑え、障害発生時のスムーズなリカバリとデータ損失の最小化を実現。
  • ポイントインタイムリカバリ(PITR):データベースを任意の秒時点まで巻き戻し可能。手動によるLSN追跡より安全で、リカバリ時のエラーを抑制。
  • 業務を停止しないホットバックアップ:データベース稼働中にバックアップを実行。ユーザーをロックアウトせずデータ整合性を確保し、リカバリ保留・復元スタックの要因となるセッション競合を回避。
  • 統合管理GUI:複雑なスクリプトによる個別インスタンス管理の代わりに、集中管理ダッシュボードを提供。DBAはバックアップ状況を監視し、エンタープライズ全体でワンクリック復元を実行可能。

i2Backupのような堅牢なツールをインフラに導入することで、ミスが発生しやすい手動作業を高可用性ワークフローに置き換えます。これによりSQL Serverデータベースは常に保護・検証され、遅延なくオンライン化可能となります。

60日間無料トライアル
安全なダウンロード

まとめ

復元処理中にスタックしたSQLデータベースへの対応は、ユーザーがデータアクセスを待機している状況では大きな負担となります。ただし大半の場合、この状態はSQL Serverエンジンが最終的な指示または排他ロックを待機しているだけです。

手動操作のミスが大きなリスクとなる大規模エンタープライズ環境では、i2Backupのようなプロフェッショナルソリューションの導入により、自動化とリアルタイム同期でこれらの問題を根本的に回避できます。いずれの手法を選択する場合も、検証済みのバックアップを確保し、復元が失敗した際はSQL Serverエラーログを確認してください。適切なアプローチによりリカバリ関連のトラブルを迅速に解消し、安定した高性能なデータベース環境を維持できます。

概要は準備中です

関連記事

【3つの手法】SQL Server差分バックアップの作成方法
このブログではSQL Server差分バックアップの3つの簡単な手法、初心者向けのSSMS GUI、上級者向けTransact‑SQL、効率的なi2Backupによる自動化を解説しています。基本原理や簡単なリストア手順も掲載しており、初心者からIT技術者まで手軽にデータ保護を実施できます。
記事を読む
SQL Server Management Studioでデータベースをバックアップする方法
このガイドでは、SQL Server Management Studio(SSMS)におけるデータベースのバックアップ手順を詳しく解説しています。GUIによる手動操作、カスタムT‑SQLスクリプト、自動化ソリューション、さらにi2Backupによるエンタープライズ向けの高度な運用方法を扱っています。
記事を読む
vCenter 間で VMware 仮想マシンを移行する 4 つの手法
本記事ではvCenter間でVMware仮想マシンを移行する4つの安定的な手法を紹介し、停止時間、規模、環境の複雑さに応じて適切な移行方式を選定するための参考情報を提供します。
記事を読む
VMware HA:vSphere 高可用性完全ガイド
このガイドでは、リーダー選出からデータストアハートビートまで、VMware vSphere HAの内部動作メカニズムを解説します。VMware HAのメリットとデメリットを分析することで、IT管理者は迅速な復旧とリソース負荷の均衡を図ったVMwareクラスタを適切に設計できます。
記事を読む
目次:
最新情報を購読
最新のインサイト、ニュース、限定コンテンツをお届けします。いつでも配信解除が可能です。
購読する
ビジネスデータのセキュリティ強化を始めませんか?
60日間の無料トライアルまたはデモで、Info2softが企業データをどのように保護するかをご確認ください。
フォームにご記入の上、送信してください。担当者より追ってご連絡いたします。
このフォームを送信することにより、 プライバシー通知を読み、同意したことを確認します。
{{ isSubmitting ? '送信中...' : '送信する' }}