次の方法で共有


MSSQLSERVER_5009

適用対象: SQL サーバー

詳細

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

説明

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

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

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

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

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

考えられる原因

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

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

ユーザー アクション

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

Note

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

  1. ALTER DATABASE ステートメントを使用して、名前が異なり、データ型が同じである新しい論理ファイルを作成します。 たとえば、次の例のように、論理ファイルに db_file1 ではなく、different_remove_file_name という名前を付けます。

    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 という名前の論理ファイルを削除してみてください。