現在オフラインです。再接続するためにインターネットの接続を待っています

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

この記事は、以前は次の 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 - 最終更新日: 12/05/2015 08:22:01 - リビジョン: 1.1

  • Microsoft SQL Server 1.1 Standard Edition
  • kbnosurvey kbarchive kbtshoot ssrvgen KB180500
フィードバック