en-USsv-SE
You are here:   Forum
Register   |  Login
HomeHomeDiscussionsDiscussionsHjälp!Hjälp!Ej nerskriven data i databasEj nerskriven data i databas
Previous
 
Next
New Post
8/18/2010 4:32 PM
 
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?
 
New Post
8/18/2010 5:48 PM
 
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.
 
New Post
8/19/2010 9:59 AM
 
Tack för ditt svar! Jag tar det vidare till utvecklarna.
 
New Post
8/23/2010 3:51 PM
 
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?
 
New Post
8/24/2010 10:19 AM
 
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).
 
Previous
 
Next
HomeHomeDiscussionsDiscussionsHjälp!Hjälp!Ej nerskriven data i databasEj nerskriven data i databas


Annons