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

448 lines
16 KiB
Transact-SQL

/*=================================================================
Explanation on the script behaviour.
-----------------------------------------------
1. Creates the configuration schema cfg
2. Creates table cfg.InstanceContext
3. Creates the trigger for date auto update
4. Add constraints for enumerations
5. Creates table cfg.Identity
7. Create trigger for date auto update
8. Create trigger to garanty one record in identity table
9. Add constraints for enumerations
10. Add some samples script for data initialization of context table
11. Add script to initialize identity table o every pharmacy.
Creation : 22.02.2017 / RTC
Modifications : 29.03.2017 / RTC Few chanages after feedback meeting.
: 12.05.2017 / RTC Update extended properties
: 31.05.2017 / RTC Grant select authorization on the tables
: 04.09.2017 / RTC Add new Context Type for Acceptance.
: 01.11.2018 / SPE Add identification for RUEGG
======================================================================*/
USE [master]
GO
/*****************************************************************/
/********* 1. CREATE SCHEMA [cfg] ********************************/
/*****************************************************************/
DECLARE @cmd varchar(1000)
IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = N'cfg')
BEGIN
SET @cmd='CREATE SCHEMA [cfg] AUTHORIZATION dbo';
EXEC (@cmd);
PRINT 'SCHEMA [cfg] created!'
END;
/*****************************************************************/
/********* 2. CREATE TABLE [master].[cfg].[InstanceContext] *********/
/*****************************************************************/
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[master].[cfg].[InstanceContext]') AND type in (N'U'))
BEGIN
CREATE TABLE [master].[cfg].[InstanceContext]
(
InstanceContextGuid uniqueidentifier NOT NULL,
[Type] CHAR(4),
[Business] VARCHAR(6),
[Behavior] NVARCHAR(128),
[Remark] VARCHAR(256),
[UpdateDate] DATETIME NOT NULL DEFAULT getdate(),
CONSTRAINT [PK_Context] PRIMARY KEY NONCLUSTERED
(
[InstanceContextGuid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)
PRINT 'Table cfg.Context created !'
END
GO
/* Create trigger to update the date */
IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[cfg].[tU_InstanceContext]'))
DROP TRIGGER [cfg].[tU_InstanceContext]
GO
CREATE TRIGGER [cfg].[tU_InstanceContext] on master.[cfg].[InstanceContext] FOR UPDATE
As
BEGIN
UPDATE t
SET t.UpdateDate = getdate()
FROM master.[cfg].[InstanceContext] t
inner join inserted I
ON t.InstanceContextGuid = I.InstanceContextGuid
End
GO
PRINT 'Trigger [tU_InstanceContext] created!'
GO
/* Add check constraint for HCIC_type*/
IF EXISTS (SELECT * FROM sys.check_constraints WHERE object_id = OBJECT_ID(N'[cfg].[CK_Type]') AND parent_object_id = OBJECT_ID(N'[cfg].[InstanceContext]'))
BEGIN
PRINT 'Drop constraint CK_Type on table [InstanceContext] '
ALTER TABLE [cfg].[InstanceContext] DROP CONSTRAINT [CK_Type]
END
GO
PRINT 'Create constraint [CK_Type] on table [InstanceContext]'
ALTER TABLE [cfg].[InstanceContext] WITH CHECK ADD CONSTRAINT [CK_Type] CHECK ([Type] in ('DEVE', 'DEMO', 'FORM', 'VALI', 'ACCE', 'REFE', 'PREP','PROD', 'CLOS'))
GO
PRINT 'Activate contraint [CK_Type] on table [InstanceContext]'
ALTER TABLE [cfg].[InstanceContext] CHECK CONSTRAINT [CK_Type]
GO
/* Add check constraint for business*/
IF EXISTS (SELECT * FROM sys.check_constraints WHERE object_id = OBJECT_ID(N'[cfg].[CK_Business]') AND parent_object_id = OBJECT_ID(N'[cfg].[InstanceContext]'))
BEGIN
PRINT 'Drop constraint CK_Business on table [InstanceContext] '
ALTER TABLE [cfg].[InstanceContext] DROP CONSTRAINT [CK_Business]
END
GO
PRINT 'Create constraint [CK_Business] on table [InstanceContext]'
ALTER TABLE [cfg].[InstanceContext] WITH CHECK ADD CONSTRAINT [CK_Business]
CHECK ([Business] in ('TPCENT', 'TPPHAR', 'TPDWH', 'TPREP','TSCAN', 'PINDEX', 'TPPRI', 'TFACT'))
GO
PRINT 'Activate contraint [CK_Business] on table [InstanceContext]'
ALTER TABLE [cfg].[InstanceContext] CHECK CONSTRAINT [CK_Business]
GO
/* Add check constraint behaviour*/
IF EXISTS (SELECT * FROM sys.check_constraints WHERE object_id = OBJECT_ID(N'[cfg].[CK_Behavior]') AND parent_object_id = OBJECT_ID(N'[cfg].[InstanceContext]'))
BEGIN
PRINT 'Drop constraint CK_Behavior on table [InstanceContext] '
ALTER TABLE [cfg].[InstanceContext] DROP CONSTRAINT [CK_Behavior]
END
GO
PRINT 'Create constraint [CK_Behavior] on table [InstanceContext] '
ALTER TABLE [cfg].[InstanceContext] WITH CHECK ADD CONSTRAINT [CK_Behavior]
CHECK ([Behavior] in ('Enable', 'Disable', 'Maintain', 'Read', 'Other'))
GO
PRINT 'Activate constraint [CK_Behavior] on table [InstanceContext]'
ALTER TABLE [cfg].[InstanceContext] CHECK CONSTRAINT [CK_Behavior]
GO
/* Add unique index [UIXInstanceContext] on [InstanceConstext] */
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'[cfg].[InstanceContext]') AND name = N'UIXInstanceContext')
BEGIN
PRINT 'Suppression de l''index unique [UIXInstanceContext] sur la table [InstanceContext]'
DROP INDEX [UIXInstanceContext] ON [cfg].[InstanceContext] WITH ( ONLINE = OFF )
END
GO
PRINT 'Creation du nouvel index unique [UIXInstanceContext] sur la table [InstanceContext]'
CREATE UNIQUE NONCLUSTERED INDEX [UIXInstanceContext] ON [cfg].[InstanceContext]
(
[Type] ASC,
[Business] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
/*****************************************************************/
/********* 3. CREATE TABLE [master].[cfg].[Identity] *********/
/*****************************************************************/
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[master].[cfg].[Identity]') AND type in (N'U'))
BEGIN
CREATE TABLE [master].[cfg].[Identity]
(
[Format] CHAR(4),
[DnsAlias] SYSNAME,
[Remark] VARCHAR(256),
[UpdateDate] DATETIME NOT NULL DEFAULT getdate(),
[Customer] VARCHAR(4)
)
PRINT 'Table Identity created!'
END
GO
/* Add Customer if not exist */
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Identity' AND COLUMN_NAME = 'Customer')
BEGIN
ALTER TABLE [cfg].[Identity] ADD [Customer] VARCHAR(4) NULL
END
GO
/* Add check constraint HCII_customer*/
IF EXISTS (SELECT * FROM sys.check_constraints WHERE object_id = OBJECT_ID(N'[cfg].[CK_Customer]') AND parent_object_id = OBJECT_ID(N'[cfg].[Identity]'))
BEGIN
PRINT 'Drop constraint CK_Customer on table [Identity] '
ALTER TABLE [cfg].[Identity] DROP CONSTRAINT [CK_Customer]
END
GO
/* Modify Customer type */
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Identity' AND COLUMN_NAME = 'Customer' and DATA_TYPE='char')
BEGIN
ALTER TABLE [cfg].[Identity] ALTER COLUMN [Customer] VARCHAR(4) NULL
END
GO
/* Create trigger on insert to avoid having more than one record*/
IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[cfg].[tI_Identity]'))
DROP TRIGGER [cfg].[tI_Identity]
GO
PRINT 'Create Trigger [tI_Identity]'
GO
CREATE TRIGGER [cfg].[tI_Identity] on master.[cfg].[Identity] INSTEAD OF INSERT
As
BEGIN
IF EXISTS (SELECT * FROM MASTER.[cfg].[Identity])
BEGIN
ROLLBACK TRANSACTION
RAISERROR ('Table can only contain one record, please update the existing record!',10,1)
END
ELSE
INSERT INTO master.[cfg].[Identity]
SELECT [Format], [DnsAlias], [Remark], [UpdateDate], [Customer]
FROM inserted
End
GO
/* Create trigger to update the date */
IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[cfg].[tU_Identity]'))
DROP TRIGGER [cfg].[tU_Identity]
GO
CREATE TRIGGER [cfg].[tU_Identity] on master.[cfg].[Identity] FOR UPDATE
AS
BEGIN
UPDATE t
SET t.UpdateDate = getdate()
FROM master.[cfg].[Identity] t
inner join inserted I
On t.DnsAlias = I.DnsAlias
END
GO
PRINT 'Trigger [tu_Identity] created!'
/* Add check constraint HCII_format*/
IF EXISTS (SELECT * FROM sys.check_constraints WHERE object_id = OBJECT_ID(N'[cfg].[CK_Format]') AND parent_object_id = OBJECT_ID(N'[cfg].[Identity]'))
BEGIN
PRINT 'Drop constraint CK_Format on table [Identity] '
ALTER TABLE [cfg].[Identity] DROP CONSTRAINT [CK_Format]
END
GO
PRINT 'Create constraint [CK_Format] on table [Identity] '
ALTER TABLE [cfg].[Identity] WITH CHECK ADD CONSTRAINT [CK_Format] CHECK ([Format] in ('CVI', 'SUN', 'AMA', 'GCM', 'HCI'))
GO
PRINT 'Activate constraint [CK_Format] on table [Identity]'
ALTER TABLE [cfg].[Identity] CHECK CONSTRAINT [CK_Format]
GO
PRINT 'Create constraint [CK_Customer] on table [Identity] '
ALTER TABLE [cfg].[Identity] WITH CHECK ADD CONSTRAINT [CK_Customer] CHECK ([Customer] in ('SUN', 'AMA','CVI','HCI'))
GO
PRINT 'Activate constraint [CK_Customer] on table [Identity]'
ALTER TABLE [cfg].[Identity] CHECK CONSTRAINT [CK_Customer]
GO
/* Add extented properties */
IF EXISTS (SELECT name FROM fn_listextendedproperty (N'MS_Description','SCHEMA',N'cfg','TABLE',N'IDentity','COLUMN',N'Format') )
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'cfg', @level1type=N'TABLE',@level1name=N'Identity'
, @level2type=N'COLUMN',@level2name=N'Format'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Specifies the subsidiary or group of the pharmacy : CVI, SUN, AMA, GCM or HCI'
, @level0type=N'SCHEMA',@level0name=N'cfg', @level1type=N'TABLE',@level1name=N'Identity', @level2type=N'COLUMN',@level2name=N'Format'
GO
IF EXISTS (SELECT name FROM fn_listextendedproperty (N'MS_Description','SCHEMA',N'cfg','TABLE',N'IDentity','COLUMN',N'DnsAlias'))
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'cfg', @level1type=N'TABLE',@level1name=N'Identity'
, @level2type=N'COLUMN',@level2name=N'DnsAlias'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Specifies the DNS alias of the machine hosting the instance.'
, @level0type=N'SCHEMA',@level0name=N'cfg', @level1type=N'TABLE',@level1name=N'Identity', @level2type=N'COLUMN',@level2name=N'DnsAlias'
GO
IF EXISTS (SELECT name FROM fn_listextendedproperty (N'MS_Description','SCHEMA',N'cfg','TABLE',N'InstanceContext','COLUMN',N'Business'))
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'cfg', @level1type=N'TABLE'
,@level1name=N'InstanceContext', @level2type=N'COLUMN',@level2name=N'Business'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Specifies the type of the environnement : DEVE ,DEMO, FORM, VALI, ACCE, REFE ,PREP, PROD or CLOS.'
, @level0type=N'SCHEMA',@level0name=N'cfg', @level1type=N'TABLE',@level1name=N'InstanceContext', @level2type=N'COLUMN',@level2name=N'Business'
GO
IF EXISTS (SELECT name FROM fn_listextendedproperty (N'MS_Description','SCHEMA',N'cfg','TABLE',N'InstanceContext','COLUMN',N'Type'))
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'cfg', @level1type=N'TABLE'
,@level1name=N'InstanceContext', @level2type=N'COLUMN',@level2name=N'Type'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Specifies the type of applications : TPCENT , TPPHAR, TPREP, TSCAN ,PINDEX, TPPRI or TFACT.'
, @level0type=N'SCHEMA',@level0name=N'cfg', @level1type=N'TABLE',@level1name=N'InstanceContext', @level2type=N'COLUMN',@level2name=N'Type'
GO
IF EXISTS (SELECT name FROM fn_listextendedproperty (N'MS_Description','SCHEMA',N'cfg','TABLE',N'InstanceContext','COLUMN',N'Behavior'))
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'cfg', @level1type=N'TABLE'
,@level1name=N'InstanceContext', @level2type=N'COLUMN',@level2name=N'Behavior'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Specifies the behaviour Enable, Disable, Maintain, Read, Other'
, @level0type=N'SCHEMA',@level0name=N'cfg', @level1type=N'TABLE',@level1name=N'InstanceContext', @level2type=N'COLUMN',@level2name=N'Behavior'
GO
/****************************************************************/
/******* AUTHORISATIONS ON TABLES cfg *********/
/****************************************************************/
USE [master]
GO
GRANT SELECT ON [master].[cfg].[Identity] TO [public] AS [dbo]
GO
GRANT SELECT ON [master].[cfg].[InstanceContext] TO [public] AS [dbo]
GO
/* Sample data insertion
/* Validation pharmacy*/
INSERT INTO [master].[cfg].[InstanceContext]
(InstanceContextGuid
,[Type]
,[Business]
,[Behavior]
,[Remark]
,[UpdateDate])
VALUES
(Newid()
,'VALI'
,'TPPHAR'
,'Enable'
,'Table initialization DBA'
,Default)
/* Reference */
INSERT INTO [master].[cfg].[InstanceContext]
(InstanceContextGuid
,[Type]
,[Business]
,[Behavior]
,[Remark]
,[UpdateDate])
VALUES
(Newid()
,'VALI'
,'TPREP'
,'Enable'
,'Table initialization DBA'
,Default)
/* Validation datawarehouse*/
INSERT INTO [master].[cfg].[InstanceContext]
(InstanceContextGuid
,[Type]
,[Business]
,[Behavior]
,[Remark]
,[UpdateDate])
VALUES
(Newid()
,'VALI'
,'TPDWH'
,'Enable'
,'Table initialization DBA'
,Default)
/* Production AMA, sun, CVI */
INSERT INTO [master].[cfg].[InstanceContext]
(InstanceContextGuid
,[Type]
,[Business]
,[Behavior]
,[Remark]
,[UpdateDate])
VALUES
(Newid()
,'PROD'
,'TPPHAR'
,'Enable'
,'Table initialization DBA'
,Default)
/* Identity table init for all except ITOP set up env */
DECLARE @Organizational_Unit as INT,
@ouCode AS char(3),
@alias as varchar(100),
@subCode as char(5),
@ouSubsidiary as int
EXEC Arizona.dbo.sp_bmc_Bmc_Applic_Default
@in_job_type = 3,
@in_param_int_1 = null,
@in_param_int_2 = null,
@in_param_varchar_1 = 'cvCurrentOrganizationalUnit',
@out_default_value = @Organizational_Unit output,
@out_param_int_1 = null
SELECT TOP 1 @ouCode = OU_code, @ouSubsidiary = ou_subsidiary
FROM Arizona.dbo.Organizational_Unit
WHERE Organizational_Unit_Id = @Organizational_Unit;
SELECT TOP 1 @subCode = CASE
WHEN @ouSubsidiary in (1,111) THEN 'SUN'
WHEN @ouSubsidiary = 102 THEN 'AMA'
WHEN @ouSubsidiary = 124 THEN 'CVI''
END
SELECT TOP 1 @alias = SS_server_name
FROM Arizona.dbo.System_site
WHERE CHARINDEX(@ouCode,SS_server_name) > 0
select @ouSubsidiary [SubId], @subCode [SubCode], @alias [alias]
INSERT INTO [master].[cfg].[Identity]
([Format]
,[DnsAlias]
,[Remark]
,[UpdateDate])
VALUES
(@subCode
,isnull(@alias, 'No DNS found')
,'Record initialization DBA'
,Default)
/* Identity table init for ITOP set up env */
INSERT INTO [master].[cfg].[Identity]
([Format]
,[DnsAlias]
,[Remark]
,[UpdateDate])
VALUES
('HCI'
,'DNS to update'
,'Initialization ITOP'
,Default)
/* New Rollout */
INSERT INTO [master].[cfg].[InstanceContext]
(InstanceContextGuid
,[Type]
,[Business]
,[Behavior]
,[Remark]
,[UpdateDate])
VALUES
(Newid()
,'PREP'
,'TPPHAR'
,'Enable'
,'Initialization ITOP'
,Default)
*/
GO