Comment tronquer le journal des transactions dans une base de données SQL Server 2008?

9

Comment tronquer le journal des transactions dans une base de données SQL Server 2008?

Quels sont les meilleurs moyens possibles?

J'ai essayé ceci à partir d'un blog comme suit:

1) De la base de données de configuration à la récupération simple, en réduisant le fichier et en définissant à nouveau la récupération complète, vous perdez en fait vos précieuses données de journal et ne pourrez pas restaurer à un moment donné. Non seulement cela, vous ne pourrez pas non plus utiliser les fichiers journaux suivants.

2) La réduction du fichier ou de la base de données ajoute une fragmentation.

Il y a beaucoup de choses que vous pouvez faire. Tout d'abord, commencez à effectuer une sauvegarde de journal appropriée à l'aide de la commande suivante au lieu de les tronquer et de les perdre fréquemment.

BACKUP LOG [TestDb] TO  DISK = N'C:\Backup\TestDb.bak'
GO

Supprimez le code de réduction du fichier. Si vous effectuez des sauvegardes de journal appropriées, votre fichier journal généralement (encore une fois généralement, les cas spéciaux sont exclus) ne grossit pas très.

Néo
la source
2
OK, et que s'est-il passé lorsque vous avez essayé cela?

Réponses:

4

La façon la plus sûre et la plus correcte de tronquer un fichier journal si la base de données est en mode de récupération complète consiste à effectuer une sauvegarde du journal des transactions (sans TRUNCATE_ONLY. Cela va être déconseillé dans les versions futures et n'est pas conseillé).

Il semble que vous souhaitiez réduire votre fichier journal par la suite, auquel cas vous exécuteriez une DBCC SHRINKFILE(yourTLogName)commande. Il existe un deuxième paramètre facultatif pour la taille demandée pour le réduire.

Thomas Stringer
la source
8

Vous pouvez sauvegarder le journal sur le périphérique nul:

backup log [databasename] to disk = 'nul';

Ou vous pouvez basculer le modèle de récupération sur simple, puis revenir à nouveau à plein / en masse.

Max Vernon
la source
J'ai fait + un à ce sujet parce que c'est un outil dans la boîte à outils dbas et votre réponse ne mérite pas de votes négatifs je pense. Je suis d'accord avec le sentiment que la meilleure façon est de prendre des sauvegardes du journal des transactions, mais bon tous les bons outils peuvent être utilisés de manière correcte ou mauvaise.
Martin Sjöberg
6

Si vous ne vous souciez pas de vos données de journal et que vous souhaitez simplement vous en débarrasser:

Modifiez le modèle de récupération de complet à simple, puis revenez à complet. Réduire le fichier à l'aide de DBCC SHRINKFILE avec l'argument TRUNCATEONLY

La commande suivante fera passer le modèle de récupération de complet à simple

ALTER DATABASE <databse_name> SET RECOVERY SIMPLE

La commande suivante changera le modèle de récupération en full

ALTER DATABASE <databse_name> SET RECOVERY FULL

Pour trouver le nom du fichier journal, vous pouvez utiliser la requête suivante

SELECT name 
FROM sys.master_files
WHERE database_id = DB_ID('<databse_name>')

Rétrécir le fichier

DBCC SHRINKFILE (N'<logical_file_name_of_the_log>' , 0, TRUNCATEONLY)

Voir Quelle est la commande pour tronquer un fichier journal SQL Server? pour plus d'informations à ce sujet

Alex
la source