Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Per controllo della concorrenza si intendono le diverse tecniche utilizzate per mantenere l'integrità del database quando più utenti aggiornano le righe contemporaneamente. Una gestione non corretta della concorrenza può causare problemi come letture sporche, letture fantasma e letture non ripetibili. Microsoft JDBC Driver per SQL Server fornisce interfacce per tutte le tecniche di concorrenza usate da SQL Server per risolvere questi problemi.
Nota
Per altre informazioni sulla concorrenza di SQL Server, vedere "Gestione dell'accesso ai dati simultaneo".
Osservazioni:
Il driver JDBC supporta i tipi di concorrenza seguenti:
| Tipo di concorrenza | Caratteristiche | Blocchi a livello di riga | Descrizione |
|---|---|---|---|
| CONCUR_READ_ONLY | Sola lettura | No | Gli aggiornamenti eseguiti tramite il cursore non sono consentiti e sulle righe del set di risultati non viene mantenuto attivo alcun blocco. |
| CONCUR_UPDATABLE | Lettura/scrittura ottimistica | No | Il database presume che la contesa a livello di riga sia improbabile, ma possibile. L'integrità delle righe viene verificata tramite confronto del timestamp. |
| CONCUR_SS_SCROLL_LOCKS | Lettura/scrittura pessimistica | Sì | Il database presume che la contenzione a livello di riga sia probabile. L'integrità delle righe è garantita dal blocco delle righe. |
| CONCUR_SS_OPTIMISTIC_CC | Lettura/scrittura ottimistica | No | Il database presuppone che la contenzione tra righe sia improbabile, ma possibile. L'integrità delle righe viene verificata tramite confronto del timestamp. In SQL Server 2005 (9.x) e versioni successive il server modifica questa impostazione in CONCUR_SS_OPTIMISTIC_CCVAL se la tabella non contiene una colonna timestamp. In SQL Server 2000 (8.x), se la tabella sottostante contiene una colonna timestamp, viene usata l'opzione OPTIMISTIC WITH ROW VERSIONING anche se è specificata l'opzione OPTIMISTIC WITH VALUES. Se viene specificato OPTIMISTIC WITH ROW VERSIONING e la tabella non dispone di timestamp, viene utilizzato OPTIMISTIC WITH VALUES. |
| CONCUR_SS_OPTIMISTIC_CCVAL | Lettura/scrittura ottimistica | No | Il database presuppone che i conflitti tra righe siano improbabili, ma possibili. L'integrità delle righe viene verificata tramite confronto dei dati della riga. |
Set di risultati non aggiornabili
Un set di risultati aggiornabile è un set di risultati in cui è possibile inserire, aggiornare ed eliminare righe. Nei casi seguenti SQL Server non può creare un cursore aggiornabile. e viene generata l'eccezione "Il set di risultati non è aggiornabile".
| Causa | Descrizione | Rimedio |
|---|---|---|
| L'istruzione non viene creata utilizzando la sintassi JDBC 2.0 (o versioni successive) | JDBC 2.0 ha introdotto nuovi metodi per creare statement. Se viene utilizzata la sintassi JDBC 1.0, il set di risultati per impostazione predefinita è di sola lettura. | Specificare il tipo di set di risultati e la concorrenza in fase di creazione dell'istruzione. |
| L'istruzione viene creata utilizzando TYPE_SCROLL_INSENSITIVE | SQL Server crea un cursore snapshot statico. Il cursore è disconnesso dalle righe della tabella sottostante per proteggerlo dagli aggiornamenti apportati alle righe da altri utenti. | Utilizzare TYPE_SCROLL_SENSITIVE, TYPE_SS_SCROLL_KEYSET, TYPE_SS_SCROLL_DYNAMIC o TYPE_FORWARD_ONLY con CONCUR_UPDATABLE per evitare di creare un cursore statico. |
| La struttura della tabella non consente un cursore di tipo KEYSET o DYNAMIC | La tabella sottostante non contiene chiavi univoche per consentire a SQL Server di identificare in modo univoco una riga. | Aggiungere chiavi univoche alla tabella per consentire l'identificazione univoca di ogni riga. |