webForumDet fria alternativet

Loggen full???

6 svar · 531 visningar · startad av Mr.Switch

Mr.SwitchMedlem sedan nov. 200153 inlägg
#1

Hallå!!

Jag får detta felmeddelande från ASP sidan när en update i databasen ska göras.

New transaction cannot enlist in the specified transaction coordinator.

Det måste väl vara Transaction Loggen som är full??

Är det nån som vet hur man tömmer den??

// Switchen

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Flyttas från SQL

OveRRidEMedlem sedan feb. 200112 078 inlägg
#3

Jag antar att det gäller SQL Server? Samt att du använder distribuerade transaktioner?

Isåfall; http://support.microsoft.com/default.aspx?scid=kb;en-us;816701 .

Vidare; transaktionsloggen på SQL Server blir bara 'full' om du inte tillåter den att växa. Standard är 10 eller 15% tillväxt tror jag. Man skall dessutom akta sig för deadlocktransaktioner som ligger och hoggar trunkeringen av loggen, isåfall kan den nå gräsliga storlekar.

tjockoMedlem sedan mars 200422 inlägg
#4

Men den stora fråga är. Och som aldrig har besvarat är ju hur man tömmer transaktionsloggen programmatiskt.
För att gör jag en applikation, som jag sedan inte kommer ha tillgång till utan kommer att stå på en server i 10 år är det ju bra att veta liksom. Och det är ju inte bara SQL server utan MSDE också.

OveRRidEMedlem sedan feb. 200112 078 inlägg
#5

Varför vill du göra det? Loggen kommer att tömma sig själv antagligen. I vanliga fall har man inte problem med just växande transaktionsloggar.

Varför vill du göra det programatiskt? SQL Server brukar sätta checkpoints och trunkera loggen själv efter behov, lite beroende på hur du har inställningarna i servern.

Annars är det väl följande som gäller;

CHECKPOINT
DBCC SHRINKFILE ('dbname_log', TRUNCATEONLY)
GO
tjockoMedlem sedan mars 200422 inlägg
#6

Ok, men hur gör jag för att sätta en gräns, så att SQL server raderar loggen vid ett visst antal kb?, eller finns det någon inbyggd default gräns eller nåt?

OveRRidEMedlem sedan feb. 200112 078 inlägg
#7

Jag vet inte hur man gör det, annat än att man kan bestämma storleken och tillväxten på databas- och logfilerna i Enterprise Managern. SQL Server har redan funktioner för att sköta detta automatiskt och CHECKPOINT körs vid följande tillfällen;

  • När och om den lagrade proceduren sp_option körs
  • Om SQL Server stoppas (inte vid SHUTDOWN WITH NOWAIT)
  • När den aktiva delen av transaktionsloggen är större än vad servern kan återskapa under tidsperioden angiven i Recovery Interval-inställningen.
  • När databasen är i Log Truncate-mode (Trunc. log on chkpt) och loggen blir 70% full

Det kan vara värt att notera att om servern är i Log Truncate-mode (alltså när inställningen Truncate log on checkpoint är ikryssat), så går det inte att göra backup på transaktionsloggen, eftersom alla dirtypages (ändringar som ännu inte skrivits till den fysiska datafilen på disken) flushas när en CHECKPOINT inträffar. Det finns ingen mening att backupa den då.

Vidare; loggen krymper inte fysiskt sett av en TRUNCATE, utan det enda som händer är att loggens aktiva del minskar. Loggens aktiva del är alltså transaktioner som har hänt, men som ännu inte skrivits till disk eller är garanterade ha blivit införda i den fysiska datafilen. För att krympa loggen måste man använda SHRINK.

Det är en jäkla röra det där och det lite svårt att veta när exakt SQL Server gör vad i dessa sammanhang, men ovan beskrivning speglar på ett ungefär vad och när saker och ting händer.

Hoppas det klarnar lite. ;)

124 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
121 ms — hämta tråd, inlägg och bilagor (db)