MSSQLSERVER_5009
Si applica a: SQL Server
Dettagli
Attributo | Valore |
---|---|
Nome prodotto | SQL Server |
ID evento | 5009 |
Origine evento | MSSQLSERVER |
Componente | SQLEngine |
Nome simbolico | ALT_BADDISKS |
Testo del messaggio | Impossibile trovare o inizializzare uno o più file elencati nell'istruzione |
Spiegazione
Questo errore indica che è stato specificato un nome di file o fileID nel comando ALTER DATABASE o DBCC SHRINK* che non è stato possibile risolvere.
Prendi in considerazione lo scenario seguente:
- Si dispone di un database di Microsoft SQL Server che usa un modello di recupero con registrazione completa o con registrazione minima delle operazioni bulk.
- Viene aggiunto un nuovo file di dati denominato db_file1 al database.
- Si imposta il tipo di file per il file
db_file1
come dati. - Ci si rende conto che il tipo di file è stato specificato in modo errato.
- Si rimuove il file
db_file1
e quindi si esegue il backup del log delle transazioni per questo database. - Si aggiunge un nuovo file di log denominato db_file1 allo stesso database.
- Si tenta di rimuovere il file di log denominato db_file1 usando l'istruzione ALTER DATABASE o sql Server Management Studio.
In questo caso, è possibile che venga visualizzato un messaggio di errore analogo al seguente:
Messaggio 5009, livello 16, stato 9, riga 1 Impossibile trovare o inizializzare uno o più file elencati nell'istruzione.
Possibili cause
Questo problema si verifica se il nome logico del file che si tenta di rimuovere non è univoco nelle tabelle del catalogo di sistema. Questo problema si verifica, ad esempio, se il file esisteva in precedenza nel database e poi è stato rimosso.
Quando si tenta di rimuovere un file con lo stesso nome logico, SQL Server tenta di rimuovere il file logico eliminato. Questa condizione genera il messaggio di errore.
Azione utente
Per risolvere il problema, seguire questa procedura.
Nota
Questa procedura causa il riutilizzo dei valori di ID dei file.
Usare l'istruzione ALTER DATABASE per creare un nuovo file logico con un nome diverso e lo stesso tipo di dati. Ad esempio, denominare il file logico
different_remove_file_name
anzichédb_file1
, come nell'esempio seguente: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)
Nota
È possibile usare qualsiasi nome o percorso di file.
Usare l'istruzione ALTER DATABASE per rimuovere il file logico creato nel passaggio 1, come nell'esempio seguente:
ALTER DATABASE [DBNAME] REMOVE FILE [different_remove_file_name]
Eseguire un backup del log delle transazioni del database.
Provare a rimuovere di nuovo il file logico denominato db_file1.