en-USsv-SE
Du är här:   Forum
Registrera   |  Logga in
HemHemDiscussionsDiscussionsHjälp!Hjälp!Ej nerskriven data i databasEj nerskriven data i databas
Föregående
 
Nästa
Nytt inlägg
2010-08-18 15:32
 
Hej,
Har råkat ut för något väldigt konstigt. Man har jobbat mot en SQL Server 2005 databas i en timme och trott att man skapat transaktioner men inget finns i databasen. Samtidigt kan man se att det finns data i ett sidosystem som verifierar att man verkligen har skapat transaktioner. Har någon råkat ut för något liknande? Kan data försvinna medans det ligger i minnet utan att det skrivs ner till disk och utan att SQL Server ger ifrån sig ett felmeddelande?
 
Nytt inlägg
2010-08-18 16:48
 
Kan det vara så att implicita transaktioner är aktiverat?

Från BOL
DB-Library applications and Transact-SQL scripts use the Transact-SQL SET 
IMPLICIT_TRANSACTIONS ON statement to start implicit transaction mode. Use the 
SET IMPLICIT_TRANSACTIONS OFF statement to turn implicit transaction mode off. 
Use the COMMIT TRANSACTION, COMMIT WORK, ROLLBACK TRANSACTION, or ROLLBACK WORK 
statements to end each transaction.
 
Nytt inlägg
2010-08-19 08:59
 
Tack för ditt svar! Jag tar det vidare till utvecklarna.
 
Nytt inlägg
2010-08-23 14:51
 
Hej,
Har kört lite kontroller på SET IMPLICIT_TRANSACTIONS OFF och den verkar avslagen under hela processen. Vad som hade hänt är att två klienter hade fått hängningar mot databasen men efter en stund så släppte det för den ena och där har man kört vidare medan den andra fortfarande hade hängningar. Ser att det finns insert och update triggers på tabellen som data borde ha sparats om det väcker några misstankar. Kan IMPLICIT_TRANSACTIONS sättas till ON av sig själv? Eller har du någon annan idé om vad som kan ha orsakat dataförlusten?
 
Nytt inlägg
2010-08-24 09:19
 
Jag bedömmer det högst osannolikt (och har aldreig hört talas om) att IMPLICIT_TRANSACTIONS slås på av sig själv. Ett tänkbart scenario, dock är:

Starta proc (eller vilken TSQL kod som helst). Denna:
Startar transaktion (@@TRANCOUNT = 1)
Blir exempelvis blockerad, så att man avbryter (time-out i app, exempelvis)
Förstöker igen, dvs startar transaktion (@@TRANCOUNT = 2)
Det går bra
COMMIT (@@TRANCOUNT = 1)

Och so tror man nu att allt är klart. Men transactionen är ju öppen eftersom man gjort två begin och bara en commit. Så när man avslutar programmet (sessionen mot SQL Server) så kommer SQL Server att göra rollbaclk på allt. Och fram tills dess så har SQL Server också hållt lås (eftersom transaktion är öppen).
 
Föregående
 
Nästa
HemHemDiscussionsDiscussionsHjälp!Hjälp!Ej nerskriven data i databasEj nerskriven data i databas


Annons

Informator