Errore di asserzione in un server mirror quando si usa l'architettura di mirroring di SQL Server

Questo articolo illustra un errore di asserzione di Microsoft SQL Server che può verificarsi in un server partner quando si usa l'architettura del mirroring di SQL Server.

Versione originale del prodotto: SQL Server 2014, SQL Server 2012, SQL Server 2008 R2, SQL Server 2008
Numero KB originale: 2729953

Sintomi

Nell'architettura del mirroring di SQL Server è possibile che si verifichi un errore di controllo dell'asserzione di SQL Server nel server partner (mirror). In questo caso, controllare il log degli errori di SQL Server per informazioni dettagliate. Nel log verrà visualizzato un messaggio di errore simile al messaggio seguente. Questo errore significa in genere che è necessario ricompilare la coppia mirror.

Asserzione DI SQL Server: File: loglock.cpp, line=834 Failed Assertion = 'result == LCK_OK' . Questo errore può essere correlato all'intervallo. Se l'errore persiste dopo aver eseguito nuovamente l'istruzione, usare DBCC CHECKDB per controllare l'integrità strutturale del database o riavviare il server per assicurarsi che le strutture di dati in memoria non siano danneggiate.

Errore: 3624, gravità: 20, stato: 1.

Gli errori di asserzione sono in genere causati da bug del software o dal danneggiamento dei dati. Per verificare la presenza di danneggiamento del database, è consigliabile eseguire DBCC CHECKDB. Se si accetta di inviare dump a Microsoft durante l'installazione, verrà inviato un minidump a Microsoft. È possibile che sia disponibile un aggiornamento nell'ultimo Service Pack o in una correzione QFE (Quick Fix Engineering) del supporto tecnico.

Annotazioni

Quando si verifica questo problema, viene generato un file minidump nella cartella del log degli errori di SQL Server. Questo file ha un nome simile al nome del file SQLDumpnnnn.mdmp .

Motivo

Questo problema può verificarsi in scenari diversi. Ogni scenario ha una causa e una risoluzione diverse e ogni scenario può causare lo stesso messaggio di errore e errore di asserzione.

Annotazioni

  • Anche se la firma di errore sembra essere molto specifica, l'errore effettivo è causato da un'asserzione non riuscita. Ad esempio, l'errore potrebbe essere causato da un'asserzione che esegue un controllo proattivo nel codice di SQL Server che convalida le condizioni integre per avere esito negativo il più possibile invece di causare un arresto anomalo a livello di processo.
  • Non è possibile determinare facilmente la causa effettiva. I servizi di supporto tecnico Microsoft determinano in genere la causa. Viene in genere eseguita raccogliendo il file di backup completo del database principale e i backup del log delle transazioni che coprono il tempo del problema. Inoltre, potrebbe essere necessario un file di dump completo del processo del mirror per riprodurre il problema in impostazioni specifiche.

Risoluzione

Per risolvere questo problema, ottenere la correzione più recente per la versione di SQL Server. Per altre informazioni, vedere la tabella seguente.

Motivo Articolo della Knowledge Base Prima correzione in
Comportamento di blocco diverso tra il database primario e il mirror 2938828 FIX: il mirroring del database raggiunge l'asserzione e la sessione di mirroring mostra lo stato sospeso in SQL Server 2012 o SQL Server 2014 2931693 aggiornamento cumulativo 1 per SQL Server 2014 , 2931078 aggiornamento cumulativo 9 per SQL Server 2012 SP1
Inserimento bulk/BCP con Check_Constraints OFF SQL Server 2012
Modifica delle chiavi di crittografia: chiave master del database, chiave master dell'istanza del server SQL Server 2012

Annotazioni

  • Nella tabella precedente l'ultima colonna elenca solo la prima compilazione contenente la correzione. Poiché le compilazioni di SQL Server sono cumulative, le compilazioni successive, ad esempio SQL Server 2014 SP1, contengono tali correzioni. Tuttavia, queste compilazioni non sono elencate nella tabella.
  • Per altre informazioni su come ottenere il Service Pack più recente per la versione di SQL Server, vedere Determinare la versione, l'edizione e il livello di aggiornamento. Lo scenario BCP/Bulk Insert è uno scenario comune che rimane non risolto per SQL Server 2008 e SQL Server 2008 R2 ed è la causa più probabile delle asserzioni lck_ok in tali versioni. Il problema è stato risolto per la prima volta in SQL Server 2012. Il motivo per cui non è stato corretto nelle versioni precedenti è che richiede una riarchitettura degli elementi interni del log delle transazioni di SQL Server. Tale modifica può essere inclusa solo con una versione principale di SQL Server.

Vedere anche

Asserzione quando si esegue l'inserimento massivo o BCP