Afin d'écrire un message durant l'exécution d'une requête longue on peut utiliser :
RAISERROR (@msg, 0, 1) WITH NOWAIT
Cette instruction déclenche un message de sévérité = 0 (autant dire pas grave du tout !)
et d'un statut de 1 (qui sera ignoré dans ce cas)
l'activateur NOWAIT fait le boulot attendu ==> afficher l'information immédiatement au client
ce que l'instruction PRINT permet pas !
Enjoy !
Affichage des articles dont le libellé est Log. Afficher tous les articles
Affichage des articles dont le libellé est Log. Afficher tous les articles
19 juin 2018
13 juillet 2017
Shrink des logs d'un BDD SQL Server
Voici un script pour réduite la taille du journal des transactions
DECLARE @size INT;
SET @size = 10; --- Taille du log à la fin en MegaBytes
DECLARE @database VARCHAR(200);
SET @database = DB_NAME(); --- Obtient le nom de la base en cours
--- le shrink des logs
DECLARE @sqlShrink VARCHAR(MAX);
SET @sqlShrink = '
DECLARE @logfilename NVARCHAR(200);
USE [' + @database + '];
ALTER DATABASE ['+ @database +'] SET RECOVERY SIMPLE;
DECLARE crsor CURSOR FOR
SELECT [name] FROM [sys].[database_files]
WHERE [type] = 1;
OPEN crsor
FETCH crsor INTO @logfilename
WHILE @@FETCH_STATUS = 0
BEGIN
DBCC SHRINKFILE (@logfilename, '+CONVERT(VARCHAR(20), @size)+');
FETCH crsor INTO @logfilename
END
CLOSE crsor
DEALLOCATE crsor
ALTER DATABASE [' + @database + '] SET RECOVERY FULL;
USE master;
';
EXEC (@sqlShrink);
Dans le principe :
1) On passe la base en cours dans le mode Recovery Simple
2) Pour chaque fichier de log (LDF) on fait un DBCC SHRINKFILE
3) On remet la base dans le mode Recovery Full
Il doit surement pouvoir être amélioré mais bon ça fait le job !
Merci aux auteurs initaux du script ;-)
DECLARE @size INT;
SET @size = 10; --- Taille du log à la fin en MegaBytes
DECLARE @database VARCHAR(200);
SET @database = DB_NAME(); --- Obtient le nom de la base en cours
--- le shrink des logs
DECLARE @sqlShrink VARCHAR(MAX);
SET @sqlShrink = '
DECLARE @logfilename NVARCHAR(200);
USE [' + @database + '];
ALTER DATABASE ['+ @database +'] SET RECOVERY SIMPLE;
DECLARE crsor CURSOR FOR
SELECT [name] FROM [sys].[database_files]
WHERE [type] = 1;
OPEN crsor
FETCH crsor INTO @logfilename
WHILE @@FETCH_STATUS = 0
BEGIN
DBCC SHRINKFILE (@logfilename, '+CONVERT(VARCHAR(20), @size)+');
FETCH crsor INTO @logfilename
END
CLOSE crsor
DEALLOCATE crsor
ALTER DATABASE [' + @database + '] SET RECOVERY FULL;
USE master;
';
EXEC (@sqlShrink);
Dans le principe :
1) On passe la base en cours dans le mode Recovery Simple
2) Pour chaque fichier de log (LDF) on fait un DBCC SHRINKFILE
3) On remet la base dans le mode Recovery Full
Il doit surement pouvoir être amélioré mais bon ça fait le job !
Merci aux auteurs initaux du script ;-)
Libellés :
Log,
Maintenance,
Shrink,
SQL
Inscription à :
Articles (Atom)