Informazioni sul controllo della concorrenza
Per controllo della concorrenza si intendono le diverse tecniche utilizzate per mantenere l'integrità del database quando più utenti aggiornano le righe contemporaneamente. Una concorrenza non corretta può causare problemi come letture dirty, 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 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 | Ottimistica di lettura e scrittura | No | Si presuppone che le contese tra le righe nel database siano improbabili, ma possibili. L'integrità delle righe viene verificata tramite confronto del timestamp. |
CONCUR_SS_SCROLL_LOCKS | Pessimistica di lettura e scrittura | Sì | Si presuppone che le contese tra le righe nel database siano probabili. L'integrità delle righe viene assicurata tramite i blocchi di riga. |
CONCUR_SS_OPTIMISTIC_CC | Ottimistica di lettura e scrittura | No | Si presuppone che le contese tra le righe nel database siano improbabili, ma possibili. 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 si specifica l'opzione OPTIMISTIC WITH ROW VERSIONING e nella tabella non sono incluse colonne timestamp, viene utilizzata l'opzione OPTIMISTIC WITH VALUES. |
CONCUR_SS_OPTIMISTIC_CCVAL | Ottimistica di lettura e scrittura | No | Si presuppone che le contese tra le righe nel database 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) | In JDBC 2.0 sono stati introdotti nuovi metodi per la creazione di istruzioni. 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. |