Condividi tramite


Timeout di blocco

Quando Microsoft SQL Server Compact 4.0 non è in grado di concedere un blocco a una transazione su una risorsa, poiché un'altra transazione detiene già un blocco in conflitto su tale risorsa, la transazione che richiede il blocco viene bloccata finché l'altra transazione non rilascia il blocco. Questa situazione può essere anche il risultato di un deadlock. In SQL Server Compact 4.0 esiste un periodo di timeout di blocco predefinito di due secondi. Non è possibile verificare se una risorsa sia bloccata prima di bloccarla, a meno che non si tenti di accedere ai dati e di provocare il potenziale timeout.

Nota

È possibile utilizzare la vista di sistema sys.lock_information per determinare se sia in corso il blocco di una richiesta di blocco e che cosa la stia bloccando. Per ulteriori informazioni, vedere Visualizzazione delle informazioni sui blocchi.

L'impostazione LOCK_TIMEOUT consente a un'applicazione di impostare per un'istruzione un tempo massimo di attesa di una risorsa bloccata. Quando il tempo di attesa di un'istruzione supera il valore specificato dall'impostazione LOCK_TIMEOUT, l'istruzione bloccata viene automaticamente annullata e viene restituito all'applicazione il messaggio di errore SSCE_M_LOCKTIMEOUT, "Timeout del sistema in attesa di un blocco". Tuttavia, SQL Server Compact 4.0 non consente di eseguire il rollback o di annullare qualsiasi transazione contenente l'istruzione. È necessario che nell'applicazione esista un gestore di errori che sia in grado di intercettare il messaggio di errore SSCE_M_LOCKTIMEOUT. Se l'errore non viene intercettato dall'applicazione, si procede senza sapere che è stata annullata una singola istruzione all'interno di una transazione. Potrebbero quindi verificarsi errori perché le istruzioni successive nella transazione potrebbero dipendere dall'istruzione non eseguita.

L'implementazione di un gestore di errori in grado di intercettare il messaggio di errore SSCE_M_LOCKTIMEOUT consente a un'applicazione di gestire la situazione di timeout e di intraprendere un'azione di correzione, quale il reinvio automatico dell'istruzione bloccata o il rollback dell'intera transazione.

Per configurare l'impostazione LOCK_TIMEOUT corrente per una sessione, eseguire la sintassi SET LOCK_TIMEOUT, come illustrato nell'esempio di codice seguente:

SET LOCK_TIMEOUT 2000;

Vedere anche

Concetti

Informazioni sul blocco

Livello di isolamento della transazione

Hint di blocco