INTERROGAZIONE CAMPI DI BLOCCO

martedì 26 luglio 2005 - 10.45

andreapavia Profilo | Senior Member

CREATE TABLE #locks (spid int, dbid int, objid int, objectname sysname NULL,
indid int, type char(4), resource char(15), mode char(10), status char(6))
INSERT #locks (spid, dbid, objid, indid, type, resource, mode, status)
EXEC dbo.sp_lock
SELECT * FROM #locks --where type='key'
DROP TABLE #locks

(righe interessate: 13)

spid dbid objid objectname indid type resource mode status
----------- ----------- ----------- ------------ ----------- ---- --------------- ---------- ------
51 20 0 NULL 0 DB S GRANT
52 20 0 NULL 0 DB S GRANT
53 20 0 NULL 0 DB S GRANT
54 20 0 NULL 0 DB S GRANT
55 20 0 NULL 0 DB S GRANT
55 20 645577338 NULL 1 PAG 1:117 IS GRANT
55 20 645577338 NULL 1 KEY (5c002bb19582) S GRANT
55 20 645577338 NULL 1 KEY (6d00ef2e02ca) S GRANT
55 20 645577338 NULL 0 TAB IS GRANT
55 20 645577338 NULL 1 KEY (6c008a49be72) S GRANT
57 2 1561772621 NULL 0 TAB IX GRANT
57 1 85575343 NULL 0 TAB IS GRANT
57 20 0 NULL 0 DB S GRANT

(righe interessate: 13)




con questa istruzione riesco ad ottenere il nome della tabella bloccata


select object_name(objid)


come faccio ad interrogare gli altri campi di questa tabella????


GRAZIE 1000

lbenaglia Profilo | Guru

> con questa istruzione riesco ad ottenere il nome della tabella bloccata
>
> select object_name(objid)
>
> come faccio ad interrogare gli altri campi di questa tabella????

Ciao andreapavia,

cosa intendi con " interrogare gli altri campi di questa tabella"?
Ti basta esegure una semplice SELECT... FROM #locks...
Tieni presente che la tabella temporanea #locks è locale, quindi è visibile solo nello scope in cui l'hai definita.

Per maggiori informazioni leggi il paragrafo "Temporary Tables" sui Books Online:
http://msdn.microsoft.com/library/en-us/tsqlref/ts_create2_8g9x.asp

> GRAZIE 1000
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

andreapavia Profilo | Senior Member

grazie 1000

come leggerla e farmela ritornare è davvreo l'ultimissimo dei mie problemi....

il problema grosso è riescire a capire se dei record hanno dei lock su piu' select....


questa tabella locale mi dice che tabella sto usando con l'istruzione che ho postato prima....
ora vorrei capire se riesco a risalire da qui ai campi del record....


resource è una grandezza uguale ad ogni tipo di istruzione

utente 1

select * from pippo where id='3'

utente 2

select * from pippo where id='3'


resource sara' uguale....
il campo type = KEY mi dice che il record è sottoposto ad un lock :transazioneODBC = connessioneODBC.BeginTransaction(IsolationLevel.RepeatableRead):

.se qualcuno sa aiutarmi....





lbenaglia Profilo | Guru

>il problema grosso è riescire a capire se dei record hanno dei
>lock su piu' select....

??

>il campo type = KEY mi dice che il record è sottoposto ad un lock

La colonna type ti indica il tipo di lock che è attivo per l'oggetto specificato nella colonna ObjId.

Trovi i dettagli sui Books Online:
http://msdn.microsoft.com/library/en-us/tsqlref/ts_sp_la-lz_6cdn.asp

>.se qualcuno sa aiutarmi....

Io non ho ancora capito cosa stai cercando di fare...

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

andreapavia Profilo | Senior Member


cosa voglio fare....


utenteA ha selezionato il recordA... lo deve modificare e fa cio' che deve (update)

utenteB.seleziona il recordA che è loccato da utenteA....

voglio potergli dire a priori... guarda che il recordA ha un blocco.... non puoi fare l'update, e gli mostro tutti i campi.. ma non il bottone di update....
questo in modo che l'utenteB non lanci l'update e resti appeso....

questo è quello che mi hanno chiesto di fare.....




leggere la tabella dei blocchi (sp_lock2).....

andreapavia Profilo | Senior Member

e di piu'.... come posso dalla tabella dei blocchi (se si puo) risalire al record loccato????

lbenaglia Profilo | Guru

>e di piu'.... come posso dalla tabella dei blocchi (se si puo)
>risalire al record loccato????

Il blocco può essere a livello di riga (RID), di pagina (PG), di extent (EXT), di tabella (TAB), di file (FIL), di database (DB), di indice (IDX) o di chiave (KEY).

Questo significa che non puoi risalire alle righe su cui è stato definito un lock.
Inoltre i locks possono essere compatibili o meno tra di loro, qiundi il discorso si complica ulteriormente.

Secondo me la richiesta che ti hanno fatto è del tutto assurda e la strada che stai seguendo non ti porterà da nessuna parte.

Prevedi una colonna bit aggiuntiva nella tabella che valorizzerai a 1 prima di effettuare una modifica, e a 0 subito dopo.
E' una soluzione "arcaica" ma la vedo come unica soluzione nel tuo caso.

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

andreapavia Profilo | Senior Member

.... quanto hai ragione.........



Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2013
Running on Windows Server 2008 R2 Enterprise, SQL Server 2008 & ASP.NET 3.5