Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
INTERROGAZIONE CAMPI DI BLOCCO
martedì 26 luglio 2005 - 10.45
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
andreapavia
Profilo
| Senior Member
203
messaggi | Data Invio:
mar 26 lug 2005 - 10:45
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
5.625
messaggi | Data Invio:
mar 26 lug 2005 - 10:56
> 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
203
messaggi | Data Invio:
mar 26 lug 2005 - 12:08
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
5.625
messaggi | Data Invio:
mar 26 lug 2005 - 14:15
>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
203
messaggi | Data Invio:
mer 27 lug 2005 - 09:52
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
203
messaggi | Data Invio:
mer 27 lug 2005 - 11:21
e di piu'.... come posso dalla tabella dei blocchi (se si puo) risalire al record loccato????
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mer 27 lug 2005 - 11:31
>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
203
messaggi | Data Invio:
mer 27 lug 2005 - 14:32
.... quanto hai ragione.........
Torna su
Stanze Forum
Elenco Threads
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 !