<p>Réduire la taille d’un fichier journal devrait vraiment être réservé aux scénarios où il a connu une croissance inattendue que vous ne prévoyez pas de voir se reproduire. Si le fichier journal va croître à la même taille à nouveau, il n’est pas très utile de le réduire temporairement. Maintenant, selon les objectifs de récupération de votre base de données, voici les actions que vous devriez entreprendre.</p>
<p>Premièrement, effectuez une sauvegarde complète</p>
<p>Ne faites jamais de modifications à votre base de données sans vous assurer que vous pouvez la restaurer en cas de problème.</p>
<p>Si vous vous souciez de la récupération à un instant précis</p>
<p>(Et par récupération à un instant précis, je veux dire que vous souhaitez pouvoir restaurer à autre chose qu’une sauvegarde complète ou différentielle.)</p>
<p>Vraisemblablement, votre base de données est en mode de récupération <code>FULL</code>. Si ce n’est pas le cas, assurez-vous qu’elle l’est :</p>
<pre><code class="lang-auto">ALTER DATABASE testdb SET RECOVERY FULL;
-- and take another full backup here
-- so log backups are possible
</code></pre>
<p>Même si vous effectuez des sauvegardes complètes régulières, le fichier journal va croître et croître jusqu’à ce que vous effectuiez une sauvegarde du <em>journal</em> - c’est pour votre protection, pas pour grignoter inutilement votre espace disque. Vous devriez effectuer ces sauvegardes de journal assez fréquemment, selon vos objectifs de récupération. Par exemple, si vous avez une règle métier qui stipule que vous ne pouvez vous permettre de perdre pas plus de 15 minutes de données en cas de catastrophe, vous devriez avoir un travail qui sauvegarde le journal toutes les 15 minutes. Voici un script qui générera des noms de fichiers horodatés basés sur l’heure actuelle (mais vous pouvez aussi le faire avec des plans de maintenance, etc., ne choisissez simplement aucune des options de réduction dans les plans de maintenance, elles sont terribles).</p>
<pre><code class="lang-auto">DECLARE @path nvarchar(4000) = CONCAT(
N'\backup_share\log\testdb',
CONVERT(char(8), GETDATE(), 112), N'',
REPLACE(CONVERT(char(8), GETDATE(), 108),':',''),
N'.trn');
BACKUP LOG foo TO DISK = @path WITH INIT, COMPRESSION;
WAITFOR DELAY '00:00:01';
GO 2 -- run twice to ensure file wrap-around
</code></pre>
<p>Notez que <code>\backup_share</code> devrait être sur une machine différente qui représente un périphérique de stockage sous-jacent différent.</p>
<p><em>(Réponse tronquée)</em></p>