Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

SQL Server : Interdire les opérations de Troncation du journal de transaction (TRUNCATE_ONLY, NO_LOG)

Une des plus mauvais comportements vus sur des serveurs de base de données et sans doute la troncation du journal de transaction. Certes son rôle est très mal connu, et souvent la question revient sur le pourquoi de la taille du fichier LDF (le journal de transaction).

J'avais fait un précédent post sur le sujet :
http://blogs.codes-sources.com/christian/archive/2007/02/12/sql-server-faq-sql-pourquoi-mon-fichier-de-log-ldf-est-il-aussi-gros-comment-diminuer-sa-taille.aspx

L'idée c'est que le journal de transaction enregistre toutes les modifications effectuées sur la base de données (une sorte de journal des requêtes en écriture). L'avantage étant de pouvoir rejouer le journal et de pouvoir restaurer la base de données dans un état stable à n'importe quel moment. Votre patron appelle et vous dit « Je perdu une données à 9h51 »… Votre dernière sauvegarde complète date de hier… Mais le journal est là et vous permet grâce à une restauration (RESTORE LOG … WITH STOPAT='dateetheure') de restaurer la base de données à 9h50, opération impossible sans le journal !

Le fait de tronquer le journal est une mauvaise chose dans pas mal de situation, car cela interdit ce type de restauration… En fait réaliser le TRUNCATE revient à utiliser le mode de récupération SIMPLE de la base de données, et ainsi indiqué au moteur : « ne gère pas le journal, fait des auto-truncate ». L'opération de troncation manuelle se réalise à l'aide de :

BACKUP LOG MaBase WITH NO_LOG

BACKUP LOG MaBase WITH TRUNCATE_ONLY

Dans le cas om vous avez souhaité gérer le journal de transaction, on s'attend à ce que vous fassiez des sauvegardes fréquentes de ce dernier. Mais comment interdire la Troncation du journal ? En fait il existe un traceflag qui permet d'interdire ces opérations sur le serveur. Celui-ci est activable soit au niveau des paramètres de démarrage du service, soit par la commande DBCC TRACEON.

DBCC TRACEON(3231, -1)

Dès lors si vous exécutez ce type de commande :

BACKUP LOG MaBase WITH TRUNCATE_ONLY

Et si la base de données MaBase n'existe pas, aucunes erreurs (ce qui n'est pas le cas normalement). En fait la commande est strictement ignorée et non exécutée par le moteur.

A noter que ces commandes disparaîtront de la version 2008 de SQL Server, voir le lien plus haut pour une commande similaire.

Bonnes sauvegardes…

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Publié dimanche 19 août 2007 20:00 par christian
Classé sous : ,

Commentaires

Pas de commentaires
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- [Silverlight] En attendant Silverlight 2 RTW par Blog Technique d'Audrey PETIT le 10-11-2008, 21:55

- Le nouveau Gojira, c’est pour lundi… par CoqBlog le 10-11-2008, 01:18

- SharePoint : nouvel article sur la mise en place des Scopes dans MOSS Searchs par Blog Technique de Romelard Fabrice le 10-10-2008, 17:52

- Hello CS par Le Blog de julz le 10-10-2008, 12:26

- MSDN/TechNet/Microsoft Days Tour 2008 à Lille les 13 et 14 Octobre ! par RedoBlog - The .NET Gentleman !!! le 10-10-2008, 09:35

- MVC Pratique #07 - Un projet concret et le transfert des objets avec les ModelBinders par #Rui le 10-09-2008, 23:39

- SQL Server 2008 : Certifié - TS Admin (70-432) par SQL Server vu par Christian Robert le 10-09-2008, 10:58

- [WPF] Comment changer la couleur utilisée pour sélectionner les éléments d’un ItemsControl ? par Thomas Lebrun le 10-09-2008, 10:49

- Hello World! par Hamid's Place le 10-08-2008, 23:38

- SQL Profiler - Configuration pour un développeur - tracer les requêtes SQL de votre application par Atteint de JavaScriptite Aiguë [Cyril Durand] le 10-08-2008, 15:52