USE [HCITools]
GO
/****** Object: StoredProcedure [dbo].[bkp_Dump] Script Date: 10/15/2015 10:58:14 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[bkp_Dump]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[bkp_Dump]
GO
USE [HCITools]
GO
/****** Object: StoredProcedure [dbo].[bkp_Dump] Script Date: 10/15/2015 10:58:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[bkp_Dump]
@in_debug int = null,
@in_Recovery_Model varchar(25) = null
AS
/*=============================================================================
Explication du traitement realise par la SP
-------------------------------------------
Cette SP sert à créer les backups des bases de données. Suivant la version de SQL Server, la compression se fait ou pas avec la possibilité de choisir les bases par mode de recovery
Contexte d'utilisation
----------------------
Cette SP est appelée par le D91010 - Backup of several databases
D91040 - Backup of simple databases
D91050 - Backup of full databases
Parametres
----------
@in_debug : Si 1 alors on fait un print des commandes de backup
@@in_Recovery_Model : Choix du mode de recovery des bases. si null : All recovery model sinon recovery model défini
Creation : 15.10.15 / FLA
Modifications : 21.07.16 / FLA : Séléction uniquement des bases de données online (state = 0)
28.11.16 / FLA : Correct bug in checking version
24.05.17 / FLA : Ajout du choix du mode de recovery des bases à backuper
28.08.18 / FLA : Suppression gestion version car bug detecté et plus nécessaire
17.03.22 / FLA : Change DBA mail
=============================================================================*/
set nocount on;
declare @result_sp int,
@errno int,
@errmsg varchar(255)
/*------------------- Declaration des variables --------------------*/
declare @name varchar (255),
@cmd varchar (8000),
@messageError varchar (8000),
@xml XML,
@delimiter VARCHAR(1),
@param_group_counter_list NVARCHAR(3000)
IF @in_Recovery_Model is null
SET @in_Recovery_Model = 'FULL,SIMPLE,BULK-LOGGED'
SELECT @param_group_counter_list = HCIP_value FROM dbo.HCI_PARAMS WHERE HCIP_key = 'BKP_NOT_DB'
SET @delimiter = ','
SET @xml = CAST((''+REPLACE(@param_group_counter_list, @delimiter, '')+''+''+REPLACE(@in_Recovery_Model, @delimiter, '')+'') AS XML)
declare c_databases cursor local forward_only static for
SELECT name
FROM sys.databases
WHERE LOWER(name) not in (SELECT C.value('.', 'varchar(3000)') AS value FROM @xml.nodes('X') AS X(C))
AND state = 0
AND recovery_model_desc IN (SELECT C.value('.', 'varchar(3000)') AS value FROM @xml.nodes('Y') AS X(C))
ORDER BY name
/*------------ Affectation des parametres aux variables ------------*/
select @errno = 0
;
SET @messageError = ''
;
SET @errmsg = ''
;
/*-------------------------- Traitement ---------------------------*/
open c_databases
;
FETCH NEXT FROM c_databases
into @name
;
while @@fetch_status = 0
begin
/* DUMP */
select @cmd = 'BACKUP DATABASE [' + @name + '] TO [' + @name + '_Dump] WITH INIT, NOUNLOAD, NAME = N''' + @name + ' backup'', SKIP , STATS = 10, FORMAT, COMPRESSION, CHECKSUM; RESTORE VERIFYONLY FROM [' + @name + '_Dump];'
;
BEGIN TRY
IF (@in_debug = 1)
print @cmd;
ELSE
exec (@cmd)
;
END TRY
BEGIN CATCH
select @messageError = @messageError + 'Backup failed : ' + @name + ' ' + ERROR_MESSAGE() + CHAR(13)
;
SET @errno = @errno + 1
;
END CATCH
;
FETCH NEXT FROM c_databases
into @name
;
end
;
close c_databases
;
deallocate c_databases
;
if @errno > 0
BEGIN
exec aps_Send_Mail_with_template
@in_param_varchar_2 = 'DBA_operator;',
@in_job_type = 3, /* 3 = warning */
@in_param_varchar_3 = @messageError
;
select @errno = 70003,
@errmsg = '(BKP) Erreur lors du job de backup'
goto error_99
END
;
/*------------------ Retour au programme appelant -----------------*/
return(@@error);
/*---------------------- Traitement des erreurs ----------------------*/
error_99:
raiserror (@errmsg, 16, 1);
return(@errno);
GO