PRB: デバイスが見つからないとデータベースが未確認に設定される

文書翻訳 文書翻訳
文書番号: 180500 - 対象製品
この記事は、以前は次の ID で公開されていました: JP180500
すべて展開する | すべて折りたたむ

現象

SQL Server の起動時にデータベースのデバイス ファイルが使用できない場合、データベースが未確認に設定されます。次のいずれかのメッセージ セットが SQL Server エラー ログに表示されることがあります。
96/11/18 10:48:32.60 kernel udopen: Operating System Error 32 (The
process cannot access the file because it is being used by another
process.) during the creation/opening of physical device,
C:\DATA\SQL\MSDB.DAT (or C:\DATA\SQL\MSDB.MDF)

96/11/18 10:48:32.60 kernel udactivate (primary): failed to open
device C:\MSSQL\DATA\MSDB.DAT (or C:\DATA\SQL\MSDB.MDF) for vdn 127
または
96/11/18 10:48:32.60 kernel udopen: operating system error 2(The
system cannot find the file specified.) during the creation/opening
of physical device C:\MSSQL\DATA\MSDB.DAT (or C:\DATA\SQL\MSDB.MDF)

96/11/18 10:48:32.60 kernel udactivate (primary): failed to open device C:\MSSQL\DATA\MSDB.DAT (or C:\DATA\SQL\MSDB.MDF) for vdn 127

ログには、これらのメッセージの後に以下が続きます。
96/11/18 10:48:36.70 kernel udread: Operating system error 6(The handle is invalid.) on device 'C:\MSSQL\DATA\MSDB.DAT' (or
C:\DATA\SQL\MSDB.MDF) (virtpage
0x7f000018).

96/11/18 10:48:36.77 spid11 Error : 840, Severity: 17, State: 2

96/11/18 10:48:36.77 spid11 Device 'MSDBData' (with physical name
'C:\MSSQL\DATA\MSDB.DAT' (or C:\DATA\SQL\MSDB.MDF), and virtual device number 127) is not
available. Please contact System Administrator for assistance.

96/11/18 10:48:36.77 spid11
Buffer 1092480 from database 'msdb' has page number 0 in the page header
and page number 24 in the buffer header

96/11/18 10:48:37.43 spid11 Unable to proceed with the recovery of
dbid <5> because of previous errors. Continuing with the next
database.


たとえば、以下の操作を行うと問題が発生します。
  1. SQL Server を停止します。
  2. SQL Server 6.0 および 6.5 の場合、コマンド プロンプトから Mssql\Data ディレクトリで次のコマンドを発行します。

    ren msdb.dat msdb.sav

    SQL Server 7.0 の場合、次のコマンドを発行します。

    ren msdb.mdf msdb.sav
  3. SQL Server を起動します。
SQL Server エラーログに上記のエラー (2 番目のメッセージ セット) が表示されます。master データベースについて次のクエリを発行します。
   select name, dbid, mode, status from sysdatabases where dbid =
   db_id('msdb')

次のような結果が表示されます。
   name     dbid   mode   status
   ------------------------------
   msdb      5      0      328

ステータス 328 は次のように評価されます。
   truncate log on chkpt
   database not recovered yet
   database is suspect

詳細については、SQL Server Books Online の "Sysdatabases (Master Database Only)" ト ピックを参照してください。

原因

起動時に、SQL Server はデバイス ファイルの排他的ロックを取得しようとします。デバ イスが別のプロセス (バックアップ ソフトウェアなど) によって使用されている場合、またはファイルが見つからない場合は、上記のようなエラーが発生します。これらのケースでは、通常はデバイスおよびデータベースに問題はありません。データベースを正しく復旧するためには、デバイスを使用できるようにし、データベースの状態をリセットする必要があります。

回避策

この問題を回避するには、次の操作を行います。最後の操作は特に重要です。
  1. デバイス ファイルが実際に使用可能であることを確認します。
  2. 追加ストアド プロシージャ sp_resetstatus を使用して、データベースの未確認状態をリ セットします。sp_resetstatus の詳細については、SQL Server Books Online の "Resetting the Suspect Status" トピックを参照してください。SQL Server 6.0 および 6.5 の場合、このプロシージャをまだ作成していないときは、Mssql\Install ディレクトリの Instsupl.sql スクリプトを実行してこのプロシージャを作成します。SQL Server 7.0 以降の場合、このプロシージャは、Mssql\Install ディレクトリの inscat.sql スクリプトによってインストール時に作成されます。
  3. 追加ストアド プロシージャ sp_resetstatus を使用して、データベースの未確認状態をリ セットします。このプロシージャをまだ作成していないときは、Mssql\Install ディレクトリの Instsupl.sql スクリプトを実行してこのプロシージャを作成します。sp_resetstatus の詳細については、SQL Server Books Online の "Resetting the Suspect Status" トピックを参照してください。
  4. 未確認状態のデータベースに対して、master データベースで sp_resetstatus を実行します。
          use master
          go
          exec sp_resetstatus msdb   -- msdb をご使用の DB 名に変更してください。
     
    
    次のように出力されます。
          Prior to Update sysdatabases attempt for DBName='msdb', the mode=0
          and status=328 (status suspect_bit=256). For DBName='msdb' in
          sysdatabases, status bit 256 was forced Off and mode was forced to
          0. WARNING: You MUST stop/restart SQL Server prior to accessing this
          database!
     
    
  5. SQL Server を停止して再起動します。
  6. データベースが復旧して使用可能になったことを確認します。
  7. DBCC NEWALLOC、DBCC TEXTALL、および DBCC CHECKDB を実行します。

詳細

上記の操作を行ってもデータベースの状態が未確認のままの場合、ほかの問題が復旧を妨害している可能性があります。そのときは、バックアップからデータベースを復元するか、データベースを緊急モードにして一括コピー プログラム (BCP) でデータを一括コピーできます。詳細については、Microsoft Knowledge Base の以下の記事を参照してください。
165918 : INF: Bypass (Emergency) Mode and DUMP TRANSACTION WITH NO_LOG

重要 : この記事 (Q165918) を使用する場合、操作結果が事前にあいまいなときは、サポート プ ロバイダに問い合わせてください。

詳細

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 180500 (最終更新日 2000-03-28) をもとに作成したものです。

プロパティ

文書番号: 180500 - 最終更新日: 2004年9月7日 - リビジョン: 1.1
この資料は以下の製品について記述したものです。
  • Microsoft SQL Server 1.1 Standard Edition
キーワード:?
kbtshoot ssrvgen KB180500
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com