none
バックアップ処理時のmsdbシステムデータベースエラーについて RRS feed

  • 質問

  • お世話になります。

    VB.NET + SQL Server 2008 R2 にて業務アプリケーションの開発を行っております。
    VBから『 BACKUP DATABASE [DB名] TO DISK = [保存ファイルパス] WITH INIT 』のコマンドをSQL Serverに対して実行すると、以下のようなエラーが発生することがあるのですが、原因が分からず困っております。

    ---【エラー内容】-----------------------------------------
    ■エラーメッセージのタイトル
    なし

    ■エラーメッセージ内容
    Timeoutに達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。
    msdbデータベースに、バックアップの挿入または履歴レコード/詳細レコードの復元ができませんでした。msdbデータベースに問題がある可能性があります。バックアップ/復元操作は正常のままです。
    データベース'[DB名]'の219008ページ、ファイル1のファイル'[DB名]_Data'を処理しました。
    データベース'[DB名]'の2ページ、ファイル1のファイル'[DB名]_Log'を処理しました。
    ----------------------------------------------------------

    なお、以下の点については既に確認しております。

     1.コマンドタイムアウト設定
       →コマンドタイムアウトの時間は十分余裕を持った長さが確保されており、
        その設定が有効になっていることは確認しました。
        (別のSQL文の発行にて確認)

     2.システムデータベース「msdb」のサイズ
       →エラーメッセージ内にあるmsdbというシステムデータベースの
        ファイルサイズは21MBとなっており、ファイルが大きくなりすぎて
        いるといったような状況でななさそうです。
        (msdbの設定は既定のまま何も変更せずに使用しています)

     3.SQL Serverに対しての接続文字列
       →VB.NETからSQL Serverに接続する際の接続文字列は以下のようになっております。
        『Data Source=[サーバー名];Initial Catalog=[DB名];Integrated Security=False;User ID=[接続ユーザID];Password=[接続パスワード];Connect Timeout=10』

     4.SQLの直接実行
      →「SQL Server Management Studio」等のツールを使用して、同一のSQLを実行してみましたが、
       エラーは発生しませんでした。
       ただ、直接実行した場合と、VB.NETから実行した場合では正常終了するまでの時間にかなりの
       差があります。
       (VB.NETから実行した場合の方が圧倒的に長い時間がかかります)

    ちなみに、この現象が発生している業務アプリケーションは既に1年以上実際に稼働しており、これまでは何事もなく正常に動作しておりました。


    確認すべき点や改善方法がありましたら、教えていただけないでしょうか。
    よろしくお願いいたします。


    • 編集済み CC_Obata 2012年10月15日 6:11 具体的なタイトルに変更
    2012年10月15日 2:02

回答

  • 返信ありがとうございます。

    まず初めに本件についてですが、丁度昨日に自己解決いたしました。
    結論から申しますと、原因は単純にコマンドタイムアウトによるものでした。。。

    確認済みの項目としてまず最初に「コマンドタイムアウトの時間は十分余裕を持った長さが確保されており…」としておりましたが、この確認方法に問題があり原因特定ができない状態となっておりました。。。大変申し訳ありません。

    ご指摘の通り、バックアップ終了後にバックアップの履歴をmsdb内のテーブルに記録しようとしたタイミングでタイムアウトが発生していたため、通常のコマンドタイムアウトとは異なるエラーメッセージが表示されていたようです。

    ちなみに、ご質問にありました内容について回答しておきますと、BACKUPコマンド単体で差が発生してると思われます。
    これが何故なのか現段階では分かっていませんが、今のところ業務自体に問題が発生するほどの現象ではないため、とりあえず本件についてクローズとさせていただきます。

    ご協力ありがとうございました。

    • 回答としてマーク CC_Obata 2012年10月23日 8:22
    2012年10月23日 8:22

すべての返信

  • こんにちは。

    エラーメッセージからは、バックアップ終了後に、バックアップの履歴を
    msdb内のテーブルに記録しようとしていて、
    コマンドタイムアウトが発生したように見受けられます。

    >直接実行した場合と、VB.NETから実行した場合では正常終了するまでの時間にかなりの差があります。
    >(VB.NETから実行した場合の方が圧倒的に長い時間がかかります)

    調査すべきポイントは上記のように思います。
    VB.NETから実行した場合に時間がかかる、というのはBACKUPコマンド単体で差があるということでしょうか。
    (VB.NETから実行する場合、Connectionを生成して、Openして、Commandオブジェクトを・・・といくつか処理がある
     かと思いますが、これらを抜いて差異があるのか、同じなのかというところが文面から読み取れなかったので)

    • 回答としてマーク CC_Obata 2012年10月23日 8:22
    • 回答としてマークされていない CC_Obata 2012年10月23日 8:22
    2012年10月22日 10:20
  • 返信ありがとうございます。

    まず初めに本件についてですが、丁度昨日に自己解決いたしました。
    結論から申しますと、原因は単純にコマンドタイムアウトによるものでした。。。

    確認済みの項目としてまず最初に「コマンドタイムアウトの時間は十分余裕を持った長さが確保されており…」としておりましたが、この確認方法に問題があり原因特定ができない状態となっておりました。。。大変申し訳ありません。

    ご指摘の通り、バックアップ終了後にバックアップの履歴をmsdb内のテーブルに記録しようとしたタイミングでタイムアウトが発生していたため、通常のコマンドタイムアウトとは異なるエラーメッセージが表示されていたようです。

    ちなみに、ご質問にありました内容について回答しておきますと、BACKUPコマンド単体で差が発生してると思われます。
    これが何故なのか現段階では分かっていませんが、今のところ業務自体に問題が発生するほどの現象ではないため、とりあえず本件についてクローズとさせていただきます。

    ご協力ありがとうございました。

    • 回答としてマーク CC_Obata 2012年10月23日 8:22
    2012年10月23日 8:22