Domanda

Ho un server Web con SQL 2008 l'esecuzione di un simulato db SQL 2005, e ho un db locale di SQL 2005 per testare l'ambiente.

Questo mi fa utilizzare gli script per il backup / ripristino dei dati per testare i backup dei server 2008 non ripristinare a un server 2005.

Quando eseguo questa query SQL per ridurre le dimensioni di una tabella sul mio Web di produzione di SQL Server (2008)

 DELETE FROM TickersDay
 WHERE (DATEDIFF(day, TickersDay.[date], GETDATE()) >= 8)
 GO

ottengo questo messaggio:

 Msg 9002, Level 17, State 4, Line 3
 The transaction log for database 'VTNET' is full. To find out why space in the log
 cannot be reused, see the log_reuse_wait_desc column in sys.databases

Si ha quando ho pubblicare scritti anche a volte.

Quando eseguo questo comando mi SQL ottenere il seguente risultato:

 SELECT [name], recovery_model_desc, log_reuse_wait_desc
 FROM sys.databases

Risultati:

 [name]      recovery_model_desc       log_reuse_wait_desc

 VTNET  SIMPLE                     ACTIVE_TRANSACTION

Ecco le mie domande e questioni:

  1. I get it .. Ho una dichiarazione transazione che ha bisogno di un comando ROLLBACK

0 rollback> .. ma ho 100 stored procedure in modo da prima che lo faccio ....

  1. nel frattempo ... come posso sradicare questo problema ?? Ho provato contrazione e ho cercato backuping il Db ...

  2. Come si può vedere, è in modalità SEMPLICE ... Non ho idea di come fare il backup di un file di LOG SOLO ... (non hanno trovato come fare) ...

È stato utile?

Soluzione

Si potrebbe essere in grado di aggirare questo problema semplicemente da ottenere SQL non per elaborare l'intera tabella con l'uso l'indice su un solo le date tenuti da eliminare. Riformulare per essere indice amichevole

DELETE FROM TickersDay
WHERE TickersDay.[date] <= DATEADD(day, -8, GETDATE())
GO

Se si esegue questo abbastanza spesso (almeno al giorno), allora ha solo elaborare 1/9 ° o meno tramite un indice su TickersDay ([Data]), invece di dover passare attraverso l'intera tabella se si utilizza DATEDIFF sul campo.

Se questo provoca ancora questo:

Il log delle transazioni per il database 'VTNET' è pieno

Hai davvero bisogno di aumentare la dimensione del registro, perché ho il sospetto che non sia impostato su aumento e non è abbastanza grande per questa operazione. Uno che o iniziare a guardare la dosatura di eliminazioni (sempre ammesso che abbiate un indice su data, quindi questo si rivolge in modo efficiente solo le 100 righe), per es.

DELETE TOP (100) FROM TickersDay
WHERE TickersDay.[date] <= DATEADD(day, -8, GETDATE())
GO

È possibile loop (mentre @@ rowcount> 0) o semplicemente pianificare più frequentemente come sfondo gocciolando cancellare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top