MSSQLSERVER_5009

適用対象:SQL Server

詳細

属性
製品名 SQL Server
イベント ID 5009
イベント ソース MSSQLSERVER
コンポーネント SQLEngine
シンボル名 ALT_BADDISKS
メッセージ テキスト ステートメントに一覧されている 1 つ以上のファイルが見つからなかったか、初期化できませんでした

説明

このエラーは、 ALTER DATABASE またはDBCC SHRINK*コマンドでファイル名またはファイルIDを指定し、解決できなかったことを示しています。

以下のシナリオについて考えてみます。

  • 完全復旧モデルまたは一括ログ復旧モデルを使用する Microsoft SQL Server データベースがある。
  • db_file1 という名前の新しいデータ ファイルをデータベースに追加する。
  • db_file1 ファイルのファイルの種類をデータとして設定する。
  • ファイルの種類を正しく指定しなかったことに気付く。
  • db_file1 ファイルを削除してから、このデータベースのトランザクション ログをバックアップする。
  • 同じデータベースに db_file1 という名前の新しいログ ファイルを追加する。
  • db_file1と名付けられたログファイルを削除するには、ALTER DATABASE文を使うかSQL Server Management Studioを使う方法があります。

この場合に、次のようなエラー メッセージが表示されます。

メッセージ 5009、レベル 16、状態 9、行 1 ステートメントに一覧されている 1 つ以上のファイルが見つからなかったか、初期化できませんでした。

考えられる原因

この問題は、削除しようとしたファイルの論理名がシステム カタログ テーブル内で一意でない場合に発生します。 たとえば、この問題は、以前にデータベースにファイルが存在していて、その後、そのファイルが削除された場合に発生します。

同じ論理名を持つファイルを削除しようとすると、SQL Server は削除された論理ファイルの削除を試みます。 この結果、エラー メッセージが表示されます。

ユーザー アクション

この問題を回避するには、次の手順を実行します。

Note

これらの手順を行うと、ファイル ID の値が再利用されます。

  1. ALTER DATABASE文を使って、異なる名前と同じデータ型を持つ新しい論理ファイルを作成します。 たとえば、次の例のように、論理ファイルに different_remove_file_name ではなく、db_file1 という名前を付けます。

    ALTER DATABASE [DBNAME] ADD FILE ( NAME = N'different_remove_file_name',
    FILENAME = N'D:\MSSQL.1\MSSQL\DATA\db_file1.ndf', SIZE = 1MB, MAXSIZE = 1MB)
    

    Note

    任意のファイル名または任意のファイル パスを使用できます。

  2. ALTER DATABASE文を使って、ステップ1で作成した論理ファイルを削除してください。以下の例のように:

    ALTER DATABASE [DBNAME] REMOVE FILE [different_remove_file_name]
    
  3. データベースのトランザクション ログ バックアップを作成します。

  4. もう一度 db_file1 という名前の論理ファイルを削除してみてください。