Files
sql-scripts/TPDT-268 - ACP in task sequence/dba_storedProcedures/bkp_Log.sql
2024-03-07 16:52:14 +01:00

150 lines
3.9 KiB
Transact-SQL

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