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

139 lines
3.4 KiB
Transact-SQL

USE [HCITools]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dba].[Restore_all_principal_permission]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dba].[Restore_all_principal_permission]
GO
USE [HCITools]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dba].[restore_all_principal_permission]
@in_param_label datetime,
@in_debug int = null
AS
/*=============================================================================
Explication du traitement realise par la SP
-------------------------------------------
Cette SP sert à restaurrer les sécurités sauvegardé pour toutes les bases.
Contexte d'utilisation
----------------------
Cette SP doit être appélée après les mises à jour de nouvelle version.
Parametres
----------
@in_debug : Si 1 alors on fait un print des commandes de restore
Creation : 18.11.16 / RTC
=============================================================================*/
set nocount on;
declare @result_sp int,
@errno int,
@errmsg varchar(255)
/*------------------------ Test des parametres input ------------------------*/
if (@in_param_label is null)
begin
select @errno = 70003,
@errmsg = '(APS) Invalid input parameter label !'
goto error_99
end
if not exists (select 1 from HCITools.dba.Principal_Permission where PP_timestamp = CONVERT(datetime, @in_param_label,121))
begin
select @errno = 70003,
@errmsg = '(DBA) No label found to restore principal permission ! ' + @in_param_label
goto error_99
end
/*------------------- Declaration des variables --------------------*/
declare @name varchar (255),
@cmd varchar (8000),
@xml XML,
@delimiter VARCHAR(1),
@param_group_counter_list NVARCHAR(3000),
@label datetime
select @param_group_counter_list = HCIP_value
from HCITools.dbo.HCI_PARAMS
where HCIP_key = 'BKP_NOT_DB'
set @delimiter = ','
set @xml = CAST(('<X>'+REPLACE(@param_group_counter_list, @delimiter, '</X><X>')+'</X>') 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
order by name
;
/*------------ Affectation des parametres aux variables ------------*/
select @errno = 0
;
SET @errmsg = ''
;
select @label = CONVERT(datetime, @in_param_label,121);
;
/*-------------------------- Traitement ---------------------------*/
open c_databases
;
FETCH NEXT FROM c_databases
into @name
;
while @@fetch_status = 0
begin
/* Backup */
begin try
print '---------------------------------------'
print '--Start processing database : ' + @name
execute [HCITools].[dba].[restore_principal_permission] @name ,@label ,@in_debug
end try
begin catch
select @errno = 70003,
@errmsg = @errmsg + 'restore all permissions failed : ' + @name + ' ' + ERROR_MESSAGE() + CHAR(13)
;
goto error_99
end catch
;
FETCH NEXT FROM c_databases
into @name
;
end
;
close c_databases
;
deallocate c_databases
;
/*------------------ Retour au programme appelant -----------------*/
return(@@error);
/*---------------------- Traitement des erreurs ----------------------*/
error_99:
raiserror(@errmsg, 14, 1)
return(@errno)
;
go