Sintomi
Si tenta di eseguire un backup, ritiro o modificare il comando di database in SQL Server e si verificano i seguenti messaggi:
Msg 3023, livello 16, stato 2, riga 1
Operazioni di manipolazione di backup e i file (ad esempio ALTER DATABASE ADD FILE) su un database devono essere serializzate. Rieseguire l'istruzione dopo il completamento dell'operazione di modifica di backup o il file corrente.
Msg 3013, livello 16, stato 1, riga 1
BACKUP DATABASE in corso.
Inoltre, il log degli errori di SQL Server contiene messaggi simile al seguente:
12-05-2014 01:00:28.05 errore di Backup: 3041, gravità: 16, stato: 1.
12-05-2014 01:00:28.05 BACKUP di Backup non riuscito completare il comando BACKUP DATABASE MyDatabase WITH DIFFERENTIAL. Controllare il registro applicazione di backup per informazioni dettagliate sui messaggi.
È inoltre possibile che si verifichino questi comandi un "wait_type = LCK_M_U" e "wait_resource = DATABASE: < id > [BULKOP_BACKUP_DB] " quando lo stato di questi comandi viene visualizzato dalle varie viste a gestione dinamica (DMV), ad esempio sys.dm_exec_requests o sys.dm_os_waiting_tasks.
Causa
Esistono più regole in cui le operazioni sono consentite o non è consentite quando è in corso su un database completo di un database. Di seguito sono riportati alcuni esempi:
-
Backup dei dati di un solo può verificarsi in un momento (quando un backup completo del database si verifica, non è possibile eseguire backup differenziali o incrementali contemporaneamente).
-
Può accadere backup di un solo log alla volta (un backup del log è consentito quando è in corso un backup completo del database).
-
È possibile aggiungere o eliminare file in un database mentre è in corso un backup.
-
Non è possibile compattare i file mentre sono in corso il backup del database.
-
Esistono modifiche al modello di recupero limitato consentite durante i backup sono in corso.
Quando vengono eseguite queste operazioni in conflitto, i comandi rileverà le attese di blocco menzionati nella sezione "Sintomi" seguita dall'utente riceva i messaggi 3023 e 3041.
Risoluzione
Esaminare le pianificazioni delle varie attività di manutenzione del database e quindi modificare le pianificazioni in modo che queste operazioni o comandi non sono in conflitto tra loro.
Ulteriori informazioni
SQL Server registra l'ora di inizio e l'ora di fine del backup del database msdb. È possibile esaminare la cronologia di backup per determinare se è stata un backup completo del database che si verificano durante un backup incrementale è stato tentato e pertanto ha causato l'errore. Per semplificare questo processo, è possibile utilizzare la seguente query:
select database_name, type, backup_start_date, backup_finish_date
from msdb.dbo.backupset
order by database_name, type, backup_start_date, backup_finish_date
go
È possibile utilizzare anche l'evento "Messaggio di errore utente" nella traccia di SQL Profiler o l'evento "error_reported" negli eventi estesi per registrare la segnalazione dei 3023 messaggi nuovamente all'applicazione che ha avviato il backup o altri comandi di manutenzione.