MSSQLSERVER_605MSSQLSERVER_605

DettagliDetails

Nome prodottoProduct Name SQL ServerSQL Server
ID eventoEvent ID 605605
Origine eventoEvent Source MSSQLSERVERMSSQLSERVER
ComponenteComponent SQLEngineSQLEngine
Nome simbolicoSymbolic Name WRONGPAGEWRONGPAGE
Testo del messaggioMessage Text Impossibile recuperare la pagina logica %S_PGID nel database %d,Attempt to fetch logical page %S_PGID in database %d failed. poiché appartiene all'unità di allocazione %I64d, non a %I64d.It belongs to allocation unit %I64d not to %I64d.

SpiegazioneExplanation

Questo errore in genere indica il danneggiamento di una pagina o un'allocazione nel database specificato.This error generally signifies page or allocation corruption in the specified database. SQL ServerSQL Server rileva il danneggiamento durante la lettura di pagine appartenenti a una tabella seguendo i collegamenti delle pagine o usando la mappa di allocazione degli indici (IAM, Index Allocation Map). detects corruption when reading pages belonging to a table either by following the page linkages or by using the Index Allocation Map (IAM). Tutte le pagine allocate a una tabella devono appartenere a una delle unità di allocazione associate alla tabella.All pages allocated to a table must belong to one of the allocation units associated with the table. Se l'ID dell'unità di allocazione incluso nell'intestazione della pagina non corrisponde a uno degli ID di unità di allocazione associati alla tabella, viene generata questa eccezione.If the allocation unit ID contained in the page header does not match an allocation unit ID associated with the table, this exception is raised. Il primo ID di unità di allocazione elencato nel messaggio di errore è l'ID presente nell'intestazione di pagina, mentre il secondo è quello associato alla tabella.The first allocation unit ID listed in the error message is the ID present in the page header, and the second allocation unit value is the ID associated with the table.

Errori di danneggiamento dei datiData Corruption Errors

Un livello di gravità pari a 21 indica un potenziale danneggiamento dei dati.A severity level of 21 indicates potential data corruption. Le possibili cause sono una catena di pagine o una mappa di allocazione degli indici danneggiata oppure una voce non valida nella vista del catalogo sys.objects per l'oggetto.Possible causes are a damaged page chain, a corrupt IAM, or an invalid entry in the sys.objects catalog view for that object. Questi errori spesso sono causati da errori hardware o dei driver di dispositivi disco.These errors are often caused by hardware or disk device driver failure.

Errori transitoriTransient Errors

Un livello di gravità pari a 12 indica un potenziale errore transitorio, ovvero un errore che si verifica nella cache e non implica danneggiamento di dati sul disco.A severity level of 12 indicates a potential transient error; that is, it occurs in the cache and does not indicate damage to data on disk. Gli errori 605 di tipo transitorio possono essere causati dalle condizioni seguenti:Transient 605 errors can be caused by the following conditions:

  • Invio di una notifica anomala a SQL ServerSQL Server da parte del sistema operativo per informare che è stata completata un'operazione di I/O. Il messaggio di errore viene visualizzato anche se non si è effettivamente verificato alcun danneggiamento di dati.The operating system prematurely notifies SQL ServerSQL Server that an I/O operation has completed; the error message is displayed even though no actual data corruption exists.

Esecuzione di una query con l'hint di Query Optimizer NOLOCK o impostazione del livello di isolamento della transazione su READ UNCOMMITTED.Running a query with the Optimizer hint NOLOCK or setting the transaction isolation level to READ UNCOMMITTED. Quando una query che utilizza NOLOCK o READ UNCOMMITTED tenta di leggere dati spostati o modificati da un altro utente, si verifica un errore 605.When a query that is using NOLOCK or READ UNCOMMITTED tries to read data that is being moved or changed by another user, a 605 error occurs. Per verificare che si tratti di un errore 605 transitorio, eseguire di nuovo la query in un secondo momento.To verify that it is a transient 605 error, rerun the query later. Per altre informazioni, vedere l'articolo 235880 della Knowledge Base relativo alla visualizzazione del messaggio di errore 605 quando si esegue una query con l'hint di ottimizzazione NOLOCK o quando si imposta il livello di isolamento delle transazioni su READ UNCOMMITTED in SQL Server.For more information, see this KB article 235880: "You receive an "Error 605" error message when you run a query with the optimizer hint NOLOCK or you set the transaction isolation level to READ UNCOMMITTED in SQL Server."

