24. november 2000 - 15:06Der er
4 kommentarer og 1 løsning
Låser fast ved UPDATE
Hej.
Jeg har problemer med en 8.0.4 Enterprise på HP-UX10.20, der låser fast. (SQL timeglas forsvinder aldrig). Man er nødt til at køre End Task\'. Problemet opstår, når man forsøger at ændre data i en bestemt tabel. (Måske flere). Jeg kan sagtens køre SELECT. Ingen problem, men så snart jeg prøver at ændre data ved at køre en UPDATE kommando låser det fast. Jeg bruger SQL Worksheet, men fejlen sker også fra andre programmer. Jeg troede først, at det måske skyldtes en manglede COMMIT, da jeg har erfaring med, at det samme sker hvis man har data det ikke er commit\'et. Dette er så vidt jeg kan se ikke årsagen.
Min alert.log siger ikke noget om dette. Jeg har ikke nogen trigger på tabellen. Trace har jeg ikke prøvet. (Kender den umiddelbart ikke. Vil lige undersøge hvad den gør)
Databasen ligger på en HP Unix maskine, der fungere som DatabaseServer. (client/server). Det er altså via et database link.
Jeg forstiller mig, at det må være noget med, at der står nogle åbne data et sted. Efter et stykke tid, kommer det op igen uden vi umiddelbart gør noget. Kunne det f.eks ikke være, når en bruger lukker en session ned, der ikke er kørt færdig? Men på et eller andet tidspunkt kommer det igen.
Umiddelbart kunne det lyde som en row lock. Prøv lige den har når den hænger: select l.sid,s.serial#,s.username,s.terminal, decode(l.type,\'RW\',\'RW - Row Wait Enqueue\', \'TM\',\'TM - DML Enqueue\', \'TX\',\'TX - Trans Enqueue\', \'UL\',\'UL - User\',l.type||\'System\') res, substr(t.name,1,10) tab,u.name owner, l.id1,l.id2, decode(l.lmode,1,\'No Lock\', 2,\'Row Share\', 3,\'Row Exclusive\', 4,\'Share\', 5,\'Shr Row Excl\', 6,\'Exclusive\',null) lmode, decode(l.request,1,\'No Lock\', 2,\'Row Share\', 3,\'Row Excl\', 4,\'Share\', 5,\'Shr Row Excl\', 6,\'Exclusive\',null) request from v$lock l, v$session s, sys.user$ u,sys.obj$ t where l.sid = s.sid and s.type != \'BACKGROUND\' and t.obj# = l.id1 and u.user# = t.owner# / Du skal have dba rettigheder for at køre scriptet. Start en ny session og prøv det!
Det lyder meget sandsynligt med noget row lock, uden jeg ved en hel masse om det.
Men angående dit forslag, så er jeg åben overfor at prøve det, men jeg ville måske gerne vide lidt mere om, hvad den gør. Godtnok er det kun en Select, men der er meget rart, at vide hvad den gør. Jeg arbejder på et produktionsmiljø med nogle brugere, der ikke altid er med på noget sjov, hvis du forstår.
Og du mener, at hvis det sker igen, at systemet hænger på min klient pga. update statment,så kan jeg køre din Select. Den skal ikke køres fra svrmgrl på selve serveren vel?
Selecten vil fortælle dig hvilke sessioner der låser for hinanden og hvilken række det drejer sig om! Nej du behøver ikke at køre det fra serveren... bare en ny sql*plus session, hvor du er logget ind med DBA rettigheder (f.eks. system).
Jeg forstår godt din bekymring. Prøv selecten på en testbase, hvis du vil se hvad den gør. Men der skulle helst ikke ske noget :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.