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