現在、私はSANスナップショットを別のサーバーに毎晩復元し、そのテストサーバーで毎週checkdbを実行しています。checkdbは次のエラーをスローしています。
データベース 'db_with_error'のログスキャンに渡されたログスキャン番号(105217:402:0)は無効です。このエラーは、データの破損、またはログファイル(.ldf)がデータファイル(.mdf)と一致しないことを示している可能性があります。レプリケーション中にこのエラーが発生した場合は、パブリケーションを再作成してください。それ以外の場合は、起動中に問題が発生して障害が発生した場合は、バックアップから復元します。
以下を使用して、checkdbエラーを解決しました。
EXECUTE dbo.DatabaseIntegrityCheck
@Databases = 'db_with_error',
@CheckCommands = 'CHECKDB'
EXEC sp_resetstatus 'db_with_error';
ALTER DATABASE db_with_error SET EMERGENCY;
dbcc checkdb ('db_with_error')
ALTER DATABASE db_with_error SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE db_with_error SET multi_user WITH ROLLBACK IMMEDIATE;
ALTER DATABASE db_with_error SET online;
EXECUTE dbo.DatabaseIntegrityCheck
@Databases = 'db_with_error',
@CheckCommands = 'CHECKDB'
上記でエラーが解決されるのはなぜですか?
テストサーバーは12.0.2495を実行しており、本番サーバーは11.0.5548を実行していることに注意してください。また、prodサーバーは、私が理解しているように、良好な状態にある可用性グループの一部です。
現在、私はSANスナップショットを別のサーバーに毎晩復元し、そのテストサーバーで毎週checkdbを実行しています。
Denny Cherryによるこの記事を読む- A SANスナップショットはバックアップではありません! 。
SQL Serverのネイティブバックアップを(できれば圧縮を使用してディスクフットプリントを削減するために)取得し、テストサーバーに復元して以下のコマンドを実行して、同じエラーが発生するかどうかを確認することをお勧めします。
DBCC CHECKDB('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS