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
-- läuft ohne ergbenis, da sperre vorhanden
3. Verbindung 1
commit tran t1
--> nun ist das Ergebnis des Select verfügbar.
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
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
-- läuft ohne ergbenis, da sperre vorhanden
3. Verbindung 1
commit tran t1
--> nun ist das Ergebnis des Select verfügbar.
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
Comment