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

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(...

Plus en détail