Question

J'ai un serveur Web avec SQL 2008 l'exécution d'une simulation SQL 2005 db, et j'ai SQL 2005 db locale pour l'environnement de test.

Cela me fait d'utiliser des scripts pour les données de sauvegarde / restauration pour tester en 2008 des sauvegardes du serveur ne restaure pas à un serveur 2005.

Quand je lance cette requête SQL pour réduire la taille d'une table sur ma production Web SQL Server (2008)

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

Je reçois ce message:

 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

Il est quand je publie des scripts aussi parfois.

Quand je lance cette commande SQL je reçois le résultat suivant:

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

RÉSULTAT:

 [name]      recovery_model_desc       log_reuse_wait_desc

 VTNET  SIMPLE                     ACTIVE_TRANSACTION

Voici mes questions et problèmes:

  1. Je comprends .. J'ai une déclaration de transaction qui a besoin d'une commande Rollback

0 Rollback> .. mais j'ai 100 procédures stockées donc avant de le faire ....

  1. EN ATTENDANT ... Comment puis-je éliminer ce problème ?? Je l'ai essayé et je DIMINUTION ai essayé backuping le Db ...

  2. Comme vous pouvez le voir, il est en mode simple ... Je n'ai aucune idée comment sauvegarder un journal de fichier SEULEMENT ... (n'ont pas trouvé comment faire) ...

Était-ce utile?

La solution

Vous pourriez être en mesure de contourner ce problème simplement en obtenant SQL pas pour traiter toute la table en utilisant l'index uniquement sur les dates doivent être supprimées. Reformulez pour être convivial indice

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

Si vous exécutez ce assez souvent (au moins tous les jours), alors il n'a qu'à traiter 1 / 9ème ou moins par un index sur TickersDay ([Date]) au lieu d'avoir à passer par la table entière si vous utilisez DATEDIFF sur la champ.

Si cela provoque encore ceci:

  

Le journal des transactions pour la base de données   'VTNET' est plein

Vous avez vraiment besoin d'augmenter la taille journal parce que je soupçonne que ce n'est pas réglé sur et n'est pas une croissance automatique assez grand pour cette opération. Ou bien commencer à regarder les Batching suppressions (en supposant que vous avez à nouveau un index sur la date, cette cible efficacement que les 100 lignes), par exemple.

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

Vous pouvez en boucle (en @@ rowcount> 0) ou programmer simplement plus souvent en arrière-plan ruisselant supprimer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top