In generale, se l'errore si verifica durante l'accesso ai dati ma le successive operazioni DBCC CHECKDB vengono completate senza errori, l'errore 605 era probabilmente transitorio.In general, if the error occurs during data access but subsequent DBCC CHECKDB operations complete without error, the 605 error was probably transient.

Azione dell'utenteUser Action

Se l'errore 605 non è temporaneo, il problema è grave e deve essere corretto eseguendo una delle operazioni seguenti:If the 605 error is not transient, the problem is severe and must be corrected by performing the following tasks:

  1. Identificare le tabelle associate alle unità di allocazione specificate nel messaggio eseguendo la query seguente.Identify the tables associated with the allocation units specified in the message by running the following query. Sostituire allocation_unit_id con le unità di allocazione specificate nel messaggio di errore.Replace allocation_unit_id with the allocation units specified in the error message.

    USEdatabase_name;USEdatabase_name;

    GOGO

    SELECT au.allocation_unit_id, OBJECT_NAME(p.object_id) AS table_name, fg.name AS filegroup_name,SELECT au.allocation_unit_id, OBJECT_NAME(p.object_id) AS table_name, fg.name AS filegroup_name,

    au.type_desc AS allocation_type, au.data_pages, partition_numberau.type_desc AS allocation_type, au.data_pages, partition_number

    FROM sys.allocation_units AS auFROM sys.allocation_units AS au

    JOIN sys.partitions AS p ON au.container_id = p.partition_idJOIN sys.partitions AS p ON au.container_id = p.partition_id

    JOIN sys.filegroups AS fg ON fg.data_space_id = au.data_space_idJOIN sys.filegroups AS fg ON fg.data_space_id = au.data_space_id

    WHERE au.allocation_unit_id = allocation_unit_id OR au.allocation_unit_id = allocation_unit_idWHERE au.allocation_unit_id = allocation_unit_id OR au.allocation_unit_id = allocation_unit_id

    ORDER BY au.allocation_unit_id;ORDER BY au.allocation_unit_id;

    GOGO

  2. Eseguire DBCC CHECKTABLE senza una clausola REPAIR nella tabella associata al secondo ID di unità di allocazione specificato nel messaggio di errore.Execute DBCC CHECKTABLE without a REPAIR clause on the table associated with the second allocation unit ID specified in the error message.

  3. Eseguire DBCC CHECKDB senza una clausola REPAIR il prima possibile, per determinare l'entità del danno all'intero database.Execute DBCC CHECKDB without a REPAIR clause as soon as possible to determine the full extent of the corruption in the entire database.

  4. Verificare se nel log degli errori sono presenti altri errori spesso associati all'errore 605 e verificare se nel registro eventi di Windows sono presenti segnalazioni di eventuali problemi relativi al sistema o all'hardware.Check the error log for other errors that often accompany a 605 error and examine the Windows Event Log for any system or hardware related issues. Risolvere tutti i problemi relativi all'hardware indicati nei log.Fix any hardware-related problems that are contained in the logs.

Se il problema non è hardware, effettuare una delle operazioni seguenti:If the problem is not hardware related, perform one of the following tasks:

  1. Ripristinare il database da un backup valido noto.Restore the database from a known clean backup. Per ripristinare solo le pagine danneggiate, è possibile utilizzare la caratteristica di backup per il ripristino di pagina.You can leverage the page restore backup feature to restore just the damaged pages.

  2. Per correggere il danneggiamento, eseguire DBCC CHECKDB con la clausola REPAIR consigliata dall'operazione DBCC CHECKDB eseguita nel passaggio 3.Run DBCC CHECKDB with the REPAIR clause recommended by the DBCC CHECKDB operation performed in step 3 to repair the corruption. Se l'esecuzione di DBCC CHECKDB con una clausola REPAIR non consente di risolvere il problema, contattare il personale del supporto tecnico.If running DBCC CHECKDB with one of the REPAIR clauses does not correct the problem, contact your primary support provider. Accertarsi di avere l'output di DBCC CHECKDB disponibile per la consultazione.Have the output from DBCC CHECKDB available for review.

    Attenzione

    Se non si è certi dell'effetto prodotto sui dati dall'esecuzione di DBCC CHECKDB con la clausola REPAIR, contattare il personale del supporto tecnico prima di eseguire l'istruzione.If you are not sure what effect DBCC CHECKDB with a REPAIR clause has on your data, contact your primary support provider before running this statement.

Vedere ancheSee Also

DBCC CHECKTABLE (Transact-SQL)DBCC CHECKTABLE (Transact-SQL)