USE [HCITools] GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[bkp_Log]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[bkp_Log] GO USE [HCITools] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[bkp_Log] @in_debug int = null AS /*============================================================================= Explication du traitement realise par la SP ------------------------------------------- Cette SP sert backuper les logs de transaction des bases de données en mode FULL Contexte d'utilisation ---------------------- Cette SP est appelée par le job DR91020 - Log-backup Parametres ---------- @in_debug : Si 1 alors on fait un print des commandes de backup Creation : 28.10.16 / FLA Modifications : 17.03.2022 - FLA : Change DBA mail =============================================================================*/ set nocount on; /*------------------- Declaration des variables --------------------*/ declare @DB_name varchar (255), @path varchar (4000), @backupDate datetime, @fullpath varchar (2000), @messageError varchar (8000), @error int, @BackupLogFolder varchar (4000) /*------------ Affectation des parametres aux variables ------------*/ select @backupDate = getdate (); select @error = 0 select @messageError = '' /*-------------------------- Traitement ---------------------------*/ BEGIN TRY SELECT @BackupLogFolder=HCIP_value FROM dbo.HCI_PARAMS WHERE HCIP_key = 'BKP_DIR_L' /* On ne backup le transaction log que des bases de données en mode FULL (base model exclus) */ declare c_databases cursor local forward_only static for SELECT name FROM sys.databases WHERE LOWER(name) not in ('model') AND recovery_model_desc = 'FULL' AND state = 0 ORDER BY name open c_databases FETCH NEXT FROM c_databases into @DB_name while @@fetch_status = 0 begin select @path = @BackupLogFolder + @DB_name; /* BUILD THE EXPECTED FORMAT: [DBName_backup_201108041510.trn] */ declare @filename varchar (2000); select @filename = @DB_name + '_backup_' + convert(varchar, datepart (YYYY, @backupDate)) + '_' + right('0'+convert(varchar, datepart (MM, @backupDate)),2) + '_' + right('0'+convert(varchar, datepart (DD, @backupDate)),2) + '_' + right('0'+convert(varchar, datepart (HH, @backupDate)),2) + right('0'+convert(varchar, datepart (MI, @backupDate)),2) + right('0'+convert(varchar, datepart (SS, @backupDate)),2) + '_' + right('00'+convert(varchar, datepart (MS, @backupDate)),3) + '.trn' select @fullpath = @path+'\'+@filename; BEGIN TRY /* BACKUP THE LOG */ IF (@in_debug = 1) print 'BACKUP LOG '+@DB_name+ ' TO DISK = '+@fullpath else BACKUP LOG @DB_name TO DISK = @fullpath END TRY BEGIN CATCH select @messageError = @messageError + 'Backup Log failed : ' + @DB_name + ' ' + ERROR_MESSAGE() + CHAR(13) SET @error = @error + 1 END CATCH FETCH NEXT FROM c_databases into @DB_name end close c_databases deallocate c_databases /* S'il y a une erreur, on envoie un mail aux DBA */ IF @messageError <> '' BEGIN exec aps_Send_Mail_with_template @in_param_varchar_2 = 'DBA_operator;', @in_job_type = 3, /* 3 = warning */ @in_param_varchar_3 = @messageError RAISERROR ('Erreur dans la SP [dbo].[bkp_Log]',16,1) END /*---------------------- Traitement des erreurs ----------------------*/ END TRY BEGIN CATCH /* Traitement des erreurs (avec RaiseError) */ EXEC dbo.get_Error_Info @in_RaiseError = 1 END CATCH GO