Condividi tramite


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.

  1. 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.

  2. 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]
    
  3. Eseguire un backup del log delle transazioni del database.

  4. Provare a rimuovere di nuovo il file logico denominato db_file1.