Frage zu Transaktionen im SQL Server 2000

19/03/2008 - 14:30 von Andreas Graefe | Report spam
Hallo,
ich habe eine Prozedur in der ich eine Transaktion mit normalem (READ COMMITTED) und testhalber auch schon mit dem schwachen (READ UNCOMMITTED)
Isolationlevel gesetzt habe. Nun habe ich aber folgendes Problem.

Wenn ich die Prozedur ausführe, werden in verschiedene Tabellen Werte eingefügt. Diese müssen aber außerhalb der Prozedur wàhrend der Ausführung
gelesen und auch nur gelesen werden. Ergebnisse werden dann in andere Tabellen geschrieben. Das sollte doch mit Read Uncommitted möglich sein.
Jedenfalls steht das so in meinem Buch und ist für mich auch verstàndlich. Aber es ist eben nicht so. Die Sperre bleibt solange, wie die Transaktion
offen ist. Zum testen habe ich mir einfach zwei Queryfenster geöffnet und nacheinander folgende Statements abgesetzt.

1. Verbindung 1
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
go
begin tran t1
insert into usrtab_ws values (newid(), 0)

2. Verbindung 2
select * from usrtab_ws

3. Verbindung 1
commit tran t1


Was muss ich machen, um die Werte sofort zu erhalten. Mir ist bewusst, dass dies auch Risiken beinhaltet, es geht aber nun mal nicht anders.

Andreas
 

Lesen sie die antworten

#1 Christoph Muthmann
19/03/2008 - 15:42 | Warnen spam
Andreas Graefe wrote:
Hallo,
ich habe eine Prozedur in der ich eine Transaktion mit normalem (READ
COMMITTED) und testhalber auch schon mit dem schwachen (READ
UNCOMMITTED) Isolationlevel gesetzt habe. Nun habe ich aber folgendes
Problem.
Wenn ich die Prozedur ausführe, werden in verschiedene Tabellen
Werte eingefügt. Diese müssen aber außerhalb der Prozedur wàhrend der
Ausführung gelesen und auch nur gelesen werden. Ergebnisse werden
dann in andere Tabellen geschrieben. Das sollte doch mit Read
Uncommitted möglich sein. Jedenfalls steht das so in meinem Buch und
ist für mich auch verstàndlich. Aber es ist eben nicht so. Die Sperre
bleibt solange, wie die Transaktion offen ist. Zum testen habe ich
mir einfach zwei Queryfenster geöffnet und nacheinander folgende
Statements abgesetzt.
1. Verbindung 1
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
go
begin tran t1
insert into usrtab_ws values (newid(), 0)

2. Verbindung 2
select * from usrtab_ws

3. Verbindung 1
commit tran t1


Was muss ich machen, um die Werte sofort zu erhalten. Mir ist
bewusst, dass dies auch Risiken beinhaltet, es geht aber nun mal
nicht anders.


Hallo Andreas,
welchen Isolationlevel hat denn Verbindung 2?
Hier ist dann nàmlich das SET TRANSACTION ISOLATION LEVEL READ
UNCOMMITTED
angesagt, denn der will ja Sàtze lesen, die noch nicht committed sind.


Einen schönen Tag noch,
Christoph
(Please post ALL replies to the newsgroup only unless indicated
otherwise)

Ähnliche fragen