web-dev-qa-db-ja.com

バックアップの失敗からのSQLServer2005の復元

会社が最近引き継いだプロジェクトのデータベース用の.bakファイルがあります。

いくつかの.bakファイルを復元できましたが、最も重要なのは失敗です。

失敗すると、一般的なエラーが発生し、ログを確認するように求められます。

発生するエラーは次のとおりです。メッセージSQLServerアサーション:ファイル:、line = 1443失敗したアサーション= 'pFile'。このエラーはタイミングに関連している可能性があります。ステートメントを再実行してもエラーが続く場合は、DBCC CHECKDBを使用してデータベースの構造的整合性をチェックするか、サーバーを再始動してメモリー内のデータ構造が破損していないことを確認してください。

* .bakファイルでDBCCCHECKDBを実行する方法がわかりません。

どんな助けでも大歓迎です。私は開発者としてSQLの経験がありますが、私は間違いなくDBAではありません。だから私がばかだと思ってください。 :)

ありがとう!

3
Jack Marchetti

このアサーションは、復元コードがバックアップからページを読み取ったが、ページが破損しており、ページヘッダーにスタンプされたファイルIDが復元中のデータベースに存在しないために発生します。これは、bckioreq.cppというコードファイルから起動します(私はMSにいる間、これらすべてのものを所有していました)。

DBCC CHECKDBを実行するためのメッセージは、この場合には適用されない一般的なメッセージです。

データベースの完全バックアップを復元してから、他の一連の差分バックアップやログバックアップを復元していると思いますか? 2005年に復元していますが、古いバックアップを復元していますか?

これは、コードでリテールアサーションと呼ばれるものです-それを回避する方法は絶対にありません-コードがそれにヒットするとすぐに、アサーションが起動し、復元が爆弾を投下します。これをより良くするためのConnectアイテムがありますが、2008年にも修正されていません。

これは、復元する完全バックアップ、または後続の差分バックアップやログバックアップのいずれかで発生していますか?完全バックアップの場合、できることは何もありません。そのバックアップは乾杯です。後のバックアップの1つである場合は、そのバックアップまでのすべてを復元できますが、そのバックアップは含まれません。

それは基本的に私が恐れているあなたの答えです。

さて、これはどのように起こりましたか? (レトリックの質問)バックアップされたデータベースが破損していたか、I/Oサブシステムがバックアップを破損した可能性があります。これを防ぐためにできることがいくつかあります。データベースでページチェックサムをオンにし、バックアップでWITHCHECKSUMオプションを使用します。これにより、バックアップ対象が破損していないことを確認するためのチェックが追加されます。また、さまざまな方法でバックアップを検証することもできます-これに関する私のブログ投稿をチェックしてください: バックアップを検証することの重要性

お役に立てれば!

11
Paul Randal