Att arbeta med Snapshot Isolation i SQL Server Native Client

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Important

SQL Server Native Client (SNAC) levereras inte med:

  • SQL Server 2022 (16.x) och senare versioner
  • SQL Server Management Studio 19 och senare versioner

SQL Server Native Client (SQLNCLI eller SQLNCLI11) och den äldre Microsoft OLE DB-providern för SQL Server (SQLOLEDB) rekommenderas inte för ny programutveckling.

Använd någon av följande drivrutiner för nya projekt:

För SQLNCLI som levereras som en komponent i SQL Server-databasmotorn (versioner 2012 till och med 2019), se det här Support Lifecycle-undantag.

SQL Server 2005 (9.x) introducerade en ny "snapshot"-isoleringsnivå som är avsedd att förbättra samtidigheten för onlinetransaktionsbehandling (OLTP)-applikationer. I tidigare versioner av SQL Server baserades samtidighet enbart på låsning, vilket kan orsaka blockerings- och deadlock-problem för vissa applikationer. Snapshot-isolering beror på förbättringar av radversionering och är avsedd att förbättra prestandan genom att undvika blockeringsscenarier mellan läsare och författare.

Transaktioner som startar under snapshot-isolering läser en databassnapshot från den tidpunkt då transaktionen startar. En följd av detta är att keyset-, dynamiska och statiska servermarkörer, när de öppnas inom en snapshot-transaktionskontext, beter sig ungefär som statiska markörer som öppnas i serialiserbara transaktioner. Men när markörerna öppnas under snapshot tas inte isoleringsnivålås, vilket kan minska blockeringen på servern.

SQL Server Native Client OLE DB-provider

SQL Server Native Client OLE DB-leverantören har förbättringar som utnyttjar snapshot-isoleringen som introducerades i SQL Server 2005 (9.x). Dessa förbättringar inkluderar förändringar i DBPROPSET_DATASOURCEINFO och DBPROPSET_SESSION egenskapsuppsättningar.

DBPROPSET_DATASOURCEINFO

Egenskapsuppsättningen DBPROPSET_DATASOURCEINFO har ändrats för att indikera att ögonblicksbildsisoleringsnivån stöds av tillägget av det DBPROPVAL_TI_SNAPSHOT-värde som används i DBPROP_SUPPORTEDTXNISOLEVELS-egenskapen. Detta nya värde indikerar att nivån för snapshot-isolering stöds oavsett om versionshantering har aktiverats i databasen eller inte. Följande är en lista över de DBPROP_SUPPORTEDTXNISOLEVELS värdena:

Egenskaps-ID Description
DBPROP_SUPPORTEDTXNISOLEVELS Typ: VT_I4

R/W: Endast läs

Beskrivning: En bitmask som specificerar de stödda transaktionsisoleringsnivåerna. En kombination av noll eller mer av följande:

DBPROPVAL_TI_CHAOS

DBPROPVAL_TI_READUNCOMMITTED

DBPROPVAL_TI_BROWSE

DBPROPVAL_TI_CURSORSTABILITY

DBPROPVAL_TI_READCOMMITTED

DBPROPVAL_TI_REPEATABLEREAD

DBPROPVAL_TI_SERIALIZABLE

DBPROPVAL_TI_ISOLATED

DBPROPVAL_TI_SNAPSHOT

DBPROPSET_SESSION

Egenskapsuppsättningen DBPROPSET_SESSION har ändrats för att indikera att ögonblicksbildsisoleringsnivån stöds av tillägget av det DBPROPVAL_TI_SNAPSHOT värde som används i DBPROP_SESS_AUTOCOMMITISOLEVELS-egenskapen. Detta nya värde indikerar att nivån för snapshot-isolering stöds oavsett om versionshantering har aktiverats i databasen eller inte. Följande är en lista över de DBPROP_SESS_AUTOCOMMITISOLEVELS värdena:

Egenskaps-ID Description
DBPROP_SESS_AUTOCOMMITISOLEVELS Typ: VT_I4

R/W: Endast läs

Beskrivning: Specificerar en bitmask som anger transaktionsisoleringsnivån i autocommit-läge. De värden som kan sättas i denna bitmask är desamma som de som kan ställas in för DBPROP_SUPPORTEDTXNISOLEVELS.

Note

Felen DB_S_ERRORSOCCURRED eller DB_E_ERRORSOCCURRED uppstår om DBPROPVAL_TI_SNAPSHOT är inställda vid användning av versioner av SQL Server tidigare än SQL Server 2005 (9.x).

För information om hur snapshot-isolering stöds i transaktioner, se Stöd för lokala transaktioner.

SQL Server Native Client ODBC-drivrutin

SQL Server Native Client ODBC-drivrutinen ger stöd för snapshot-isolering genom förbättringar av SQLSetConnectAttr och SQLGetInfo-funktionerna.

SQLSetConnectAttr

Funktionen SQLSetConnectAttr stöder nu användningen av attributet SQL_COPT_SS_TXN_ISOLATION. Att sätta SQL_COPT_SS_TXN_ISOLATION till SQL_TXN_SS_SNAPSHOT indikerar att transaktionen kommer att ske under snapshot-isoleringsnivån.

SQLGetInfo

Funktionen SQLGetInfo stöder nu det SQL_TXN_SS_SNAPSHOT värde som har lagts till i SQL_TXN_ISOLATION_OPTION info-typen.

För information om hur snapshot-isolering stöds i transaktioner, se Cursor Transaction Isolation Level.