Procedure de truncate des logs
Transcription
Procedure de truncate des logs
fjconseil Procedure de truncate des logs 29-09-2010 Dernière mise à jour : 18-08-2011 Cette procedure tronque automatiquement le journal des transactions (en la sauvegardant) de toutes les bases ayant un volume > à 75% du maxsize defini pour le fichier de journal et lorsque 90% du journal des logs est rempli : USE [SysDBA] GO /****** Object: StoredProcedure [dbo].[BackupLogAuto] SET ANSI_NULLS ON GO Script Date: 09/30/2010 15:15:20 ******/ SET QUOTED_IDENTIFIER ON GO alter procedure [dbo].[BackupLogAuto] as begin declare @db varchar(100), @sql varchar(1000), @dbid int, @hidb int, @LogPourcent real, @dbname varchar(100), @Message varchar(100) create table #DBLIST ( [fileId] [smallint] NULL, [name] sysname, [filename] [nvarchar](260), size [int] NULL, critical [int] NULL, maxsize int) Select @hidb = Max(dbid ), @dbid = 0 from master..sysdatabases -- Vérification des pourcentages d'espace occupé par les logs create table #LogSpace ("database name" sysname, "log size" decimal, "log space used" decimal, status int) insert into #LogSpace exec ('DBCC SQLPERF ( LOGSPACE ) ') While @dbid <= @hidb Begin Set @db = null select @db = name From master..sysdatabases Where dbid = @dbid if @db is not null set @sql = 'INSERT INTO #DBLIST SELECT fileid, ''' + @db + ''' as name, filename, size, maxsize*0.75 as critical, maxsize FROM ' + @db + '..sysfiles WHERE (status & 0x40) <>0 and maxsize >-1 and size > maxsize*0.75' exec (@sql) Set @dbid = @dbid + 1 End -- Remise a zero des compteurs et sauvegarde des logs si le % est superieur a 75% set @db = '' --select * from #DBLIST while exists (select * from #DBLIST where name > @db) begin http://www.fjconseil.fr/joomla Propulsé par Joomla! Généré: 29 September, 2016, 16:37 fjconseil select @LogPourcent=[log space used] from #LogSpace where [database name]= @db select @dbname=@db select @db = min(name) from #DBLIST where name > @db -- On verifie que le pourcentage est superieur a 75% et qu'il n'est pas identique a la derniere sauvegarde effectuée if @LogPourcent > 75 begin set @Message ='Impossible to backup log : Open transaction sleeping' -- for process : ' + spid from sys.sysprocesses where open_tran = 1 and status = 'sleeping' if not exists (select spid, cmd from sys.sysprocesses where open_tran = 1 and status = 'sleeping') begin select @sql = 'BACKUP LOG [' + @dbname + '] TO DISK = N''C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\IBM-8A34FB1EA0A#DEFAULT#'+ @dbname +'#Log.bak'' WITH NOFORMAT, NOINIT, NAME = N''SysDBA-Transaction Log Backup'', SKIP, NOREWIND, NOUNLOAD, STATS = 10' exec (@sql) -- select @sql set @Message = 'Backup des logs realisé. Pourcentage de remplissage avant opération : ' + @LogPourcent + ' %' end -- On logge l'operation dans la table Log_Backup Begin Tran T1 insert into log_Backup with (rowlock) (server, instance, base, type, debut, fin, fichier, erreur, Message) values (@@SERVERNAME, 'DEFAULT', @dbname, 'Backup Log Automatique', GETDATE(), NULL, 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\IBM-8A34FB1EA0A#DEFAULT#'+ @dbname +'#Log.bak', @LogPourcent , @Message ) Commit Tran T1 end end drop table #DBLIST drop table #LogSpace end GO http://www.fjconseil.fr/joomla Propulsé par Joomla! Généré: 29 September, 2016, 16:37
Documents pareils
SQL - Server 7.0
Les Procédures Stockées
insert into projet values(@n_projet_p,@nom_projet_p,@n_equipe_p,@n_cher_resp_p)
set @erreur=@@error
if @erreur<>0
begin
/*print 'Erreur numéro : '+STR(@erreur)*/
raiserror(...