適用対象: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 の値が再利用されます。
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
任意のファイル名または任意のファイル パスを使用できます。
ALTER DATABASE文を使って、ステップ1で作成した論理ファイルを削除してください。以下の例のように:
ALTER DATABASE [DBNAME] REMOVE FILE [different_remove_file_name]データベースのトランザクション ログ バックアップを作成します。
もう一度 db_file1 という名前の論理ファイルを削除してみてください。