Quando più utenti tentano di aggiornare simultaneamente un record, il modello di blocco del database garantisce che l'aggiornamento da parte di ciascun utente venga eseguito in modo unitario, ma ciascun aggiornamento sovrascrive quello precedente. Un modello di blocco esplicito (pessimistico) impedisce perdite impreviste di aggiornamenti di dati e controlla il flusso di lavoro quando si verificano aggiornamenti simultanei da parte di più di un utente.
Il modello di blocco ottimistico consente a più utenti simultaneamente di visualizzare e tentare di modificare un record, ma impedisce a tutti gli utenti, tranne che al primo, di eseguire il commit delle modifiche. Gli utenti non sanno che altri utenti stanno tentando di aggiornare il record.
Le modifiche del record vengono convalidate quando viene eseguito il commit del record. Se un altro utente ha già aggiornato il record, per gli altri aggiornamenti simultanei viene notificata la presenza di un conflitto quando gli altri utenti tentano di inoltrare i propri aggiornamenti simultanei.
Per impostazione predefinita. i record non sono bloccati quando vengono visualizzati in un'applicazione client di ClearQuest. Di conseguenza, qualsiasi progettazione degli schemi che utilizza una singola sede o un ambiente replicato deve essere considerata.
L'integrità dei dati viene assicurata verificando, nel momento in cui un utente fa clic sul pulsante Applica, se un altro utente ha aggiornato il record ed eseguito il commit della modifica quando ancora in fase di effettuazione delle modifiche. In tal caso, non è possibile eseguire il commit degli aggiornamenti dell'utente sul database in quanto questa operazione potrebbe perdere alcune delle modifiche degli altri utenti. L'utente che tenta di eseguire il commit delle modifiche dopo l'aggiornamento del record da parte di un altro utente riceverà un messaggio di errore in cui viene indicato che non è stato eseguito il commit delle modifiche nel database.
In scenari complicati che riguardano gli aggiornamenti coordinati su più record correlati, è opportuno assicurarsi che questo funzionamento non provochi un problema. Poiché il blocco ottimistico è efficace individualmente su ciascun record, è necessario che l'applicazione assicuri che i record vengano aggiornati nel corretto ordine e gestisca gli errori per aggiornare un record subordinato se un altro utente lo ha aggiornato tra l'inizio dell'azione e l'esecuzione del commit delle modifiche. La progettazione degli schemi può ritentare l'operazione oppure riconoscere l'errore e invertire l'aggiornamento del record padre o può eseguire il commit dell'aggiornamento del record padre anche se l'aggiornamento del record subordinato non è riuscito.
Il blocco pessimistico fornisce un meccanismo per evitare situazioni in cui più utenti modificano simultaneamente un record. Il modello di blocco pessimistico applica la modifica sequenziale dei record e impedisce l'aggiornamento simultaneo dei record. Non appena un utente inizia ad aggiornare un record, questo modello inserisce un blocco sul record. Gli altri utenti che tentano di iniziare ad aggiornare questo record vengono informati che un altro utente ha già avviato un aggiornamento, pertanto non possono eseguire la modifica. Gli utenti che desiderano aggiornare simultaneamente il record devono attendere finché il primo utente non termina di eseguire il commit del record. A questo punto, l'altro utente potrà acquisire il blocco ed eseguire le modifiche dopo le modifiche del primo utente. Questo modello evita il problema della risoluzione dei conflitti, evitando i conflitti. Gli aggiornamenti vengono serializzati e ciascun aggiornamento successivo inizia con il record già aggiornato con le modifiche dell'utente precedente.
Per utilizzare il blocco dei record pessimistico, è necessario aggiungere il codice hook ai tipi di record che desiderano utilizzarlo. Il codice hook deve essere aggiunto come una nuova azione di tipo BASE per ciascun tipo di record. La rimozione manuale dei blocchi può essere eseguita con il codice hook implementato come un alias dello script del record. È possibile utilizzare una query di ClearQuest per trovare i record bloccati, cercando i record con il campo locked_by contenente valori non nulli. La colonna del database utente locked_by è una colonna con valori interi in cui vengono registrati gli ID di collegamento dell'utente quando un record è bloccato.
Il blocco pessimistico rappresenta un modello utile quando non sono necessari dei reali aggiornamenti simultanei e gli aggiornamenti successivi possono essere rinviati finché non viene completato un aggiornamento precedente. Generalmente, ciò implica che gli aggiornamenti vengono eseguiti in un intervallo di tempo molto breve. Gli aggiornamenti che detengono il blocco per lunghi periodi di tempo impediscono ad altri utenti di aggiornare il record.