You are on page 1of 20

Portoro,

5.- 8. maj 2003

www.microsoft.com/slovenija/ntk2003

Transakcije in
zaklepanje SQL
Server in .NET
Dejan Sarka,
SQL Server MVP
in
Avtenta.Si

Agenda

Uvod

Upravljanje s transakcijami

T-SQL
ADO.NET
COM+

Napredne reitve

Vzporedne transakcije in problemi


Izolacijski nivoji
Zaklepanja

Povezovanje konekcij
Nespotovanje doloenih zaklepanj v SQL 2000
Lastna zaklepanja

Zakljuek

Lastnosti transakcij (ACID)

Atomicity

Consistecy

Izolirana od drugih transakcij

Durability

Baza v konsistentem stanju pred in po transakciji

Isolation

Nedeljiva celota

Rezultat uspene transakcije mora biti v nekem


asu del baze

Problemi paralelnih transakcij

Lost Update
Read X
(10)

T1

Time
T2

Compute X+=15
(25)

X=10
Read X
(10)

X=20
Compute X+=10
(20)

Write X

Write X

X=25
X=25

Dirty Read
T1

Time
T2

Read X
(10)
X=10

Compute
X+=15
(25) Write X
X=25

Rollback

X=10

Read X
(25)

Use value of
X that was never
committed to DB

Non-Repeatable Read
T1

Time
T2

Read X
(10)
X=10
Read X
(10)

Compute X+=15
Commit
(25)
Write X
X=25
Read X
(25)

Phantom problem
Jones,6
T1
Smith,4
Time

Brewer,7

Insert

Jones,6

Smith,4

Brewer,7

T2
Select count (*)
where rank > 3

(2)

Select count (*)


where rank > 3

(3)

ANSI izolacijski nivoji


Izolacijski nivo

Dovoljeni problemi

Read uncommitted

Dirty read,
Non-repeatable read,
Phantoms

Read committed

Non-repeatable read,
Phantoms

Repeatable read

Phantoms

Serializable

---

Kaj lahko zaklene SQL


Server?
Oznaka

Opis

RID

Row identifier

Key

Row lock within an index

Page

Data page or index page

Extent

Group of 8 pages

Table

Entire table

Database

Entire database

Tipi zaklepanj

Osnovni

Shared
Exclusive

Posebni

Intent
Update
Schema
Bulk update

Transakcije v T-SQL

BEGIN TRANSACTION TranName


COMMIT TRANSACTION TranName
ROLLBACK TRANSACTION TranName

Pozor Rollback ni avtomatski, razen e je


nastavljeno

SET XACT_ABORT ON
SET TRANSACTION ISOLATION LEVEL
SAVE TRANSACTION SaveName, ROLLBACK
TRANSACTION SaveName
Dovoljeno je gnezdenje transakcij
Velja zadnji Commit, prvi Rollback

Transakcije z ADO.NET

BeginTransaction metoda SqlConnection


objekta

Transaction lastnost objekta SqlCommand

S tem aplikacija kreira SqlTransaction objekt; pri


tem doloimo izolacijski nivo
CommitTransaction in RollbackTransaction
methodi
Nastavi uporabo transakcije za objekt

Transakcije delamo vedno s pomojo


Try...Catch bloka

Ado.Net transakcije naredijo avtomatsko Rollback


pri napakah

.NET avtomatske transakcije

Uporabimo TransactionAttribute na naem


razredu
Razred izpeljemo iz ServicedComponent
razreda
Za assembly potrebujemo strong name

COM+ 1.0 ima le Serializable izolacijski nivo

Sn.exe orodje
Izboljano v COM+ 1.5

Razred ContextUtil nosi informacijo o


kontekstih COM+ objektov

Metodi SetComplete() in SetAbort() kliemo rono


Monost avtomatike z AutoComplete atributom,
vendar ni avtomatskega RollBacka, e ga ne
naredi SQL Server!

Povezane konekcije

Vasih ne elimo, da se dve konekciji


blokirata z zaklepanji

Torej si delita transakcijski prostor


Tako lahko poveemo extended
procedure, ki naredijo novo povezavo, z
obstojeo konekcijo, in se ne blokirata

Uporabljamo:

Execute sp_getbindtoken na prvi


povezavi, da dobimo id transakcije kot
string
Execute sp_bindconnection na drugi
povezavi, uporabimo output parameter
prejnje procedure

Posebnosti zaklepanja v
SQL 2000

V prejnjem primeru smo uporabili


PAGLOCK hint, eprav smo brali eno
vrstico
ZAKAJ?
Ker SQL Server 2000 ne spotuje
nepotrebnih zaklepanj, to pa so zanj

Roni XLOCK na vrstici


Roni UPDLOCK na vrstici
Celo avtomatski XLOCK na vrstici (rezultat
UPDATE ukaza!), e se ni ne sprememni v
vrstici

Aplikacijska zaklepanja

SQL Server 2000 daje monost uporabe Lock


Manager-ja iz naih aplikacij

Tako lahko naredimo semaforske tabele


sp_getapplock generira zaklepanje

Lahko uporabimo SQL Serverjev locking


mehanizem za poljubne namene

Resurs poimenujemo
Nain je lahko Shared, Exclusive...
Owner je Transaction ali Session
Doloimo lahko e lock timeout vrednost

e je lastnik lock-a session, je treba lock


eksplicitno sprostiti s sp_releaseapplock

Zakljuek

Ve znanja je v:

Inside SQL Server 2000 (Kalen Delaney,


MSPress)
Advanced Transact-SQL for SQL Server
2000 (Itzik Ben-Gan & Tom Moreau,
APress)
Microsoft SQL Server 2000 Programming by
Example (Fernando G. Guerrero & Carlos
Eduardo Rojas, QUE)

Poletna akademija v Dubrovniku (


http://www.microsoft.com/slovenija/dog
odki/sqlakademija/
)
Vpraanja?

2003 Microsoft Corporation. Vse pravice pridr


pridrane.
ane.

2003 Microsoft Corporation. Vse pravice pridr


pridrane.
ane.

You might also like