Question Tronquer des logs SQL Server

Plus d'informations
il y a 11 ans 7 mois #12565 par Eric
Tronquer des logs SQL Server a été créé par Eric
Bonjour,

Ayant eu lors d'une mission la tâche de tronquer régulièrement les fichiers de logs de bases SQL Server, je me suis mis en quête d'un script me réalisant ça.

Ne trouvant rien de probant, je me suis dis qu'il existait des options pour que tout se fasse de façon automatique.

Au final, je tombe sur des articles disant que \"l'auto-tronquage\" des logs pouvait engendrer des effets de bords, mais toujours aucun script à l'horizon.

Du coup je me suis fais un petit script qui tronque les logs de bases SQL Server 2005 et 2008 de façon automatique pour les remettre à 2Mo.

[code:1]param(
[String]$ServerName,
[String]$DataBaseName,
[String]$LogFileName
)

[System.Reflection.Assembly]::LoadWithPartialName(\"Microsoft.SqlServer.SMO\") | out-null

$SMOserver = New-Object ('Microsoft.SqlServer.Management.Smo.Server') -argumentlist $ServerName

$SQLServerVersion = $SMOserver.Version.Major -replace \"9\",\"2005\" -replace \"10\",\"2008\"

$SQLConnexion = new-object System.Data.SqlClient.SqlConnection \"server=$ServerName;database=$DataBaseName;Integrated Security=sspi\"
$SQLConnexion.Open()
$SQLCommand = $SQLConnexion.CreateCommand()

$db = $SMOserver.Databases[$DataBaseName]

if($SQLServerVersion -eq \"2008\") {

$db.RecoveryModel = [Microsoft.SqlServer.Management.Smo.RecoveryModel]::Simple; $db.Alter()

$SQLCommand.CommandText = \"DBCC SHRINKFILE(\"\"$LogFileName\"\",2)\"

}
else {

$SQLCommand.CommandText = \"BACKUP LOG \"\"$DataBaseName\"\" WITH TRUNCATE_ONLY; DBCC SHRINKFILE(\"\"$LogFileName\"\",2)\"

}

$SQLResult = $SQLCommand.ExecuteReader()
while ($SQLResult.Read()) { }

if ($SQLServerVersion -eq \"2008\") {
$db.RecoveryModel = [Microsoft.SqlServer.Management.Smo.RecoveryModel]::Full; $db.Alter()
}

$SQLConnexion.Close()[/code:1]

Exemple :

[code:1].\Shrink-LogSQL.ps1 -servername SRVSQL2KX -databasename mabase -logfilename mabase_log[/code:1]

NB: Le nom du fichier de log correspond au nom logique qu'on retrouve dans les propriétés de la base SQL et non le nom du fichier physique que l'on trouve dans l'explorateur.

N'étant pas expert SQL Server, je ne sais pas pourquoi sur SQL 2008 on m'a dit qu'il fallait absolument passer l'option \"recovery model\" à Simple et la repasser à full après le tronquage du log et qu'il n'y a pas besoin sur SQL 2005 mais je l'ai intégré...

Ce n'est pas grand chose mais si ça peut servir à quelqu'un qui se retrouve dans la même situation que moi et qui passe par ici ! Je suis également ouvert à toute amélioration, optimisation, critique ou autre ! ;)<br><br>Message édité par: tofu, à: 18/08/12 17:47

No pain,no gain.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 7 mois #12567 par SiSMik
Réponse de SiSMik sur le sujet Re:Tronquer des logs SQL Server
Bonjour, tout d'abord merci pour le script...
Cependant, j'ai faillit m'étouffer en le voyant. Je m'explique, ma profession étant de m'occuper des bases de données pour les différents clients ici, je ne comprends pas qu'on ait à \&quot;shrinker\&quot; les fichiers de logs...

Soit tu as un plan de sauvegarde qui lui même réduit la taille du journal de transaction, soit il faut revoir ton plan de sauvegarde. En mode simple une sauvegarde full suffit, si tu est en mode full, et bien sauvegarde full + sauvegarde des logs. ça devrait vider ton fichier de log et éviter qu'il grandisse trop vite et te fasse planter ta base.

Donc personnellement, ce n'est pas la bonne façon d'aborder les choses, après ça ne reste que mon avis...

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 7 mois #12570 par Eric
Réponse de Eric sur le sujet Re:Tronquer des logs SQL Server
Hello,

Merci pour ce retour.

En fait, étant presta, j'ai fait un remplacement pendant quelques semaines cet été et je me suis retrouvé à devoir faire cette tâche que réalise visiblement le mec que je remplaçait.

Ce n'est pas utilisé tous les quatre matins, mais de temps à autres, quand les logs grossissent trop ils utilisent cette action pour éviter qu'ils ne prennent trop d'espace disque.

Malheureusement, je ne suis pas très calé sur tout ce qui touche aux bases de données, du coup je me suis bêtement borné à continuer de réaliser l'action en question. (et à la scripter parce que passer par SQL management studio à chaque fois...)

Si tu as des docs sur le sujet, je suis preneur!<br><br>Message édité par: tofu, à: 20/08/12 11:03

No pain,no gain.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 7 mois #12578 par SiSMik
Réponse de SiSMik sur le sujet Re:Tronquer des logs SQL Server
Bonjour,

C'est un problème de configuration de la base, car tu ne dois pas tronquer le fichier de log à la main (sauf en lab) mais ça doit être fait dans un plan de maintenance afin de conserver une trace de toutes les transactions et de restaurer comme il se doit.

Si y'a des backups en place sur ton serveuer ça veut dire que le modèle de restauration n'est pas correctement choisit, et qu'il faudrait passer sur un mode simple, pour que les logs soit vider à chaque backup.

Tu peux aller faire un tour sur cet article blogs.dotnet-france.com/laurentv/post/SQ...de-recuperation.aspx

ça devrait t'éclairer un peu, si t'as des questions, n'hésites pas !

@+

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.072 secondes
Propulsé par Kunena