This commit is contained in:
2024-03-07 16:52:14 +01:00
parent bb404b6ce6
commit 859a324c7e
203 changed files with 68602 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
IF OBJECT_ID('tempdb..#state')IS NOT NULL BEGIN;
DROP TABLE #state;
END;
SELECT
database_name = DB_NAME(database_id)
, log_size_mb = CAST(SUM(CASE WHEN f.type_desc = 'LOG' THEN size END) * 8. / 1024 AS DECIMAL(18,2))
, row_size_mb = CAST(SUM(CASE WHEN type_desc = 'ROWS' THEN size END) * 8. / 1024 AS DECIMAL(18,2))
, total_size_mb = CAST(SUM(size) * 8. / 1024 AS DECIMAL(18,2))
, CAST(NULL AS DECIMAL(18,2)) AS compression_backup_percent
, CAST(NULL AS DECIMAL(18,2)) AS compressed_backup_size_MB
INTO #state
FROM sys.master_files F WITH(NOWAIT)
WHERE LOWER(DB_NAME(database_id)) = 'arizona'
GROUP BY F.database_id
--#region start dummy backup
BACKUP DATABASE [Arizona] TO DISK = N'nul' WITH COPY_ONLY, NOFORMAT, INIT, NAME = N'Arizona-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10
--#endregion start dummy backup
--#region compute last backup compressed size
UPDATE s SET [s].[compression_backup_percent] = x.[compressPct]
, s.[compressed_backup_size_MB] = x.[compressed_bkp_MB]
FROM [#state] s
CROSS APPLY (
SELECT TOP (1)
[a].[backup_start_date]
,[a].[backup_finish_date]
,[a].[type]
,[a].[backup_size]
,[a].[backup_size] / 1024 / 1024 / 1024 AS bkp_size_GB
,[a].[backup_size] / 1024 / 1024 AS bkp_size_MB
,[a].[compressed_backup_size]
,[a].[compressed_backup_size] / 1024 / 1024 / 1024 AS compressed_bkp_GB
,[a].[compressed_backup_size] / 1024 / 1024 AS compressed_bkp_MB
,[a].[is_copy_only]
,compressPct = CAST(100.0 * [a].[compressed_backup_size] / [a].[backup_size] AS DECIMAL(5, 1))
FROM msdb.dbo.backupset a
WHERE LOWER([a].[database_name]) = 'arizona' --LOWER(s.[database_name])
AND [a].[type]='D' --full bkp only
AND [a].[is_copy_only] = 1
AND [a].[backup_start_date] > DATEADD(HOUR, -1, CURRENT_TIMESTAMP)
ORDER BY [a].[backup_start_date] DESC
) x
--#endregion compute last backup compressed size
SELECT *
FROM [#state]

View File

@@ -0,0 +1,35 @@
DECLARE @oneGb INT = 1024; -- MB
-- "hard coded" options
DECLARE @architecture NVARCHAR(10) = 'x64';
DECLARE @totalram INT = 16 * @oneGb;
DECLARE @corenumber INT = 2;
DECLARE @otherApps INT = 0; --reserved ram for other apps in Mo
-- Thread stack sizes in MB
DECLARE @threadStackSizes TABLE (Architecture NVARCHAR(10), Size INT);
INSERT INTO @threadStackSizes VALUES ('x86', 1), ('x64', 2), ('IA64', 4);
DECLARE @threadStackSize INT;
SELECT @threadStackSize = Size FROM @threadStackSizes WHERE Architecture = @architecture;
DECLARE @osReservedPart FLOAT;
SET @osReservedPart = CASE WHEN @totalram < (20 * @oneGb) THEN 0.2 ELSE 0.125 END;
DECLARE @forOS INT;
SET @forOS = CAST(@totalram * @osReservedPart AS INT);
DECLARE @coretemp INT;
SET @coretemp = CASE WHEN @corenumber > 4 THEN 0 ELSE @corenumber END;
DECLARE @sqlThreads INT;
SET @sqlThreads = 256 + (@coretemp - 4) * 8;
DECLARE @temp FLOAT;
SET @temp = @corenumber / 4.0;
DECLARE @maxMemory INT;
SET @maxMemory = @totalram - @forOS - @otherApps - (@sqlThreads * @threadStackSize) - (1024 * CEILING(@temp));
-- Display the result
SELECT @maxMemory AS 'Max Memory (MB)';

View File

@@ -0,0 +1,53 @@
/*
derived from http://sqlmax.chuvash.eu/
SQL Max Memory = TotalPhyMem - (NumOfSQLThreads * ThreadStackSize) - (1GB * CEILING(NumOfCores/4)) - OS Reserved
NumOfSQLThreads = 256 + (NumOfProcessors*- 4) * 8 (* If NumOfProcessors > 4, else 0)
ThreadStackSize = 2MB on x64 or 4 MB on 64-bit (IA64)
OS Reserved = 20% of total ram for under if system has 15GB. 12.5% for over 20GB
*/
DECLARE @totSysMemKb INT;
DECLARE @NumOfCores INT;
DECLARE @NumOfProcessors INT;
DECLARE @NumOfSQLThreads INT;
DECLARE @isX64 BIT = 1;
DECLARE @ThreadStackSize INT;
DECLARE @osReserved INT;
DECLARE @newMaxMem INT;
DECLARE @appReserved INT = 4*1024*1024; --memory reserved for other apps on the server in Kb
SELECT @totSysMemKb = [total_physical_memory_kb]
FROM [sys].[dm_os_sys_memory];
SELECT @NumOfCores = [cpu_count], @NumOfProcessors = [cpu_count] / [hyperthread_ratio]
FROM [sys].[dm_os_sys_info];
SELECT @isX64 = CHARINDEX('64-bit',CAST(SERVERPROPERTY('Edition') AS VARCHAR(MAX)));
SELECT @ThreadStackSize = CASE WHEN @isX64=1 THEN 4096 ELSE 2048 END;
--force 16 Go, 2 vcpu, 2 cores
SELECT @totSysMemKb = 16 * 1024 * 1024, @NumOfProcessors = 2, @NumOfCores = 2
SELECT @NumOfSQLThreads = 256 + (@NumOfProcessors - 4) * 8 * (CASE WHEN @NumOfProcessors >4 THEN @NumOfProcessors ELSE 0 END);
SELECT @osReserved = CASE WHEN @totSysMemKb < (20*1024*1024) THEN @totSysMemKb * 0.2 ELSE @totSysMemKb * 0.125 END;
PRINT'
@totSysMemKb: '+COALESCE(CAST(@totSysMemKb AS VARCHAR(MAX)),'null')+'
@NumOfCores: '+COALESCE(CAST(@NumOfCores AS VARCHAR(MAX)),'null')+'
@NumOfProcessors: '+COALESCE(CAST(@NumOfProcessors AS VARCHAR(MAX)),'null')+'
@NumOfSQLThreads: '+COALESCE(CAST(@NumOfSQLThreads AS VARCHAR(MAX)),'null')+'
@isX64: '+COALESCE(CAST(@isX64 AS VARCHAR(MAX)),'null')+'
@ThreadStackSize: '+COALESCE(CAST(@ThreadStackSize AS VARCHAR(MAX)),'null')+'
@osReserved: '+COALESCE(CAST(@osReserved AS VARCHAR(MAX)),'null')+'
@appReserved: '+COALESCE(CAST(@appReserved AS VARCHAR(MAX)),'null')+'
';
SELECT @newMaxMem = @totSysMemKb - (@NumOfSQLThreads * @ThreadStackSize) - ((1* 1024 * 1024) * CEILING(@NumOfCores/4)) - @osReserved - @appReserved;
SELECT
@newMaxMem AS maxMemKb
, @newMaxMem / 1024 AS maxMemMb
, @newMaxMem / 1024 /1024 AS maxMemGb
;

View File

@@ -0,0 +1,30 @@
/* Configuration des postes pour éviter le deadlock lors des rajout d'abonnements suite à des mises à jours doit être passé après la virtualisation des serveurs.*/
Exec ActivePos_server.dbo.ExecuteOnAllPos '
DECLARE
@delay varchar(5),
@message NVARCHAR(4000)
BEGIN TRY
DECLARE @mac AS TABLE (MacAddress VARCHAR(400) null)
DECLARE @posId AS VARCHAR(5)
INSERT INTO @mac
EXEC xp_cmdshell ''getmac''
SELECT @posId = Number FROM ActivePos_read..PointOfSale pos
join @mac m
ON LEFT(m.MacAddress, 18) = pos.MacAddress
SET @delay = ''@'' + convert(varchar(2),2*@posId) + ''m''
UPDATE ActivePos_write.dbo.[Settings]
SET [SettingValue]= @delay
WHERE [SettingId]=''Configuration.ConfigSections.Plugins.Parts.ManageSqlSubscriptionJob.Schedule''
AND [ApplicationId]=''e9f3ada2-555c-4fb9-b109-5d8684d77135''
and @posId < 30
END TRY
BEGIN CATCH
select @message = ERROR_MESSAGE()
select @message = ''Error while updating schedule on POS '''' + convert(varchar(2),2*@posId) + ''''.'' + @message
raiserror (@message, 13,1)
END CATCH
', 1

View File

@@ -0,0 +1,6 @@
USE msdb
GO
EXEC dbo.sp_start_job
@job_name = N'DR92160 - Replication Check'
GO

View File

@@ -0,0 +1,332 @@
USE [master]
/* Create SQL Master key */
IF NOT EXISTS(SELECT 1 FROM sys.symmetric_keys WHERE name like '%DatabaseMasterKey%')
BEGIN
EXEC('CREATE MASTER KEY ENCRYPTION BY PASSWORD = ''$mk''')
/* Backup SQL Master key */
EXEC('BACKUP MASTER KEY TO FILE = ''$bck'' ENCRYPTION BY PASSWORD = ''$mk''')
END
/* Create Atlas Service Broker Certificate */
IF NOT EXISTS(SELECT 1 FROM sys.certificates WHERE name = 'TriaPharmSQLCert')
BEGIN
EXEC('CREATE CERTIFICATE TriaPharmSQLCert FROM FILE = ''D:\SQLDatabaseDump\Certificates\TriaPharmSQLCert.cer'' WITH PRIVATE KEY (FILE = ''D:\SQLDatabaseDump\Certificates\TriaPharmSQLCert.pvk'', DECRYPTION BY PASSWORD = ''$cert'');')
END
/* SQL Broker Endpoint Creation */
IF NOT EXISTS ( SELECT 1 FROM sys.tcp_endpoints WHERE name = 'ServiceBrokerEndpoint4022')
BEGIN
CREATE ENDPOINT [ServiceBrokerEndpoint4022]
STATE=STARTED
AS TCP (LISTENER_PORT = 4022, LISTENER_IP = ALL)
FOR SERVICE_BROKER (MESSAGE_FORWARDING = DISABLED
, MESSAGE_FORWARD_SIZE = 10
, AUTHENTICATION = CERTIFICATE TriaPharmSQLCert
, ENCRYPTION = REQUIRED ALGORITHM AES)
EXEC('GRANT CONNECT on ENDPOINT::[ServiceBrokerEndpoint4022] TO [PUBLIC]')
END
USE [Arizona]
/*------------------- Declaration des variables --------------------*/
DECLARE @cvCurrentOrganizationalUnit int,
@subsidiary_id int,
@skip tinyint,
@servicenamecheck varchar(255),
@out_default_value varchar(60),
@format varchar(60),
@ou varchar(3),
@envtype char(1),
@envtype2 char(1),
@ServiceName varchar(150),
@RteAddress varchar(150),
@stmt nvarchar(4000)
/*------------ Affectation des parametres aux variables ------------*/
SET @cvCurrentOrganizationalUnit = null
SET @subsidiary_id = null
SET @ou = ''
SET @skip = 0
SELECT @envtype = CASE WHEN [Type] = 'DEVE' OR [Type] = 'VALI' THEN 'D' ELSE 'P' END FROM master.cfg.InstanceContext
SELECT @envtype2 = CASE WHEN [Type] = 'DEVE' THEN 'D' WHEN [Type] = 'VALI' THEN 'T' ELSE 'P' END FROM master.cfg.InstanceContext
/* ------------------------------------------------------------------------------------------------------------------------------------- */
/* \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 1 : RETRIEVE FORMAT AND OU CODE /////////////////////////////////////////////////// */
/* ------------------------------------------------------------------------------------------------------------------------------------- */
IF EXISTS(SELECT 1 FROM [master].[cfg].[InstanceContext] WHERE Business = 'TPPHAR')
BEGIN
/* Get the cvCurrentOrganizationalUnit */
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 = @out_default_value OUTPUT,
@out_param_int_1 = null;
SELECT @cvCurrentOrganizationalUnit = convert(int,@out_default_value);
/* Get the subsidiary id and OU code */
SELECT @subsidiary_id = ou.OU_subsidiary, @ou = ou.OU_Code
FROM arizona.dbo.Organizational_unit ou with (nolock)
WHERE ou.Organizational_unit_ID = @cvCurrentOrganizationalUnit;
/* Get the current format */
SELECT @format = UPPER(sub.SUB_code)
FROM arizona.dbo.Subsidiary sub with (nolock)
WHERE sub.Subsidiary_ID = @subsidiary_id;
/* Check if we have a value, if not leave this SP */
IF @format is null
BEGIN
PRINT 'ERROR: Format is not found!'
SET @skip = 1
END
IF @ou = ''
BEGIN
PRINT 'ERROR: OU is not found!'
SET @skip = 1
END
/* Change the value into a compatible format */
IF @format = 'COOP'
BEGIN
SET @format = 'CVI'
END
IF @format = 'CENT'
BEGIN
SET @format = 'SUN'
END
IF @format = '000'
BEGIN
SET @format = 'AAI'
END
/* ------------------------------------------------------------------------------------------------------------------------------------- */
/* \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 2 : CREATE SERVICE BROEKR OBJECTS ////////////////////////////////////////////////// */
/* ------------------------------------------------------------------------------------------------------------------------------------- */
IF @skip = 0
BEGIN
/* Activate Service Broker */
IF NOT EXISTS (SELECT 1 FROM sys.databases WHERE name = 'Arizona' and is_broker_enabled = 1)
BEGIN
IF (SERVERPROPERTY('EngineEdition') <> 8)
BEGIN
ALTER DATABASE [Arizona] SET ENABLE_BROKER
END
END
/* Create Atlas Route */
IF NOT EXISTS (select 1 from sys.routes where name = '//ATLAS/' + @envtype + 'GALATLAS/Atlas')
BEGIN
SET @ServiceName = '//ATLAS/' + @envtype + 'GALATLAS/AtlasDataCheckRequestService'
IF @envtype = 'P'
BEGIN
SET @RteAddress = 'TCP://atlas.centralinfra.net:4022'
END
ELSE
BEGIN
SET @RteAddress = 'TCP://atlas-dev.centralinfra.net:4022'
END
SET @stmt = N'CREATE ROUTE [//ATLAS/' + @envtype + 'GALATLAS/Atlas] WITH SERVICE_NAME = ''' + @ServiceName + ''', ADDRESS=''' + @RteAddress + ''' ;'
EXEC(@stmt)
END
/* Create Ceres Route */
IF NOT EXISTS (select 1 from sys.routes where name = '//GAIA/' + @envtype2 + 'GALCTP/Ceres')
BEGIN
SET @ServiceName = '//GAIA/' + @envtype2 + 'GALCTP/CeresRequestService'
IF @envtype = 'P'
BEGIN
SET @RteAddress = 'TCP://SWGCMDB01.centralinfra.net:4022'
END
IF @envtype2 = 'T'
BEGIN
SET @RteAddress = 'TCP://triafin-test.centralinfra.net:4022'
END
IF @envtype2 = 'D'
BEGIN
SET @RteAddress = 'TCP://triafin-integration.centralinfra.net:4022'
END
SET @stmt = N'CREATE ROUTE [//GAIA/' + @envtype2 + 'GALCTP/Ceres] WITH SERVICE_NAME = ''' + @ServiceName + ''', ADDRESS=''' + @RteAddress + ''' ;'
EXEC(@stmt)
END
/* Drop service ATLAS */
SELECT @servicenamecheck = name FROM sys.services WHERE name like '%AtlasDataCheckProcessingService%'
IF EXISTS (SELECT 1 from sys.services WHERE name = @servicenamecheck)
BEGIN
EXEC('DROP SERVICE [' + @servicenamecheck +']')
END
/* Drop contract ATLAS */
IF EXISTS (SELECT 1 from sys.service_contracts WHERE name = 'AtlasDataCheckContract')
BEGIN
DROP CONTRACT AtlasDataCheckContract
END
/* DROP AND CREATE MESSAGES ATLAS */
IF EXISTS (SELECT 1 from sys.service_message_types WHERE name = 'AtlasDataCheckSenderMessageType')
BEGIN
DROP MESSAGE TYPE [AtlasDataCheckSenderMessageType]
END
IF NOT EXISTS (SELECT 1 from sys.service_message_types WHERE name = 'AtlasDataCheckSenderMessageType')
BEGIN
CREATE MESSAGE TYPE AtlasDataCheckSenderMessageType validation=well_formed_xml
END
IF EXISTS (SELECT 1 from sys.service_message_types WHERE name = 'AtlasDataCheckReceiverMessageType')
BEGIN
DROP MESSAGE TYPE [AtlasDataCheckReceiverMessageType]
END
IF NOT EXISTS (SELECT 1 from sys.service_message_types WHERE name = 'AtlasDataCheckReceiverMessageType')
BEGIN
CREATE MESSAGE TYPE AtlasDataCheckReceiverMessageType validation=well_formed_xml
END
/* CREATE CONTRACT ATLAS */
IF NOT EXISTS (SELECT 1 FROM sys.service_contracts WHERE name = 'AtlasDataCheckContract')
BEGIN
CREATE CONTRACT AtlasDataCheckContract
(
AtlasDataCheckSenderMessageType SENT BY INITIATOR,
AtlasDataCheckReceiverMessageType SENT BY TARGET
)
END
/* DROP AND CREATE QUEUE ATLAS */
IF EXISTS (SELECT 1 from sys.service_queues WHERE name = 'AtlasDataCheckProcessingQueue')
BEGIN
DROP QUEUE AtlasDataCheckProcessingQueue
END
IF NOT EXISTS (SELECT 1 from sys.service_queues WHERE name = 'AtlasDataCheckProcessingQueue')
BEGIN
CREATE QUEUE AtlasDataCheckProcessingQueue
WITH STATUS = ON ,
ACTIVATION (
STATUS = ON ,
PROCEDURE_NAME = [atl].[ProcessCheckData] ,
MAX_QUEUE_READERS = 10 ,
EXECUTE AS SELF
)
END
/* CREATE SERVICE ATLAS */
SET @servicenamecheck = '//' + @format+@ou + 'APS/APSSQL/AtlasDataCheckProcessingService'
IF NOT EXISTS (SELECT 1 FROM sys.service_contracts WHERE name = @servicenamecheck)
BEGIN
EXEC('CREATE SERVICE [' + @servicenamecheck + '] ON QUEUE AtlasDataCheckProcessingQueue (AtlasDataCheckContract)')
END
/* SET SECURITY ATLAS */
EXEC('GRANT SEND on service::[' + @servicenamecheck + '] TO PUBLIC')
/* Drop service CERES */
SELECT @servicenamecheck = name FROM sys.services WHERE name like '%CeresProcessingService%'
IF EXISTS (SELECT 1 from sys.services WHERE name = @servicenamecheck)
BEGIN
EXEC('DROP SERVICE [' + @servicenamecheck +']')
END
/* Drop contract CERES */
IF EXISTS (SELECT 1 from sys.service_contracts WHERE name = 'CeresContract')
BEGIN
DROP CONTRACT CeresContract
END
/* DROP AND CREATE MESSAGES CERES */
IF EXISTS (SELECT 1 from sys.service_message_types WHERE name = 'CeresSenderMessageType')
BEGIN
DROP MESSAGE TYPE [CeresSenderMessageType]
END
IF NOT EXISTS (SELECT 1 from sys.service_message_types WHERE name = 'CeresSenderMessageType')
BEGIN
CREATE MESSAGE TYPE CeresSenderMessageType validation=well_formed_xml
END
IF EXISTS (SELECT 1 from sys.service_message_types WHERE name = 'CeresReceiverMessageType')
BEGIN
DROP MESSAGE TYPE [CeresReceiverMessageType]
END
IF NOT EXISTS (SELECT 1 from sys.service_message_types WHERE name = 'CeresReceiverMessageType')
BEGIN
CREATE MESSAGE TYPE CeresReceiverMessageType validation=well_formed_xml
END
/* CREATE CONTRACT CERES */
IF NOT EXISTS (SELECT 1 FROM sys.service_contracts WHERE name = 'CeresContract')
BEGIN
CREATE CONTRACT CeresContract
(
CeresSenderMessageType SENT BY INITIATOR,
CeresReceiverMessageType SENT BY TARGET
)
END
/* DROP AND CREATE QUEUE CERES */
IF EXISTS (SELECT 1 from sys.service_queues WHERE name = 'CeresProcessingQueue')
BEGIN
DROP QUEUE CeresProcessingQueue
END
IF NOT EXISTS (SELECT 1 from sys.service_queues WHERE name = 'CeresProcessingQueue')
BEGIN
CREATE QUEUE CeresProcessingQueue
WITH STATUS = ON ,
ACTIVATION (
STATUS = ON ,
PROCEDURE_NAME = [crs].[ProcessRequest] ,
MAX_QUEUE_READERS = 10 ,
EXECUTE AS SELF
)
END
/* CREATE SERVICE CERES */
SET @servicenamecheck = '//' + @format+@ou + 'APS/APSSQL/CeresProcessingService'
IF NOT EXISTS (SELECT 1 FROM sys.service_contracts WHERE name = @servicenamecheck)
BEGIN
EXEC('CREATE SERVICE [' + @servicenamecheck + '] ON QUEUE CeresProcessingQueue (CeresContract)')
END
/* SET SECURITY ATLAS */
EXEC('GRANT SEND on service::[' + @servicenamecheck + '] TO PUBLIC')
END
END

View File

@@ -0,0 +1,12 @@
/*
TSC 27.12.2023 Removed managmenent of login centralinfra\L-CP-GL-AP-ATLAS-SQL-WSVC1 (related to centralPharma domain, which doesn't exists anymore)
*/
USE [master]
GO
IF EXISTS(SELECT 1 FROM SYS.syslogins WHERE name = 'BUILTIN\Administrators')
BEGIN
DROP LOGIN [BUILTIN\Administrators]
END
GO

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,57 @@
/* 23.06.2021 RTC TFS 65413 Optimize RAM configuration */
EXEC sys.sp_configure N'show advanced options', N'1' RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N'min server memory (MB)', N'1024'
GO
DECLARE @maxMem INT;
DECLARE @totSysMemKb INT;
DECLARE @NumOfCores INT;
DECLARE @NumOfProcessors INT;
DECLARE @NumOfSQLThreads INT;
DECLARE @isX64 BIT = 1;
DECLARE @ThreadStackSize INT;
DECLARE @osReserved INT;
DECLARE @newMaxMem INT;
DECLARE @appReserved INT = 0*1024*1024; --memory reserved for other apps on the server in Kb
SELECT @totSysMemKb = [total_physical_memory_kb]
FROM [sys].[dm_os_sys_memory];
SELECT @NumOfCores = [cpu_count], @NumOfProcessors = [cpu_count] / [hyperthread_ratio]
FROM [sys].[dm_os_sys_info];
SELECT @isX64 = CHARINDEX('64-bit',CAST(SERVERPROPERTY('Edition') AS VARCHAR(MAX)));
SELECT @ThreadStackSize = CASE WHEN @isX64=1 THEN 4096 ELSE 2048 END;
SELECT @NumOfSQLThreads = 256 + (@NumOfProcessors - 4) * 8 * (CASE WHEN @NumOfProcessors >4 THEN @NumOfProcessors ELSE 0 END);
select @NumOfCores = 1, @NumOfProcessors = 8
SELECT @osReserved = CASE WHEN @totSysMemKb < (20*1024*1024) THEN @totSysMemKb * 0.2 ELSE @totSysMemKb * 0.125 END;
PRINT'
@totSysMemKb: '+COALESCE(CAST(@totSysMemKb AS VARCHAR(MAX)),'null')+'
@NumOfCores: '+COALESCE(CAST(@NumOfCores AS VARCHAR(MAX)),'null')+'
@NumOfProcessors: '+COALESCE(CAST(@NumOfProcessors AS VARCHAR(MAX)),'null')+'
@NumOfSQLThreads: '+COALESCE(CAST(@NumOfSQLThreads AS VARCHAR(MAX)),'null')+'
@isX64: '+COALESCE(CAST(@isX64 AS VARCHAR(MAX)),'null')+'
@ThreadStackSize: '+COALESCE(CAST(@ThreadStackSize AS VARCHAR(MAX)),'null')+'
@osReserved: '+COALESCE(CAST(@osReserved AS VARCHAR(MAX)),'null')+'
@appReserved: '+COALESCE(CAST(@appReserved AS VARCHAR(MAX)),'null')+'
';
SELECT @newMaxMem = @totSysMemKb - (@NumOfSQLThreads * @ThreadStackSize) - ((1* 1024 * 1024) * CEILING(@NumOfCores/4)) - @osReserved - @appReserved;
SELECT @MaxMem = @newMaxMem / 1024
EXEC sys.sp_configure N'max server memory (MB)', @maxMem
RECONFIGURE WITH OVERRIDE
EXEC sys.sp_configure N'show advanced options', N'0' RECONFIGURE WITH OVERRIDE
UPDATE HCITools.dbo.HCI_PARAMS
SET HCIP_value = @MaxMem
WHERE HCIP_key = 'MAXSRVMEM'
GO

View File

@@ -0,0 +1,69 @@
/*=============================================================================
TPDT-283
Update central system_site values for a specific OU
Parameters
----------------------
In script parameters updated from Powershell are present:
@ou_id The id ofthe OU we need to update. This id is fetched from the local machine being migrated.
@fqdn The FQDN of the machine being migrated to Azure. This is fetched from a DNS request, not built.
@alias The alias of the machine being migrated to Azure. This is logically built from the FQDN
Context
----------------------
This script is called from a powershell in the task sequence during the migration to Azure.
The excution context is the local pharmacy being moved to Azure, but updating the central via the linked server arizonaCash.
It ensure that the system_site reflect the new hostname of the machine, so that labels are delivered correctly.
Creation : 04.03.2024 / TSC
Modifications:
07.03.2024 TSC Rewrote to connect to the central through the pharmacy linked server ArizonaCash
The values in the local pharmacy are updated as well
=============================================================================*/
USE master;
GO
DECLARE @ou_id INT;
DECLARE @fqdn VARCHAR(100) = '$fqdn';
DECLARE @alias VARCHAR(100) = '$alias';
EXECUTE Arizona.[dbo].[sp_bmc_Bmc_Applic_Default]
@in_job_type = 3,
@in_param_int_1 = NULL, /* Company */
@in_param_int_2 = NULL, /* Subsidiary */
@in_param_varchar_1 = 'cvCurrentOrganizationalUnit',
@out_default_value = @ou_id OUTPUT,
@out_param_int_1 = NULL;
--central
UPDATE ss
SET [ss].[SS_server_name] = @alias
, [ss].[SS_IP_server_address] = @alias
, [ss].[SS_domain_name] = @fqdn
FROM [arizonaCash].[arizona].[dbo].[Organizational_unit] ou
JOIN [arizonaCash].[arizona].[dbo].[System_site] ss ON ss.[System_site_ID] = ou.[OU_system_site]
WHERE ou.[Organizational_unit_ID] = @ou_id;
UPDATE ssi
SET [ssi].[SSSI_SQL_instance_name] = @alias+'\APSSQL'
FROM [arizonaCash].[arizona].[dbo].[Organizational_unit] ou
JOIN [arizonaCash].[arizona].[dbo].[System_site] ss ON ss.[System_site_ID] = ou.[OU_system_site]
JOIN [arizonaCash].[arizona].[dbo].[System_site_SQL_instance] ssi ON ssi.[SSSI_system_site] = ss.[System_site_ID]
WHERE ou.[Organizational_unit_ID] = @ou_id;
--local
UPDATE ss
SET [ss].[SS_server_name] = @alias
, [ss].[SS_IP_server_address] = @alias
, [ss].[SS_domain_name] = @fqdn
FROM [arizona].[dbo].[Organizational_unit] ou
JOIN [arizona].[dbo].[System_site] ss ON ss.[System_site_ID] = ou.[OU_system_site]
WHERE ou.[Organizational_unit_ID] = @ou_id;
UPDATE ssi
SET [ssi].[SSSI_SQL_instance_name] = @alias+'\APSSQL'
FROM [arizona].[dbo].[Organizational_unit] ou
JOIN [arizona].[dbo].[System_site] ss ON ss.[System_site_ID] = ou.[OU_system_site]
JOIN [arizona].[dbo].[System_site_SQL_instance] ssi ON ssi.[SSSI_system_site] = ss.[System_site_ID]
WHERE ou.[Organizational_unit_ID] = @ou_id;

View File

@@ -0,0 +1,53 @@
/*=============================================================================
TPDT-283
Update central system_site values for a specific OU
Parameters
----------------------
In script parameters updated from Powershell are present:
@ou_id The id ofthe OU we need to update. This id is fetched from the local machine being migrated.
@fqdn The FQDN of the machine being migrated to Azure. This is fetched from a DNS request, not built.
@mac The MAC address fetched from the local machine
Context
----------------------
This script is called from a powershell in the task sequence during the migration to Azure.
The excution context is the local pharmacy being moved to Azure, but updating the central via the linked server arizonaCash.
It ensure that the point_of_sale table reflect the new hostname and mac address of the machine migrating to Azure
Creation : 04.03.2024 / TSC
Modifications:
07.03.2024 TSC Rewrote to connect to the central through the pharmacy linked server ArizonaCash
The values in the local pharmacy are updated as well
=============================================================================*/
USE [master];
GO
DECLARE @ou_id INT;
DECLARE @fqdn VARCHAR(100) = '$fqdn';
DECLARE @mac VARCHAR(100) = '$mac';
EXECUTE Arizona.[dbo].[sp_bmc_Bmc_Applic_Default]
@in_job_type = 3,
@in_param_int_1 = NULL, /* Company */
@in_param_int_2 = NULL, /* Subsidiary */
@in_param_varchar_1 = 'cvCurrentOrganizationalUnit',
@out_default_value = @ou_id OUTPUT,
@out_param_int_1 = NULL;
--central
UPDATE ps
SET [ps].[POS_MAC_address] = @mac
, [ps].[POS_hostname] = @fqdn
FROM [arizonaCash].[arizona].[dbo].[Point_of_sale] ps
WHERE [ps].[POS_organizational_unit] = @ou_id
AND [ps].[POS_number]=99;
--local
UPDATE ps
SET [ps].[POS_MAC_address] = @mac
, [ps].[POS_hostname] = @fqdn
FROM [arizona].[dbo].[Point_of_sale] ps
WHERE [ps].[POS_organizational_unit] = @ou_id
AND [ps].[POS_number]=99;

View File

@@ -0,0 +1,51 @@
IF (SELECT COUNT(*) FROM [master].[cfg].[Identity]) = 0
BEGIN
INSERT INTO [master].[cfg].[Identity]
([Format]
,[DnsAlias]
,[Remark]
,[UpdateDate]
,[Customer])
VALUES
('$format'
,'$fqdn'
,'Initialization DBA'
,Default
,'$customer')
END
ELSE
BEGIN
UPDATE [master].[cfg].[Identity]
SET [Format] = '$format'
,[DnsAlias] = '$fqdn'
, [Remark] = 'DBA update after Rollout'
, [Customer] = '$customer'
END
IF (SELECT COUNT(*) FROM [master].[cfg].[InstanceContext]) = 0
BEGIN
INSERT INTO [master].[cfg].[InstanceContext]
(InstanceContextGuid
,[Type]
,[Business]
,[Behavior]
,[Remark]
,[UpdateDate])
VALUES
(Newid()
,'$context'
,'TPPHAR'
,'Enable'
,'Initialization DBA'
,Default)
END
ELSE
BEGIN
IF EXISTS(SELECT 1 FROM [master].[cfg].[InstanceContext] WHERE [Type] = 'PREP')
UPDATE [master].[cfg].[InstanceContext]
SET [Type] = '$context'
,[Business] = 'TPPHAR'
,[Behavior] = 'Enable'
,[Remark] = 'DBA update after Rollout'
END

View File

@@ -0,0 +1,11 @@
exec master.dbo.sp_configure 'show advanced option', 1;
RECONFIGURE WITH OVERRIDE
exec master.dbo.sp_configure 'Ad Hoc Distributed Queries',1
exec master.dbo.sp_configure 'xp_cmdshell',1
exec master.dbo.sp_configure 'clr enabled',1
exec master.dbo.sp_configure 'Database Mail XPs',1
exec master.dbo.sp_configure 'show advanced option', 0;
RECONFIGURE WITH OVERRIDE
EXECUTE [HCITools].[dbo].[apssys_CLR_Triapharm_Database_Tools]
GO

View File

@@ -0,0 +1,239 @@
USE [Arizona];
GO
IF EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = 'apscounter')
BEGIN
IF database_principal_id('apscounter') is not null
BEGIN
ALTER USER apscounter WITH LOGIN=apscounter
END
END
IF EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = 'arizonacash')
BEGIN
IF database_principal_id('arizonacash') is not null
BEGIN
ALTER USER arizonacash WITH LOGIN=arizonacash
END
END
IF EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = 'bmcarizona')
BEGIN
IF database_principal_id('bmcarizona') is not null
BEGIN
ALTER USER bmcarizona WITH LOGIN=bmcarizona
END
END
IF EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = 'datamonitoring')
BEGIN
IF database_principal_id('datamonitoring') is not null
BEGIN
ALTER USER datamonitoring WITH LOGIN=datamonitoring
END
END
IF EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = 'extraction')
BEGIN
IF database_principal_id('extraction') is not null
BEGIN
ALTER USER extraction WITH LOGIN=extraction
END
END
IF EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = 'gcstock')
BEGIN
IF database_principal_id('gcstock') is not null
BEGIN
ALTER USER gcstock WITH LOGIN=gcstock
END
END
USE [ArizonaCUST];
GO
IF EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = 'extraction')
BEGIN
IF database_principal_id('extraction') is not null
BEGIN
ALTER USER extraction WITH LOGIN=extraction
END
END
USE [ArizonaLD];
GO
IF EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = 'extraction')
BEGIN
IF database_principal_id('extraction') is not null
BEGIN
ALTER USER extraction WITH LOGIN=extraction
END
END
USE [HCITools]
GO
IF EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = 'datamonitoring')
BEGIN
IF database_principal_id('datamonitoring') is not null
BEGIN
ALTER USER datamonitoring WITH LOGIN=datamonitoring
END
END
IF EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = 'sqlMonPerfUsr')
BEGIN
IF database_principal_id('sqlMonPerfUsr') is not null
BEGIN
ALTER USER sqlMonPerfUsr WITH LOGIN=sqlMonPerfUsr
END
END
IF EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = 'dba_monitoring')
BEGIN
IF database_principal_id('dba_monitoring') is not null
BEGIN
ALTER USER dba_monitoring WITH LOGIN=dba_monitoring
END
END
USE [ActivePos_server]
GO
IF EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = 'ActiveConfig')
BEGIN
IF database_principal_id('ActiveConfig') is not null
BEGIN
ALTER USER ActiveConfig WITH LOGIN=ActiveConfig
END
END
USE [ActivePos_write]
GO
IF EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = 'ActiveConfig')
BEGIN
IF database_principal_id('ActiveConfig') is not null
BEGIN
ALTER USER ActiveConfig WITH LOGIN=ActiveConfig
END
END
USE [ActiveSystemClient]
GO
IF EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = 'ActiveConfig')
BEGIN
IF database_principal_id('ActiveConfig') is not null
BEGIN
ALTER USER ActiveConfig WITH LOGIN=ActiveConfig
END
END
USE [ActiveSystemServer]
GO
IF EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = 'ActiveConfig')
BEGIN
IF database_principal_id('ActiveConfig') is not null
BEGIN
ALTER USER ActiveConfig WITH LOGIN=ActiveConfig
END
END
USE [MSDB]
GO
IF NOT EXISTS
(SELECT name
FROM sys.sysusers
WHERE name = 'datamonitoring')
BEGIN
CREATE USER [datamonitoring] FOR LOGIN [datamonitoring]
END
IF EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = 'datamonitoring')
BEGIN
IF database_principal_id('datamonitoring') is not null
BEGIN
ALTER USER [datamonitoring] WITH LOGIN=[datamonitoring]
ALTER USER [datamonitoring] WITH DEFAULT_SCHEMA=[dbo]
END
END
GRANT EXECUTE ON [dbo].[agent_datetime] TO [datamonitoring]
GRANT SELECT ON [dbo].[sysjobactivity] TO [datamonitoring]
GRANT SELECT ON [dbo].[sysjobhistory] TO [datamonitoring]
GRANT SELECT ON [dbo].[sysjobs] TO [datamonitoring]
GRANT SELECT ON [dbo].[sysjobschedules] TO [datamonitoring]
GRANT SELECT ON [dbo].[sysschedules] TO [datamonitoring]

View File

@@ -0,0 +1,61 @@
declare @cmd varchar(8000),
@name varchar (255)
USE master
SET NOCOUNT ON
declare c_databases cursor local forward_only static for
SELECT name
FROM sys.databases
WHERE name not in ('master','msdb','tempDB','model','SSISDB')
AND [is_read_only] = 0
AND [state_desc] = 'ONLINE'
ORDER BY name
;
open c_databases
;
FETCH NEXT FROM c_databases
into @name
;
while @@fetch_status = 0
begin
SET @cmd = 'declare @name varchar(50)
declare c_users cursor local forward_only static for
SELECT dp.name
FROM '+@name+'.sys.database_principals AS dp
LEFT JOIN '+@name+'.sys.server_principals AS sp
ON dp.SID = sp.SID
WHERE sp.SID IS NULL
AND dp.type_desc = ''SQL_USER''
AND dp.principal_id > 4;
open c_users
FETCH NEXT FROM c_users
into @name
while @@fetch_status = 0
begin
EXEC (''USE ['+@name+']; DROP USER ''+@name+'''')
FETCH NEXT FROM c_users
into @name
end
close c_users
deallocate c_users
' /* #fla01 */
exec (@cmd)
FETCH NEXT FROM c_databases
into @name
;
end
;
close c_databases
;
deallocate c_databases

View File

@@ -0,0 +1,67 @@
/*=============================================================================
Update the ftp password in system_site_transfert table on the central from a pharmacy, for this pharmacy
Parameters
----------------------
Context
----------------------
This script is run in a pharmacy, during the preparation / migration of the pharmacy
Creation : 07.03.2024 / TSC
Modifications:
=============================================================================*/
IF EXISTS ( SELECT 1
FROM [ARIZONACASH].[Arizona].[dbo].[System_site] SS
JOIN [ARIZONACASH].[Arizona].[dbo].[System_site_transfer] SST
ON [SST].[SST_dest_system_site] = [SS].[System_site_ID]
WHERE [SS].[SS_server_name] = '$fqdn'
AND [SST].[SST_bmc_task] = 109)
BEGIN
UPDATE [ARIZONACASH].[Arizona].[dbo].[System_site_transfer]
SET [SST_connection_info] = '<ConnectionInfos><Ftp username="centralinfra\svc-APH-trans" pwd="$ftppass"/></ConnectionInfos>'
FROM [ARIZONACASH].[Arizona].[dbo].[System_site] SS
JOIN [ARIZONACASH].[Arizona].[dbo].[System_site_transfer] SST
ON [SST].[SST_dest_system_site] = [SS].[System_site_ID]
WHERE [SS].[SS_server_name] = '$fqdn';
END;
ELSE
BEGIN
IF EXISTS ( SELECT 1
FROM [ARIZONACASH].Arizona.[dbo].[System_site]
WHERE [SS_server_name] = '$fqdn')
BEGIN
UPDATE [ARIZONACASH].Arizona.[dbo].[Bmc_ID_counter]
SET [BMCID_last_number] = ( SELECT [BMCID_last_number] + 1
FROM [ARIZONACASH].Arizona.[dbo].[Bmc_ID_counter]
WHERE [BMCID_key] = 'system_site_transfer')
FROM [ARIZONACASH].Arizona.[dbo].[Bmc_ID_counter]
WHERE [BMCID_key] = 'system_site_transfer';
INSERT INTO [ARIZONACASH].[Arizona].[dbo].[System_site_transfer] ([System_site_transfer_ID],
[SST_source_system_site],
[SST_dest_system_site],
[SST_bmc_task],
[SST_transfer_type],
[SST_VGUID],
[SST_master_ID],
[SST_connection_info],
[SST_start_date],
[SST_end_date])
VALUES (( SELECT [BMCID_last_number]
FROM [ARIZONACASH].Arizona.[dbo].[Bmc_ID_counter]
WHERE [BMCID_key] = 'system_site_transfer'), 102, ( SELECT [System_site_ID]
FROM [ARIZONACASH].Arizona.[dbo].[System_site]
WHERE [SS_server_name] = '$fqdn'), 109, 1, DEFAULT,
NULL, '<ConnectionInfos><Ftp username="centralinfra\svc-APH-trans" pwd="$ftppass"/></ConnectionInfos>',
(SELECT CONVERT(CHAR(10), GETDATE(), 126)), NULL);
END;
END;

View File

@@ -0,0 +1,566 @@
<#
TPDT-268
Finalize the database setup after staging a new pharmacy
This script re-implements the autoConfigPharmacy of the DBA in an automated way with interactions with a keyvault to fetch secrets and certificate
TSC 08.02.2024 Creation
#>
# param (
# #[Parameter(Position=0,mandatory=$true)]
# [string] $SqlInstance ="SSUNB008VM01\APSSQL"
# )
#if ran from TSC computer, execute on sun008, otherwise execute locally
if($env:COMPUTERNAME -ne "CGAL41556"){
$SqlInstance = "$($env:COMPUTERNAME)\APSSQL"
if (test-path "C:\Program Files\PackageManagement\Az.Accounts") {Import-Module "C:\Program Files\PackageManagement\Az.Accounts"}else{exit 42101}
if (test-path "C:\Program Files\PackageManagement\Az.keyvault") {Import-Module "C:\Program Files\PackageManagement\Az.keyvault"}else{exit 42101}
if (test-path "C:\Program Files\PackageManagement\Az.compute") {Import-Module "C:\Program Files\PackageManagement\Az.compute"}else{exit 42101}
}
else
{
$SqlInstance ="SSUNB008VM01\APSSQL"
Import-Module Az.Accounts
Import-Module Az.keyvault
Import-Module Az.compute
}
#Import-Module SqlServer
<#
.SYNOPSIS
Executes a T-SQL script on a SQL Server database without trying to parse variables.
.DESCRIPTION
This function executes a T-SQL script on a specified SQL Server database.
The script is split into batches based on the GO statements and each batch is executed separately.
SQLCMD type variables like $(ESCAPE_SQUOTE(WMI(DatabaseName))) are NOT parsed and do not cause errors if they are present in dynamic sql
.PARAMETER Server
The name of the SQL Server instance to connect to.
.PARAMETER Database
The name of the database on the SQL Server instance to execute the script against.
.PARAMETER ScriptPath
The file path of the T-SQL script to execute.
.EXAMPLE
Invoke-SqlScript -Server "YourServer" -Database "YourDatabase" -ScriptPath "YourScript.sql"
Executes the T-SQL script "YourScript.sql" on the "YourDatabase" database of the "YourServer" SQL Server instance.
.NOTES
Author: Thierry Schork
Date: 2024-02-13
#>
function Invoke-SqlScript {
param(
[string]$Server,
[string]$Database,
[string]$ScriptPath,
[string]$script
)
# Load the assembly containing the SqlCommand class
Add-Type -AssemblyName System.Data
# Create a connection string
$connectionString = "Server=$Server;Database=$Database;Integrated Security=True"
# Create a SqlConnection object
$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString)
# Open the connection
$connection.Open()
# Read the content of the script file
if('' -ne $ScriptPath){
$scriptContent = Get-Content -Path $ScriptPath -Raw
}
if('' -ne $script){
$scriptContent = $script
}
# Split the script into batches based on the GO statements
$scriptBatches = $scriptContent -split [regex]'(?smi)^[\s]*GO[\s]*$' | Where-Object { $_.Trim() -ne '' }
# Create a SqlCommand object
$command = $connection.CreateCommand()
foreach ($batch in $scriptBatches) {
#$batch = $batch.Trim()
#$batch = $batch -replace '(?m)^GO\s*', ''
if ($batch.ToLower() -ne "go"){
try {
# Set the command text for the batch
$command.CommandText = $batch
# Execute the command
$null = $command.ExecuteNonQuery()
}
catch {
Write-Error "Error in the file $fileShort"
Write-Error $_.Exception.Message
Write-Error "-------------------"
Write-Error $batch
}
}
}
# Close the connection
$connection.Close()
}
$ErrorActionPreference = "Stop"
$DebugPreference = 'SilentlyContinue'
#overrides
#$ErrorActionPreference = "continue"
#$DebugPreference = 'Continue'
$rootFS = Get-Location
#do we want to execute jobs from TiaPharm. No, because the package
#should have deployed them just before this script
$exec_triapharm = $false
# Replace these values with your Azure AD service principal details
$clientId = "65d289fd-4bea-464f-a1cd-417f74d26888" #pcpl-ApoLsPoc-setupDataEncryptionwithKeyVault
$clientSecret = "dPQ8Q~N5btnUb7cj~H4YZaDDQo7kJNZlpxbRua2a"
$tenantId = "7844775a-a9cc-4c33-a5ae-36dcf6660f45" #galenica
# Replace these values with your Azure Key Vault details
#$resourceGroupName = "rg-ApoLsPoc-Keyvault"
$keyVaultName = "kv-ApoLsPoc-Tde"
#secret to fetch from the key vault
$secretFtpPassword ="centralinfra---svc-APH-trans"
$secretMasterKey ="MasterKey"
$secretTriaPharmSQLCert = "TriaPharmSQLCert"
# Convert the client secret to a secure string
$securePassword = ConvertTo-SecureString -String $clientSecret -AsPlainText -Force
# Create a PSCredential object
$psCred = New-Object System.Management.Automation.PSCredential -ArgumentList $clientId, $securePassword
# Authenticate using the service principal
$null = Connect-AzAccount -ServicePrincipal -Credential $psCred -TenantId $tenantId
# Get the secret from Azure Key Vault
# $secret = Get-AzKeyVaultSecret -VaultName $keyVaultName -Name $secretName
# write-host "domain: $($ua.Tags["domain"])"
# Display the secret value
#Write-Host "Secret Value: $($secret.SecretValue | ConvertFrom-SecureString -AsPlainText)"
##region derive alias from hostname
$hostname = $SqlInstance
$position = $hostname.IndexOf("\")
if ($position -gt 0){
#remove instance name
$hostname = $hostname.SubString(0,$position)
}
$ou = $null
$customer = $null
$clientpath = $null
$format = 'GCM'
if ($hostname.IndexOf("NB") -gt 0){
#old hostname, like SSUNB661VM01
$ou = $hostname.Substring(5,3)
if($hostname -like "SSUNB*"){
$customer="SUN"
}
if($hostname -like "SAMNB*"){
$customer="AMA"
}
if($hostname -like "SCVNB*"){
$customer="CVI"
}
}
else{
#new$customer, like SWAMA701VM23
$ou = $hostname.Substring(5,3)
if($hostname -like "SWSUN*"){
$customer="SUN"
}
if($hostname -like "SWAMA*"){
$customer="AMA"
}
if($hostname -like "SWCVI*"){
$customer="CVI"
}
}
#used to map jobs scripts subfolders when executing scripts with customer abbreviation
switch ($Customer){
'AMA'{ $clientpath = 'AMAVITA' }
'SUN'{ $clientpath = 'SUNSTORE' }
'CVI'{ $clientpath = 'CVI' }
}
if($null -eq $format){
Write-Error "Format could not be derived from hostname $hostname"
}
if($null -eq $customer){
Write-Error "Customer could not be derived from hostname $hostname"
}
if ($null -eq $ou){
Write-Error "OU could not be derived from hostname $hostname"
}
$alias = "$($customer)$($ou)APS"
#region Server DEV/TEST/PROD
$PharmacyShortName = $customer + $ou
$PharmaciesDEV = "SUN007","SUN008","CVI506","AMA704"
$PharmaciesVALI = "SUN004","SUN006","CVI503","CVI504","AMA705","AMA707","AMA888","CVI888","SUN888"
$PharmaciesACCE = "SUN001","SUN002","CVI501","CVI502","AMA701","AMA702","AMA703","CVI505","SUN003"
$PharmaciesTRAINING = "SUN011","CVI507","CVI508","AMA988","AMA989"
if ($PharmaciesDEV -match $PharmacyShortName)
{
$ContextType = 'DEVE'
$CentraleServer = "SWINTDB01"
}
elseif ($PharmaciesVALI -match $PharmacyShortName)
{
$ContextType = 'VALI'
$CentraleServer = "SWTSTDB01"
}
elseif ($PharmaciesACCE -match $PharmacyShortName)
{
$ContextType = 'ACCE'
$CentraleServer = "SWPRDDB01"
}
elseif ($PharmaciesTRAINING -match $PharmacyShortName)
{
$ContextType = 'FORM'
$CentraleServer = "SWPRDDB01"
}
else
{
$ContextType = 'PROD'
$CentraleServer = "SWPRDDB01"
}
#endregion
#endregion
#define a db credential, for testing without hte service principal
#$DBpassword = Get-AzKeyVaultSecret -VaultName $keyVaultName -Name "ua208700"
#$dbCred = New-Object System.Management.Automation.PSCredential -ArgumentList 'ua208700@centralinfra.net', $DBpassword.SecretValue
#$dbCred = Get-SqlCredential -Name "centralinfra\ua208700" -Identity "centralinfra\ua208700" -Secret $DBpassword.SecretValue
##Check if instance is reachable
$instanceReachable=$false
try {
$null = Invoke-Sqlcmd -ServerInstance $SqlInstance -Query "select 1" -QueryTimeout 5 -Database master
$instanceReachable=$true
Write-Debug "Connection to the SQL instance ok"
}
catch {
Write-Error "SQL instance '$($SqlInstance)' is not reachable or the principal doesn't have permissions to connect"
}
##region check out triaOne release
$checkoutGit = $false
if($true -eq $checkoutGit){
$FolderPath = "triaOne_jobs"
if (Test-Path -Path $FolderPath) {
# If the folder exists, remove its contents
Get-ChildItem -Path $FolderPath | Remove-Item -Force -Recurse
Write-Host "Cleaned existing folder: $FolderPath"
} else {
# If the folder doesn't exist, create it
New-Item -ItemType Directory -Path $FolderPath | Out-Null
Write-Host "Created new folder: $FolderPath"
}
# Define the URL of the Git repository and the subfolder you want to check out
$repositoryUrl = "http://shcnbtfs01.hcisolutions.ch:8080/tfs/TriaPharmCollection/_git/TriaOne"
$subfolderPath = "SQL\Jobs"
$localRepo = "triaOne_repo"
# Clone the Git repository without fetching files on the selected branch
git clone -n -b rel/23.6 $repositoryUrl $localRepo
# Move to the cloned repository directory
Set-Location $localRepo
git checkout HEAD $subfolderPath
git pull
# Move the subfolder to the desired location
$destination = Join-Path -Path $rootFS -ChildPath $FolderPath
Move-Item -Path $subfolderPath -Destination $destination -Force -Recurse
Set-Location $rootFS
#Remove-Item $localRepo -Force
}
#endregion
#$instanceReachable = $false
if($true -eq $instanceReachable){
##fetch OU details from control center
## CLA: can be ignored due to SWITCH directly after this QUERY
<#
$query=@"
SELECT LOWER([SERV].[SE_DNS]) AS SE_DNS,
CASE
WHEN UPPER(LEFT([SERV].[SE_DNS], 3)) = 'SCV' THEN 'CVI'
WHEN UPPER(LEFT([SERV].[SE_DNS], 3)) = 'SSU' THEN 'SUN'
WHEN UPPER(LEFT([SERV].[SE_DNS], 3)) = 'SAM' THEN 'AMA'
ELSE UPPER(LEFT([SERV].[SE_DNS], 3))END AS [customer],
CASE
WHEN UPPER([SERV].[SE_designation]) LIKE '%ACCEPTANCE%' THEN 'ACCE'
WHEN UPPER([SERV].[SE_designation]) LIKE '%FORMATION%' THEN 'FORM'
WHEN UPPER([SERV].[SE_designation]) LIKE '%SCHULUNG%' THEN 'FORM'
ELSE 'PROD' END AS [context],
LEFT(LTRIM([cfg].[CF_value]), 4) AS [version],
LOWER([SERV].[SE_DNS] + '\' + [SERV].[SE_instance_name]) AS [aliasInstance]
FROM [ControlCenter].[dbo].[Server] SERV
JOIN [ControlCenter].[dbo].[Config] cfg
ON [cfg].[CF_server] = [SERV].[SE_id]
JOIN [ControlCenter].[dbo].[ConfigType] cfgt
ON [cfgt].[CFTY_id] = [cfg].[CF_configtype]
JOIN [ControlCenter].[dbo].[Entity] ent
ON [ent].[EN_id] = [SERV].[SE_entity]
WHERE [cfgt].[CFTY_type] = 'TriaPharmVersion'
AND [SERV].[SE_status] = 1
AND ( ([SERV].[SE_end_prod_date] > GETDATE())
OR ([SERV].[SE_end_prod_date] IS NULL))
AND [SERV].[SE_designation] NOT LIKE '%Fermé%'
AND [SERV].[SE_designation] NOT LIKE '%REF%'
AND [ent].[EN_code] IN ( 'AMA', 'SUN', 'CVI' )
AND LOWER([SERV].[SE_DNS]) LIKE '$alias%'
ORDER BY [SERV].[SE_entity],
SE_DNS;
"@ #>
# $dbacc = Invoke-Sqlcmd -ServerInstance hcimon -Database ControlCenter -Query $query
if($null -eq $dbacc){
Write-Output "No results in HCIMON, faking them"
$dbacc = New-Object psobject
#$dbacc | Add-Member -MemberType NoteProperty -Name "context" -Value "DEVE"
$dbacc | Add-Member -MemberType NoteProperty -Name "context" -Value $ContextType
$dbacc | Add-Member -MemberType NoteProperty -Name "customer" -Value $customer
$dbacc | Add-Member -MemberType NoteProperty -Name "version" -Value -1
$dbacc | Add-Member -MemberType NoteProperty -Name "SE_DNS" -Value $hostname
$dbacc | Add-Member -MemberType NoteProperty -Name "aliasInstance" -Value $sqlVariables
}
##step 1: configure SQL instance max memory
Invoke-Sqlcmd -ServerInstance $SqlInstance -Database master -InputFile .\1_Configure_InstanceMemory.sql
Write-Output "Executed 1_Configure_InstanceMemory.sql"
##step 2: set db identities
[string]$query = Get-Content -Path .\2_Set_Identity.sql
$query = $query.Replace("`$format", $format)
$query = $query.Replace("`$fqdn", $alias)
$query = $query.Replace("`$customer", $customer)
$query = $query.Replace("`$context", $dbacc.context) # ['context'])
Invoke-Sqlcmd -ServerInstance $SqlInstance -Database master -Query $query
Write-Output "Executed 2_Set_Identity.sql"
##step 3: activate clr
Invoke-Sqlcmd -ServerInstance $SqlInstance -Database master -InputFile .\3_Execute_CLR.sql
Write-Output "Executed 3_Execute_CLR.sql"
##step 4: map sql users
Invoke-Sqlcmd -ServerInstance $SqlInstance -Database master -InputFile .\6_Map_SQLUsers.sql
Write-Output "Executed 6_Map_SQLUsers.sql"
##step 4: remove orphaned users
Invoke-Sqlcmd -ServerInstance $SqlInstance -Database master -InputFile .\8_Remove_OrphanedSQLUsers.sql
$orphans | Format-Table
Write-Output "Executed 8_Remove_OrphanedSQLUsers.sql"
##step 5: FTP password modification on central server
$ftpPassword = Get-AzKeyVaultSecret -VaultName $keyVaultName -Name $secretFtpPassword
$query = Get-Content -Path .\9_Update_FTPLogin_Central.sql
$query = $query.Replace("`$ftppass", $($ftpPassword.SecretValue | ConvertFrom-SecureString )) ####################################### -AsPlainText))
$query = $query.Replace("`$fqdn", $alias)
#Invoke-Sqlcmd -ServerInstance gcmPrdCent -Database arizona -Query $query
Invoke-Sqlcmd -ServerInstance $SqlInstance -Database arizona -Query $query
Write-Output "Executed 9_Update_FTPLogin_Central.sql"
##step 6: execute all DBA packages
$LogFile = "C:\Temp\DBApackagesCLA.log"
try{
Get-ChildItem -path .\dba_packages -Filter *.sql | ForEach-Object {
$file = $_
$fileShort = Split-Path -Path $file -Leaf
Invoke-SqlScript -Server $SqlInstance -Database master -ScriptPath $file.FullName
Write-Output "executed DBA package file $fileShort"
}
}
catch
{
$file | out-file -FilePath $LogFile -Append -Encoding utf8
$_ | out-file -FilePath $LogFile -Append -Encoding utf8
}
##step 7: execute all DBA structure scripts
Get-ChildItem -path .\dba_structure -Filter *.sql | ForEach-Object {
$file = $_
$fileShort = Split-Path -Path $file -Leaf
Invoke-SqlScript -Server $SqlInstance -Database master -ScriptPath $file.FullName
Write-Output "executed DBA structure file $fileShort"
}
##step 8: execute all DBA stored procedures scripts
Get-ChildItem -path .\dba_storedProcedures -Filter *.sql | ForEach-Object {
$file = $_
$fileShort = Split-Path -Path $file -Leaf
Invoke-SqlScript -Server $SqlInstance -Database master -ScriptPath $file.FullName
Write-Output "executed DBA stored procedure file $fileShort"
}
##region triaOne jobs
if($true -eq $exec_triapharm){
##step 9: execute triaOne pharmacy jobs scripts
Get-ChildItem -path .\cp_triaOne_jobs\pharmacy -Filter *.sql | ForEach-Object {
$file = $_
$fileShort = Split-Path -Path $file -Leaf
Invoke-SqlScript -Server $SqlInstance -Database master -ScriptPath $file.FullName
Write-Output "executed triaOne pharmacy job file $fileShort"
}
##step 10: execute triaOne pharmacy customer jobs scripts
Get-ChildItem -path .\cp_triaOne_jobs\pharmacy\$clientpath -Filter *.sql | ForEach-Object {
$file = $_
$fileShort = Split-Path -Path $file -Leaf
Invoke-SqlScript -Server $SqlInstance -Database master -ScriptPath $file.FullName
Write-Output "executed triaOne pharmacy customer job file $fileShort"
}
}
#endregion
##region DBA jobs
##step 11: execute all DBA global jobs scripts
Get-ChildItem -path .\dba_jobs\ -Filter *.sql | Where-Object {$_.Name -NotMatch "several"} | ForEach-Object {
$file = $_
$fileShort = Split-Path -Path $file -Leaf
Invoke-SqlScript -Server $SqlInstance -Database master -ScriptPath $file.FullName
Write-Output "executed DBA global job file $fileShort"
}
##step 12: execute all DBA pharmacy jobs scripts
Get-ChildItem -path .\dba_jobs\Pharmacy -Filter *.sql | ForEach-Object {
$file = $_
$fileShort = Split-Path -Path $file -Leaf
Invoke-SqlScript -Server $SqlInstance -Database master -ScriptPath $file.FullName
Write-Output "executed DBA pharmacy job file $fileShort"
}
##step 13: execute all DBA customer specific pharmacy jobs scripts
Get-ChildItem -path .\dba_jobs\Pharmacy\$clientpath -Filter *.sql | ForEach-Object {
$file = $_
$fileShort = Split-Path -Path $file -Leaf
Invoke-SqlScript -Server $SqlInstance -Database master -ScriptPath $file.FullName
Write-Output "executed DBA pharmacy $clientpath job file $fileShort"
}
#endregion
##step 14: execute all DBA alerts scripts
Get-ChildItem -path .\dba_alerts -Filter *.sql | ForEach-Object {
$file = $_
$fileShort = Split-Path -Path $file -Leaf
Invoke-SqlScript -Server $SqlInstance -Database master -ScriptPath $file.FullName
Write-Output "executed DBA alert file $fileShort"
}
##step 15: execute schedule shuffle script
$null = Invoke-Sqlcmd -ServerInstance $SqlInstance -Database master -InputFile .\10_Change_Schedules_Subscriptions.sql
Write-Output "Executed 10_Change_Schedules_Subscriptions.sql"
##step 16: execute schedule shuffle script
$null = Invoke-Sqlcmd -ServerInstance $SqlInstance -Database master -InputFile .\11_Run_Job_CheckReplications.sql
Write-Output "Executed 11_Run_Job_CheckReplications.sql"
##step 17: Atlas configuration
$masterKey = Get-AzKeyVaultSecret -VaultName $keyVaultName -Name $secretMasterKey
$triapharmSqlCert = Get-AzKeyVaultSecret -VaultName $keyVaultName -Name $secretTriaPharmSQLCert
$bckcert = 'D:\SQLDatabaseDump\Certificates\MK\'+$alias.Substring(0,6).toupper()+'_master.bak'
[string]$query = Get-Content -Path .\12_Broker_Config.sql
$query = $query.Replace("`$mk", $($masterKey.SecretValue | ConvertFrom-SecureString )) # -AsPlainText))
$query = $query.Replace("`$cert", $($triapharmSqlCert.SecretValue | ConvertFrom-SecureString )) # -AsPlainText))
$query = $query.Replace("`$bck", $bckcert)
Invoke-Sqlcmd -ServerInstance $SqlInstance -Database arizona -Query $query
Write-Output "Executed 12_Broker_Config.sql"
##step 18: create ad logins
Invoke-Sqlcmd -ServerInstance $SqlInstance -Database master -InputFile .\13_Create_AD_Logins.sql
Write-Output "Executed 13_Create_AD_Logins.sql"
##step 19: final check on pharmacy
#removed because does not brings any value
#in an automated run, as this requires a human to verify and act
#Invoke-Sqlcmd -ServerInstance $SqlInstance -Database master -InputFile '.\Check Instance Pharmacy.sql'
#Write-Output "Executed Check Instance Pharmacy.sql"
##step 20: update system_site on the central
$fqdn = [System.Net.Dns]::GetHostByName($alias)
#update the centrale
$query=Get-Content -Path .\20_update_system_site_centrale.sql
$query = $query.Replace("`$fqdn", $fqdn.HostName)
$query = $query.Replace("`$alias", $alias)
Invoke-Sqlcmd -ServerInstance $SqlInstance -Database master -Query $query -Credential
Write-Output "Executed 20_update_system_site_centrale.sql"
##step 21: update Point_of_sale on the central
#fetch a list of mac adresses
$macs = @{}
$pos = 0
Get-NetAdapter | Select-Object ifIndex, Name, MacAddress | ForEach-Object {
$macs.Add($pos, $_.MacAddress)
$pos++
}
if($macs.Count -gt 1){
#we have several mac addresses, unable to define which one should be used in point_of_sale
Write-Error "Several mac addresses are active, no clue which one to save in Point_of_sale"
}
else{
$query=Get-Content -Path .\21_update_point_of_sale_centrale.sql
$query = $query.Replace("`$fqdn", $fqdn.HostName)
$query = $query.Replace("`$mac", $macs[0].value)
Invoke-Sqlcmd -ServerInstance $SqlInstance -Database master -Query $query
Write-Output "Executed 21_update_point_of_sale_centrale.sql"
}
}

View File

@@ -0,0 +1,579 @@
<#
TPDT-268
Finalize the database setup after staging a new pharmacy
This script re-implements the autoConfigPharmacy of the DBA in an automated way with interactions with a keyvault to fetch secrets and certificate
TSC 08.02.2024 Creation
#>
# param (
# #[Parameter(Position=0,mandatory=$true)]
# [string] $SqlInstance ="SSUNB008VM01\APSSQL"
# )
#if ran from TSC computer, execute on sun008, otherwise execute locally
if($env:COMPUTERNAME -ne "CGAL41556"){
$SqlInstance = "$($env:COMPUTERNAME)\APSSQL"
}
else{
$SqlInstance ="SSUNB008VM01\APSSQL"
}
if (test-path "C:\Program Files\PackageManagement\Az.Accounts") {Import-Module "C:\Program Files\PackageManagement\Az.Accounts"}else{exit 42101}
if (test-path "C:\Program Files\PackageManagement\Az.keyvault") {Import-Module "C:\Program Files\PackageManagement\Az.keyvault"}else{exit 42101}
if (test-path "C:\Program Files\PackageManagement\Az.compute") {Import-Module "C:\Program Files\PackageManagement\Az.compute"}else{exit 42101}
#Import-Module SqlServer
<#
.SYNOPSIS
Executes a T-SQL script on a SQL Server database without trying to parse variables.
.DESCRIPTION
This function executes a T-SQL script on a specified SQL Server database.
The script is split into batches based on the GO statements and each batch is executed separately.
SQLCMD type variables like $(ESCAPE_SQUOTE(WMI(DatabaseName))) are NOT parsed and do not cause errors if they are present in dynamic sql
.PARAMETER Server
The name of the SQL Server instance to connect to.
.PARAMETER Database
The name of the database on the SQL Server instance to execute the script against.
.PARAMETER ScriptPath
The file path of the T-SQL script to execute.
.EXAMPLE
Invoke-SqlScript -Server "YourServer" -Database "YourDatabase" -ScriptPath "YourScript.sql"
Executes the T-SQL script "YourScript.sql" on the "YourDatabase" database of the "YourServer" SQL Server instance.
.NOTES
Author: Thierry Schork
Date: 2024-02-13
#>
function Invoke-SqlScript {
param(
[string]$Server,
[string]$Database,
[string]$ScriptPath,
[string]$script
)
# Load the assembly containing the SqlCommand class
Add-Type -AssemblyName System.Data
# Create a connection string
$connectionString = "Server=$Server;Database=$Database;Integrated Security=True"
# Create a SqlConnection object
$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString)
# Open the connection
$connection.Open()
# Read the content of the script file
if('' -ne $ScriptPath){
$scriptContent = Get-Content -Path $ScriptPath -Raw
}
if('' -ne $script){
$scriptContent = $script
}
# Split the script into batches based on the GO statements
$scriptBatches = $scriptContent -split [regex]'(?smi)^[\s]*GO[\s]*$' | Where-Object { $_.Trim() -ne '' }
# Create a SqlCommand object
$command = $connection.CreateCommand()
foreach ($batch in $scriptBatches) {
#$batch = $batch.Trim()
#$batch = $batch -replace '(?m)^GO\s*', ''
if ($batch.ToLower() -ne "go"){
try {
# Set the command text for the batch
$command.CommandText = $batch
# Execute the command
$null = $command.ExecuteNonQuery()
}
catch {
Write-Error "Error in the file $fileShort"
Write-Error $_.Exception.Message
Write-Error "-------------------"
Write-Error $batch
}
}
}
# Close the connection
$connection.Close()
}
$ErrorActionPreference = "Stop"
$DebugPreference = 'SilentlyContinue'
#overrides
#$ErrorActionPreference = "continue"
#$DebugPreference = 'Continue'
$rootFS = Get-Location
#do we want to execute jobs from TiaPharm. No, because the package
#should have deployed them just before this script
$exec_triapharm = $false
# Replace these values with your Azure AD service principal details
$clientId = "65d289fd-4bea-464f-a1cd-417f74d26888" #pcpl-ApoLsPoc-setupDataEncryptionwithKeyVault
$clientSecret = "dPQ8Q~N5btnUb7cj~H4YZaDDQo7kJNZlpxbRua2a"
$tenantId = "7844775a-a9cc-4c33-a5ae-36dcf6660f45" #galenica
# Replace these values with your Azure Key Vault details
#$resourceGroupName = "rg-ApoLsPoc-Keyvault"
$keyVaultName = "kv-ApoLsPoc-Tde"
#secret to fetch from the key vault
$secretFtpPassword ="centralinfra---svc-APH-trans"
$secretMasterKey ="MasterKey"
$secretTriaPharmSQLCert = "TriaPharmSQLCert"
# Convert the client secret to a secure string
$securePassword = ConvertTo-SecureString -String $clientSecret -AsPlainText -Force
# Create a PSCredential object
$psCred = New-Object System.Management.Automation.PSCredential -ArgumentList $clientId, $securePassword
# Authenticate using the service principal
$null = Connect-AzAccount -ServicePrincipal -Credential $psCred -TenantId $tenantId
# Get the secret from Azure Key Vault
# $secret = Get-AzKeyVaultSecret -VaultName $keyVaultName -Name $secretName
# write-host "domain: $($ua.Tags["domain"])"
# Display the secret value
#Write-Host "Secret Value: $($secret.SecretValue | ConvertFrom-SecureString -AsPlainText)"
##region derive alias from hostname
$hostname = $SqlInstance
$position = $hostname.IndexOf("\")
if ($position -gt 0){
#remove instance name
$hostname = $hostname.SubString(0,$position)
}
$ou = $null
$customer = $null
$clientpath = $null
$format = 'GCM'
if ($hostname.IndexOf("NB") -gt 0){
#old hostname, like SSUNB661VM01
$ou = $hostname.Substring(5,3)
if($hostname -like "SSUNB*"){
$customer="SUN"
}
if($hostname -like "SAMNB*"){
$customer="AMA"
}
if($hostname -like "SCVNB*"){
$customer="CVI"
}
}
else{
#new$customer, like SWAMA701VM23
$ou = $hostname.Substring(5,3)
if($hostname -like "SWSUN*"){
$customer="SUN"
}
if($hostname -like "SWAMA*"){
$customer="AMA"
}
if($hostname -like "SWCVI*"){
$customer="CVI"
}
}
#used to map jobs scripts subfolders when executing scripts with customer abbreviation
switch ($Customer){
'AMA'{ $clientpath = 'AMAVITA' }
'SUN'{ $clientpath = 'SUNSTORE' }
'CVI'{ $clientpath = 'CVI' }
}
if($null -eq $format){
Write-Error "Format could not be derived from hostname $hostname"
}
if($null -eq $customer){
Write-Error "Customer could not be derived from hostname $hostname"
}
if ($null -eq $ou){
Write-Error "OU could not be derived from hostname $hostname"
}
$alias = "$($customer)$($ou)APS"
#region Server DEV/TEST/PROD
$PharmacyShortName = $customer + $ou
$PharmaciesDEV = "SUN007","SUN008","CVI506","AMA704"
$PharmaciesVALI = "SUN004","SUN006","CVI503","CVI504","AMA705","AMA707","AMA888","CVI888","SUN888"
$PharmaciesACCE = "SUN001","SUN002","CVI501","CVI502","AMA701","AMA702","AMA703","CVI505","SUN003"
$PharmaciesTRAINING = "SUN011","CVI507","CVI508","AMA988","AMA989"
if ($PharmaciesDEV -match $PharmacyShortName)
{
$ContextType = 'DEVE'
$CentraleServer = "SWINTDB01"
}
elseif ($PharmaciesVALI -match $PharmacyShortName)
{
$ContextType = 'VALI'
$CentraleServer = "SWTSTDB01"
}
elseif ($PharmaciesACCE -match $PharmacyShortName)
{
$ContextType = 'ACCE'
$CentraleServer = "SWPRDDB01"
}
elseif ($PharmaciesTRAINING -match $PharmacyShortName)
{
$ContextType = 'FORM'
$CentraleServer = "SWPRDDB01"
}
else
{
$ContextType = 'PROD'
$CentraleServer = "SWPRDDB01"
}
#endregion
#endregion
#define a db credential, for testing without hte service principal
#$DBpassword = Get-AzKeyVaultSecret -VaultName $keyVaultName -Name "ua208700"
#$dbCred = New-Object System.Management.Automation.PSCredential -ArgumentList 'ua208700@centralinfra.net', $DBpassword.SecretValue
#$dbCred = Get-SqlCredential -Name "centralinfra\ua208700" -Identity "centralinfra\ua208700" -Secret $DBpassword.SecretValue
##Check if instance is reachable
$instanceReachable=$false
try {
$null = Invoke-Sqlcmd -ServerInstance $SqlInstance -Query "select 1" -QueryTimeout 5 -Database master
$instanceReachable=$true
Write-Debug "Connection to the SQL instance ok"
}
catch {
Write-Error "SQL instance '$($SqlInstance)' is not reachable or the principal doesn't have permissions to connect"
}
##region check out triaOne release
$checkoutGit = $false
if($true -eq $checkoutGit){
$FolderPath = "triaOne_jobs"
if (Test-Path -Path $FolderPath) {
# If the folder exists, remove its contents
Get-ChildItem -Path $FolderPath | Remove-Item -Force -Recurse
Write-Host "Cleaned existing folder: $FolderPath"
} else {
# If the folder doesn't exist, create it
New-Item -ItemType Directory -Path $FolderPath | Out-Null
Write-Host "Created new folder: $FolderPath"
}
# Define the URL of the Git repository and the subfolder you want to check out
$repositoryUrl = "http://shcnbtfs01.hcisolutions.ch:8080/tfs/TriaPharmCollection/_git/TriaOne"
$subfolderPath = "SQL\Jobs"
$localRepo = "triaOne_repo"
# Clone the Git repository without fetching files on the selected branch
git clone -n -b rel/23.6 $repositoryUrl $localRepo
# Move to the cloned repository directory
Set-Location $localRepo
git checkout HEAD $subfolderPath
git pull
# Move the subfolder to the desired location
$destination = Join-Path -Path $rootFS -ChildPath $FolderPath
Move-Item -Path $subfolderPath -Destination $destination -Force -Recurse
Set-Location $rootFS
#Remove-Item $localRepo -Force
}
#endregion
#$instanceReachable = $false
if($true -eq $instanceReachable){
##fetch OU details from control center
## CLA: can be ignored due to SWITCH directly after this QUERY
<#
$query=@"
SELECT LOWER([SERV].[SE_DNS]) AS SE_DNS,
CASE
WHEN UPPER(LEFT([SERV].[SE_DNS], 3)) = 'SCV' THEN 'CVI'
WHEN UPPER(LEFT([SERV].[SE_DNS], 3)) = 'SSU' THEN 'SUN'
WHEN UPPER(LEFT([SERV].[SE_DNS], 3)) = 'SAM' THEN 'AMA'
ELSE UPPER(LEFT([SERV].[SE_DNS], 3))END AS [customer],
CASE
WHEN UPPER([SERV].[SE_designation]) LIKE '%ACCEPTANCE%' THEN 'ACCE'
WHEN UPPER([SERV].[SE_designation]) LIKE '%FORMATION%' THEN 'FORM'
WHEN UPPER([SERV].[SE_designation]) LIKE '%SCHULUNG%' THEN 'FORM'
ELSE 'PROD' END AS [context],
LEFT(LTRIM([cfg].[CF_value]), 4) AS [version],
LOWER([SERV].[SE_DNS] + '\' + [SERV].[SE_instance_name]) AS [aliasInstance]
FROM [ControlCenter].[dbo].[Server] SERV
JOIN [ControlCenter].[dbo].[Config] cfg
ON [cfg].[CF_server] = [SERV].[SE_id]
JOIN [ControlCenter].[dbo].[ConfigType] cfgt
ON [cfgt].[CFTY_id] = [cfg].[CF_configtype]
JOIN [ControlCenter].[dbo].[Entity] ent
ON [ent].[EN_id] = [SERV].[SE_entity]
WHERE [cfgt].[CFTY_type] = 'TriaPharmVersion'
AND [SERV].[SE_status] = 1
AND ( ([SERV].[SE_end_prod_date] > GETDATE())
OR ([SERV].[SE_end_prod_date] IS NULL))
AND [SERV].[SE_designation] NOT LIKE '%Fermé%'
AND [SERV].[SE_designation] NOT LIKE '%REF%'
AND [ent].[EN_code] IN ( 'AMA', 'SUN', 'CVI' )
AND LOWER([SERV].[SE_DNS]) LIKE '$alias%'
ORDER BY [SERV].[SE_entity],
SE_DNS;
"@ #>
# $dbacc = Invoke-Sqlcmd -ServerInstance hcimon -Database ControlCenter -Query $query
if($null -eq $dbacc){
Write-Output "No results in HCIMON, faking them"
$dbacc = New-Object psobject
#$dbacc | Add-Member -MemberType NoteProperty -Name "context" -Value "DEVE"
$dbacc | Add-Member -MemberType NoteProperty -Name "context" -Value $ContextType
$dbacc | Add-Member -MemberType NoteProperty -Name "customer" -Value $customer
$dbacc | Add-Member -MemberType NoteProperty -Name "version" -Value -1
$dbacc | Add-Member -MemberType NoteProperty -Name "SE_DNS" -Value $hostname
$dbacc | Add-Member -MemberType NoteProperty -Name "aliasInstance" -Value $sqlVariables
}
##step 1: configure SQL instance max memory
Invoke-Sqlcmd -ServerInstance $SqlInstance -Database master -InputFile .\1_Configure_InstanceMemory.sql
Write-Output "Executed 1_Configure_InstanceMemory.sql"
##step 2: set db identities
[string]$query = Get-Content -Path .\2_Set_Identity.sql
$query = $query.Replace("`$format", $format)
$query = $query.Replace("`$fqdn", $alias)
$query = $query.Replace("`$customer", $customer)
$query = $query.Replace("`$context", $dbacc.context) # ['context'])
Invoke-Sqlcmd -ServerInstance $SqlInstance -Database master -Query $query
Write-Output "Executed 2_Set_Identity.sql"
##step 3: activate clr
Invoke-Sqlcmd -ServerInstance $SqlInstance -Database master -InputFile .\3_Execute_CLR.sql
Write-Output "Executed 3_Execute_CLR.sql"
##step 4: map sql users
Invoke-Sqlcmd -ServerInstance $SqlInstance -Database master -InputFile .\6_Map_SQLUsers.sql
Write-Output "Executed 6_Map_SQLUsers.sql"
##step 4: remove orphaned users
Invoke-Sqlcmd -ServerInstance $SqlInstance -Database master -InputFile .\8_Remove_OrphanedSQLUsers.sql
$orphans | Format-Table
Write-Output "Executed 8_Remove_OrphanedSQLUsers.sql"
##step 5: FTP password modification on central server
$ftpPassword = Get-AzKeyVaultSecret -VaultName $keyVaultName -Name $secretFtpPassword
$query = Get-Content -Path .\9_Update_FTPLogin_Central.sql
$query = $query.Replace("`$ftppass", $($ftpPassword.SecretValue | ConvertFrom-SecureString )) ####################################### -AsPlainText))
$query = $query.Replace("`$fqdn", $alias)
#Invoke-Sqlcmd -ServerInstance gcmPrdCent -Database arizona -Query $query
Invoke-Sqlcmd -ServerInstance $CentraleServer -Database arizona -Query $query
Write-Output "Executed 9_Update_FTPLogin_Central.sql"
##step 6: execute all DBA packages
$LogFile = "C:\Temp\DBApackagesCLA.log"
try{
Get-ChildItem -path .\dba_packages -Filter *.sql | ForEach-Object {
$file = $_
$fileShort = Split-Path -Path $file -Leaf
Invoke-SqlScript -Server $SqlInstance -Database master -ScriptPath $file.FullName
Write-Output "executed DBA package file $fileShort"
}
}
catch
{
$file | out-file -FilePath $LogFile -Append -Encoding utf8
$_ | out-file -FilePath $LogFile -Append -Encoding utf8
}
##step 7: execute all DBA structure scripts
Get-ChildItem -path .\dba_structure -Filter *.sql | ForEach-Object {
$file = $_
$fileShort = Split-Path -Path $file -Leaf
Invoke-SqlScript -Server $SqlInstance -Database master -ScriptPath $file.FullName
Write-Output "executed DBA structure file $fileShort"
}
##step 8: execute all DBA stored procedures scripts
Get-ChildItem -path .\dba_storedProcedures -Filter *.sql | ForEach-Object {
$file = $_
$fileShort = Split-Path -Path $file -Leaf
Invoke-SqlScript -Server $SqlInstance -Database master -ScriptPath $file.FullName
Write-Output "executed DBA stored procedure file $fileShort"
}
##region triaOne jobs
if($true -eq $exec_triapharm){
##step 9: execute triaOne pharmacy jobs scripts
Get-ChildItem -path .\cp_triaOne_jobs\pharmacy -Filter *.sql | ForEach-Object {
$file = $_
$fileShort = Split-Path -Path $file -Leaf
Invoke-SqlScript -Server $SqlInstance -Database master -ScriptPath $file.FullName
Write-Output "executed triaOne pharmacy job file $fileShort"
}
##step 10: execute triaOne pharmacy customer jobs scripts
Get-ChildItem -path .\cp_triaOne_jobs\pharmacy\$clientpath -Filter *.sql | ForEach-Object {
$file = $_
$fileShort = Split-Path -Path $file -Leaf
Invoke-SqlScript -Server $SqlInstance -Database master -ScriptPath $file.FullName
Write-Output "executed triaOne pharmacy customer job file $fileShort"
}
}
#endregion
##region DBA jobs
##step 11: execute all DBA global jobs scripts
Get-ChildItem -path .\dba_jobs\ -Filter *.sql | Where-Object {$_.Name -NotMatch "several"} | ForEach-Object {
$file = $_
$fileShort = Split-Path -Path $file -Leaf
Invoke-SqlScript -Server $SqlInstance -Database master -ScriptPath $file.FullName
Write-Output "executed DBA global job file $fileShort"
}
##step 12: execute all DBA pharmacy jobs scripts
Get-ChildItem -path .\dba_jobs\Pharmacy -Filter *.sql | ForEach-Object {
$file = $_
$fileShort = Split-Path -Path $file -Leaf
Invoke-SqlScript -Server $SqlInstance -Database master -ScriptPath $file.FullName
Write-Output "executed DBA pharmacy job file $fileShort"
}
##step 13: execute all DBA customer specific pharmacy jobs scripts
Get-ChildItem -path .\dba_jobs\Pharmacy\$clientpath -Filter *.sql | ForEach-Object {
$file = $_
$fileShort = Split-Path -Path $file -Leaf
Invoke-SqlScript -Server $SqlInstance -Database master -ScriptPath $file.FullName
Write-Output "executed DBA pharmacy $clientpath job file $fileShort"
}
#endregion
##step 14: execute all DBA alerts scripts
Get-ChildItem -path .\dba_alerts -Filter *.sql | ForEach-Object {
$file = $_
$fileShort = Split-Path -Path $file -Leaf
Invoke-SqlScript -Server $SqlInstance -Database master -ScriptPath $file.FullName
Write-Output "executed DBA alert file $fileShort"
}
##step 15: execute schedule shuffle script
$null = Invoke-Sqlcmd -ServerInstance $SqlInstance -Database master -InputFile .\10_Change_Schedules_Subscriptions.sql
Write-Output "Executed 10_Change_Schedules_Subscriptions.sql"
##step 16: execute schedule shuffle script
$null = Invoke-Sqlcmd -ServerInstance $SqlInstance -Database master -InputFile .\11_Run_Job_CheckReplications.sql
Write-Output "Executed 11_Run_Job_CheckReplications.sql"
##step 17: Atlas configuration
$masterKey = Get-AzKeyVaultSecret -VaultName $keyVaultName -Name $secretMasterKey
$triapharmSqlCert = Get-AzKeyVaultSecret -VaultName $keyVaultName -Name $secretTriaPharmSQLCert
$bckcert = 'D:\SQLDatabaseDump\Certificates\MK\'+$alias.Substring(0,6).toupper()+'_master.bak'
[string]$query = Get-Content -Path .\12_Broker_Config.sql
$query = $query.Replace("`$mk", $($masterKey.SecretValue | ConvertFrom-SecureString )) # -AsPlainText))
$query = $query.Replace("`$cert", $($triapharmSqlCert.SecretValue | ConvertFrom-SecureString )) # -AsPlainText))
$query = $query.Replace("`$bck", $bckcert)
Invoke-Sqlcmd -ServerInstance $SqlInstance -Database arizona -Query $query
Write-Output "Executed 12_Broker_Config.sql"
##step 18: create ad logins
Invoke-Sqlcmd -ServerInstance $SqlInstance -Database master -InputFile .\13_Create_AD_Logins.sql
Write-Output "Executed 13_Create_AD_Logins.sql"
##step 19: final check on pharmacy
#removed because does not brings any value
#in an automated run, as this requires a human to verify and act
#Invoke-Sqlcmd -ServerInstance $SqlInstance -Database master -InputFile '.\Check Instance Pharmacy.sql'
#Write-Output "Executed Check Instance Pharmacy.sql"
##step 20: update system_site on the central
$fqdn = [System.Net.Dns]::GetHostByName($env:computerName)
#determine the OU id of the current pharmacy (ran locally)
$query =@"
USE [Arizona]
DECLARE @ou_id INT
EXEC Arizona.dbo.sp_bmc_Bmc_Applic_Default
@in_job_type = 3,
@in_param_int_1 = null, /* Company */
@in_param_int_2 = null, /* Subsidiary */
@in_param_varchar_1 = 'cvCurrentOrganizationalUnit',
@out_default_value = @ou_id output,
@out_param_int_1 = null
SELECT @ou_id as ou_id
"@
$local_ou = Invoke-Sqlcmd -ServerInstance $SqlInstance -Database arizona -Query $query
#update the centrale
$query=Get-Content -Path .\20_update_system_site_centrale.sql
$query = $query.Replace("`$ou_id", $local_ou.ou_id)
$query = $query.Replace("`$fqdn", $fqdn.HostName)
$query = $query.Replace("`$alias", $alias)
Invoke-Sqlcmd -ServerInstance gcmPrdCent -Database arizona -Query $query
Write-Output "Executed 20_update_system_site_centrale.sql"
##step 21: update Point_of_sale on the central
#fetch a list of mac adresses
$macs = @{}
$pos = 0
Get-NetAdapter | Select-Object ifIndex, Name, MacAddress | ForEach-Object {
$macs.Add($pos, $_.MacAddress)
$pos++
}
if($macs.Count -gt 1){
#we have several mac addresses, unable to define which one should be used in point_of_sale
Write-Error "Several mac addresses are active, no clue which one to save in Point_of_sale"
}
else{
$query=Get-Content -Path .\21_update_point_of_sale_centrale.sql
$query = $query.Replace("`$ou_id", $local_ou.ou_id)
$query = $query.Replace("`$fqdn", $fqdn.HostName)
$query = $query.Replace("`$mac", $macs[0].value)
Invoke-Sqlcmd -ServerInstance gcmPrdCent -Database arizona -Query $query
Write-Output "Executed 21_update_point_of_sale_centrale.sql"
}
}

View File

@@ -0,0 +1,69 @@
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = 'Agent history clean up: distribution')
EXEC msdb.dbo.sp_delete_job @job_name=N'Agent history clean up: distribution', @delete_unused_schedule=1
GO
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object: JobCategory [REPL-History Cleanup] Script Date: 06/12/2015 08:48:31 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'REPL-History Cleanup' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'REPL-History Cleanup'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'Agent history clean up: distribution',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'Removes replication agent history from the distribution database.',
@category_name=N'REPL-History Cleanup',
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object: Step [Run agent.] Script Date: 06/12/2015 08:48:31 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Run agent.',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'EXEC dbo.sp_MShistory_cleanup @history_retention = 48',
@database_name=N'distribution',
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
DECLARE @schedule_id int
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'Replication agent schedule.',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=4,
@freq_subday_interval=10,
@freq_relative_interval=1,
@freq_recurrence_factor=0,
@active_start_date=20150202,
@active_end_date=99991231,
@active_start_time=0,
@active_end_time=235959, @schedule_id = @schedule_id OUTPUT
select @schedule_id
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

View File

@@ -0,0 +1,199 @@
/* Drop existing standard schedule for job */
declare @schedule_id int
declare c_schedules cursor local forward_only static for
select ss.schedule_id
from msdb.dbo.sysjobschedules sjs
INNER JOIN msdb.dbo.sysschedules ss
ON sjs.schedule_id = ss.schedule_id
AND ss.name NOT LIKE '%#SPEC#'
INNER JOIN msdb.dbo.sysjobs sj
ON sjs.job_id = sj.job_id
WHERE sj.name = N'D00110 - PerformancePointAggregationLevel1'
open c_schedules
FETCH NEXT FROM c_schedules into @schedule_id
while @@fetch_status = 0
begin
IF ((select COUNT(*) from msdb.dbo.sysjobschedules where schedule_id=@schedule_id) = 1)
EXEC msdb.dbo.sp_delete_schedule @schedule_id=@schedule_id, @force_delete = 1
FETCH NEXT FROM c_schedules into @schedule_id
end
close c_schedules
deallocate c_schedules
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'D00110 - PerformancePointAggregationLevel1')
EXEC msdb.dbo.sp_delete_job @job_name = N'D00110 - PerformancePointAggregationLevel1', @delete_unused_schedule=0
GO
/* Creation Job and Steps*/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'TPH-Maintenance' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'TPH-Maintenance'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
/* Add Job */
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'D00110 - PerformancePointAggregationLevel1',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'for replication initialization
17.03.2022 - FLA : Change DBA mail',
@category_name=N'TPH-Maintenance',
@start_step_id=1,
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Aggregate',
@step_id=2,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=4,
@retry_attempts=0,
@retry_interval=1,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N' exec [dbo].[AggregatePerformancePoint]',
@database_name=N'ActiveSystemServer',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step for success',
@step_id=3,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=4,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send email KO',
@step_id=4,
@cmdexec_success_code=0,
@on_success_action=2,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec arizona.dbo.aps_Send_Mail_with_template
@in_param_varchar_2 = ''DBA_operator;'';',
@database_name=N'Arizona',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Standard Schedule */
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'D00110-D',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20150708,
@active_end_date=99991231,
@active_start_time=20000,
@active_end_time=235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Attach existing specific schedule for job */
declare @enabled_schedule int,
@schedule_name nvarchar(50)
declare c_schedules cursor local forward_only static for
select enabled, name
from msdb.dbo.sysschedules
where name LIKE 'D00110%'
and name LIKE '%#SPEC#'
open c_schedules
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
while @@fetch_status = 0
begin
EXEC @ReturnCode = msdb.dbo.sp_attach_schedule @job_id = @jobId, @schedule_name=@schedule_name
IF(@enabled_schedule = 1)
begin
SET @schedule_name = SUBSTRING(@schedule_name,0,LEN(@schedule_name)-5)
IF EXISTS (select name from msdb.dbo.sysschedules where name = @schedule_name)
EXEC @ReturnCode = msdb.dbo.sp_update_schedule @name=@schedule_name, @enabled=0
end
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
end
close c_schedules
deallocate c_schedules
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

View File

@@ -0,0 +1,196 @@
/*Job only deploy once */
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'D00480 - ActivePos_read Snapshot')
RETURN
/* Drop existing standard schedule for job */
declare @schedule_id int
declare c_schedules cursor local forward_only static for
select ss.schedule_id
from msdb.dbo.sysjobschedules sjs
INNER JOIN msdb.dbo.sysschedules ss
ON sjs.schedule_id = ss.schedule_id
AND ss.name NOT LIKE '%#SPEC#'
INNER JOIN msdb.dbo.sysjobs sj
ON sjs.job_id = sj.job_id
WHERE sj.name = N'D00480 - ActivePos_read Snapshot'
open c_schedules
FETCH NEXT FROM c_schedules into @schedule_id
while @@fetch_status = 0
begin
IF ((select COUNT(*) from msdb.dbo.sysjobschedules where schedule_id=@schedule_id) = 1)
EXEC msdb.dbo.sp_delete_schedule @schedule_id=@schedule_id, @force_delete = 1
FETCH NEXT FROM c_schedules into @schedule_id
end
close c_schedules
deallocate c_schedules
/* Creation Job and Steps*/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'REPL-Snapshot' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'REPL-Snapshot'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
/* Add Job */
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'D00480 - ActivePos_read Snapshot',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'No description available.',
@category_name=N'REPL-Snapshot',
@start_step_id=1,
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
/* build command*/
declare @cmd varchar(max)
, @distributor nvarchar(100)
SET @distributor = cast(serverproperty('ServerName') as nvarchar(100))
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Snapshot Agent startup message.',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'DECLARE @agentIDAPH int
select @agentIDAPH = mssag.id from master.dbo.sysservers syssrv
join MSsnapshot_agents mssag on mssag.publisher_id = syssrv.srvid
where mssag.name = ''D00480 - ActivePos_read Snapshot''
exec sp_MSadd_snapshot_history @perfmon_increment = 0, @agent_id = @agentIDAPH, @runstatus = 1,
@comments = N''Starting agent.''
',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=@distributor,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
SET @cmd = '-Publisher [' + @distributor+'] -PublisherDB [ActivePos_read] -Distributor ['+@distributor+'] -Publication [ActivePosTran] -DistributorSecurityMode 1'
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Run agent.',
@step_id=2,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=2,
@retry_interval=60,
@os_run_priority=0, @subsystem=N'Snapshot',
@command=@cmd,
@database_name=N'distribution',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=@distributor,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=N'[Repl][aphsqlrepl][ActivePos_read]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Detect nonlogged agent shutdown.',
@step_id=3,
@cmdexec_success_code=0,
@on_success_action=2,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'DECLARE @agentIDAPH int
select @agentIDAPH = mssag.id from master.dbo.sysservers syssrv
join MSsnapshot_agents mssag on mssag.publisher_id = syssrv.srvid
where mssag.name = ''D00480 - ActivePos_read Snapshot''
exec sp_MSdetect_nonlogged_shutdown @subsystem = ''Snapshot'', @agent_id = @agentIDAPH
',
@database_name=N'distribution',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=@distributor,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Standard Schedule */
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'D00480 - Daily at 06h30',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=1,
@freq_subday_interval=1,
@freq_relative_interval=1,
@freq_recurrence_factor=0,
@active_start_date=20200113,
@active_end_date=99991231,
@active_start_time=63000,
@active_end_time=235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Attach existing specific schedule for job */
declare @enabled_schedule int,
@schedule_name nvarchar(50)
declare c_schedules cursor local forward_only static for
select enabled, name
from msdb.dbo.sysschedules
where name LIKE 'D00480%'
and name LIKE '%#SPEC#'
open c_schedules
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
while @@fetch_status = 0
begin
EXEC @ReturnCode = msdb.dbo.sp_attach_schedule @job_id = @jobId, @schedule_name=@schedule_name
IF(@enabled_schedule = 1)
begin
SET @schedule_name = SUBSTRING(@schedule_name,0,LEN(@schedule_name)-5)
IF EXISTS (select name from msdb.dbo.sysschedules where name = @schedule_name)
EXEC @ReturnCode = msdb.dbo.sp_update_schedule @name=@schedule_name, @enabled=0
end
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
end
close c_schedules
deallocate c_schedules
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

View File

@@ -0,0 +1,207 @@
/* Drop existing standard schedule for job */
declare @schedule_id int
declare c_schedules cursor local forward_only static for
select ss.schedule_id
from msdb.dbo.sysjobschedules sjs
INNER JOIN msdb.dbo.sysschedules ss
ON sjs.schedule_id = ss.schedule_id
AND ss.name NOT LIKE '%#SPEC#'
INNER JOIN msdb.dbo.sysjobs sj
ON sjs.job_id = sj.job_id
WHERE sj.name = N'DR00460 - Mediset Calculation'
open c_schedules
FETCH NEXT FROM c_schedules into @schedule_id
while @@fetch_status = 0
begin
IF ((select COUNT(*) from msdb.dbo.sysjobschedules where schedule_id=@schedule_id) = 1)
EXEC msdb.dbo.sp_delete_schedule @schedule_id=@schedule_id, @force_delete = 1
FETCH NEXT FROM c_schedules into @schedule_id
end
close c_schedules
deallocate c_schedules
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'DR00460 - Mediset Calculation')
EXEC msdb.dbo.sp_delete_job @job_name = N'DR00460 - Mediset Calculation', @delete_unused_schedule=0
GO
/* Creation Job and Steps*/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'TPH-Business' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'TPH-Business'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
/* Add Job */
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'DR00460 - Mediset Calculation',
@enabled=1,
@notify_level_eventlog=2,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'Calculation des Stocks pour les Articles Médiset (Père - Fils).
FLA 22.10.2018 : Standardisation du job
SPE 17.01.2020 : Modification du schedule (fin a minuit)
FLA 17.03.2022 : Change DBA mail
RTC 13.03.2023 : OCTPDBA-473 Update schedule from every 1 minutes to every 8 hours',
@category_name=N'TPH-Business',
@start_step_id=1,
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */
',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Execute aps_Stock_Transfer_3',
@step_id=2,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=4,
@retry_attempts=0,
@retry_interval=1,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'EXEC [dbo].[aps_Mediset_Calculation]',
@database_name=N'Arizona',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step for success',
@step_id=3,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=4,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */
exec Get_Job_Error_Info @in_JobName = ''DR00460 - Mediset Calculation'', @in_Recipients = ''DBA_operator''
EXEC [mon].[Maj_Jobs_Status] @in_JobID = $(ESCAPE_SQUOTE(JOBID))',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send email KO',
@step_id=4,
@cmdexec_success_code=0,
@on_success_action=2,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec Get_Job_Error_Info @in_JobName = ''DR00460 - Mediset Calculation'', @in_Recipients = ''DBA_operator''
EXEC [mon].[Maj_Jobs_Status] @in_JobID = $(ESCAPE_SQUOTE(JOBID))',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Standard Schedule */
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'DR00460-DR',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=8,
@freq_subday_interval=8,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20090924,
@active_end_date=99991231,
@active_start_time=70000,
@active_end_time=235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Attach existing specific schedule for job */
declare @enabled_schedule int,
@schedule_name nvarchar(50)
declare c_schedules cursor local forward_only static for
select enabled, name
from msdb.dbo.sysschedules
where name LIKE 'DR00460%'
and name LIKE '%#SPEC#'
open c_schedules
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
while @@fetch_status = 0
begin
EXEC @ReturnCode = msdb.dbo.sp_attach_schedule @job_id = @jobId, @schedule_name=@schedule_name
IF(@enabled_schedule = 1)
begin
SET @schedule_name = SUBSTRING(@schedule_name,0,LEN(@schedule_name)-5)
IF EXISTS (select name from msdb.dbo.sysschedules where name = @schedule_name)
EXEC @ReturnCode = msdb.dbo.sp_update_schedule @name=@schedule_name, @enabled=0
end
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
end
close c_schedules
deallocate c_schedules
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

View File

@@ -0,0 +1,91 @@
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = 'Distribution clean up: distribution')
EXEC msdb.dbo.sp_delete_job @job_name=N'Distribution clean up: distribution', @delete_unused_schedule=1
GO
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object: JobCategory [REPL-Distribution Cleanup] Script Date: 06/10/2015 16:17:33 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'REPL-Distribution Cleanup' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'REPL-Distribution Cleanup'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'Distribution clean up: distribution',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'Removes replicated transactions from the distribution database.',
@category_name=N'REPL-Distribution Cleanup',
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object: Step [Run agent.] Script Date: 06/10/2015 16:17:34 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Run agent.',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'EXEC dbo.sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention = 72',
@database_name=N'distribution',
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'Replication agent schedule.',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=4,
@freq_subday_interval=10,
@freq_relative_interval=1,
@freq_recurrence_factor=0,
@active_start_date=20140929,
@active_end_date=99991231,
@active_start_time=500,
@active_end_time=459
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO
/* Create operator and add it to the job */
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysoperators WHERE name = N'DBA')
BEGIN
EXEC msdb.dbo.sp_add_operator @name=N'DBA',
@enabled=1,
@weekday_pager_start_time=90000,
@weekday_pager_end_time=180000,
@saturday_pager_start_time=90000,
@saturday_pager_end_time=180000,
@sunday_pager_start_time=90000,
@sunday_pager_end_time=180000,
@pager_days=0,
@email_address=N'_hci_dba@hcisolutions.ch',
@category_name=N'[Uncategorized]'
EXEC msdb.dbo.sp_update_job @job_name=N'Distribution clean up: distribution',
@notify_level_email=2,
@notify_level_netsend=2,
@notify_level_page=2,
@notify_email_operator_name=N'DBA'
END
GO

View File

@@ -0,0 +1,68 @@
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = 'Replication monitoring refresher for distribution.')
EXEC msdb.dbo.sp_delete_job @job_name=N'Replication monitoring refresher for distribution.', @delete_unused_schedule=1
GO
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object: JobCategory [REPL-Alert Response] Script Date: 06/12/2015 10:07:01 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'REPL-Alert Response' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'REPL-Alert Response'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'Replication monitoring refresher for distribution.',
@enabled=0,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'Replication monitoring refresher for distribution.',
@category_name=N'REPL-Alert Response',
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object: Step [Run agent.] Script Date: 06/12/2015 10:07:01 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Run agent.',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=2147483647,
@retry_interval=1,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec dbo.sp_replmonitorrefreshjob ',
@database_name=N'distribution',
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
DECLARE @schedule_id int
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'Replication agent schedule.',
@enabled=1,
@freq_type=64,
@freq_interval=0,
@freq_subday_type=0,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20150202,
@active_end_date=99991231,
@active_start_time=0,
@active_end_time=235959, @schedule_id = @schedule_id OUTPUT
select @schedule_id
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

View File

@@ -0,0 +1,285 @@
/* Drop existing standard schedule for job */
declare @schedule_id int
declare c_schedules cursor local forward_only static for
select ss.schedule_id
from msdb.dbo.sysjobschedules sjs
INNER JOIN msdb.dbo.sysschedules ss
ON sjs.schedule_id = ss.schedule_id
AND ss.name NOT LIKE '%#SPEC#'
INNER JOIN msdb.dbo.sysjobs sj
ON sjs.job_id = sj.job_id
WHERE sj.name = N'_D00340 - LkdSrv - Prefac'
open c_schedules
FETCH NEXT FROM c_schedules into @schedule_id
while @@fetch_status = 0
begin
IF ((select COUNT(*) from msdb.dbo.sysjobschedules where schedule_id=@schedule_id) = 1)
EXEC msdb.dbo.sp_delete_schedule @schedule_id=@schedule_id, @force_delete = 1
FETCH NEXT FROM c_schedules into @schedule_id
end
close c_schedules
deallocate c_schedules
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'_D00340 - LkdSrv - Prefac')
EXEC msdb.dbo.sp_delete_job @job_name = N'_D00340 - LkdSrv - Prefac', @delete_unused_schedule=0
GO
/* Creation Job and Steps*/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'TPH-Business' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'TPH-Business'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
/* Add Job */
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'_D00340 - LkdSrv - Prefac',
@enabled=1,
@notify_level_eventlog=2,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'27.10.2017 - FLA - Job standardisé
26.03.2018 - FLA - Ajout du step aps_PH_Automatic_Billing_Launcher
25.08.2023 - SPE - Retrait du step 4 aps_sp_olpFACT_Extraction
28.09.2023 - FLA - ajout du step 4 aps_sp_olpFACT_Extraction',
@category_name=N'TPH-Business',
@start_step_id=1,
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */
',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'aps_sp_olpFACT_GAL_Automatic_Billing',
@step_id=2,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=8,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'EXEC aps_sp_olpFACT_GAL_Automatic_Billing
1
, NULL
, ''HCI_Facturation''
, ''HCI_Facturation''
, ''HCI_Facturation''
, ''HCI_Facturation''
, NULL
;',
@database_name=N'ArizonaCUST',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'aps_PH_Automatic_Billing_Launcher',
@step_id=3,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=8,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec aps_PH_Automatic_Billing_Launcher @in_debug = NULL',
@database_name=N'Arizona',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'aps_sp_OLPFACT_Extraction',
@step_id=4,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=8,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'
exec aps_sp_OLPFACT_Extraction
@JobType = 1 ;
',
@database_name=N'ArizonaCUST',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Calcul_KPI_FAKTURO',
@step_id=5,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=8,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec aps_sp_calcul_KPI_FAKTURO
@JobType = 1',
@database_name=N'ArizonaCUST',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Envoi rappel TriaFIN',
@step_id=6,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=7,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec aps_PH_Batch_Reminder_Sender',
@database_name=N'Arizona',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step for success',
@step_id=7,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=8,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */
exec Get_Job_Error_Info @in_JobName = ''_D00340 - LkdSrv - Prefac'', @in_Recipients = ''HCI_Facturation''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send email KO',
@step_id=8,
@cmdexec_success_code=0,
@on_success_action=2,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec Get_Job_Error_Info @in_JobName = ''_D00340 - LkdSrv - Prefac'', @in_Recipients = ''HCI_Facturation''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Attach existing specific schedule for job */
declare @enabled_schedule int,
@schedule_name nvarchar(50)
declare c_schedules cursor local forward_only static for
select enabled, name
from msdb.dbo.sysschedules
where name LIKE '_D00340%'
and name LIKE '%#SPEC#'
open c_schedules
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
while @@fetch_status = 0
begin
EXEC @ReturnCode = msdb.dbo.sp_attach_schedule @job_id = @jobId, @schedule_name=@schedule_name
IF(@enabled_schedule = 1)
begin
SET @schedule_name = SUBSTRING(@schedule_name,0,LEN(@schedule_name)-5)
IF EXISTS (select name from msdb.dbo.sysschedules where name = @schedule_name)
EXEC @ReturnCode = msdb.dbo.sp_update_schedule @name=@schedule_name, @enabled=0
end
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
end
close c_schedules
deallocate c_schedules
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

View File

@@ -0,0 +1,224 @@
/*=============================================================================
Explication du traitement realise par le script
-------------------------------------------
1. Creation de la catégorie SQL Server Agent Alerts
2. Creation de l'opérateur DBA_operator
3. Creation de l'alerte Severité 19 Fatal Error in Resource
4. Creation de l'alerte Severité 20 Fatal Error in Current Process
5. Creation de l'alerte Severité 21 Fatal Error in Database Process
6. Creation de l'alerte Severité 22 Fatal Error Table Integrity Suspect
7. Creation de l'alerte Severité 23 Fatal Error Database Integrity Suspect
8. Creation de l'alerte Severité 24 Fatal Hardware Error
9. Creation de l'alerte Severité 25 Fatal Error
10. Création de l'alerte de l'erreur 825 Read-Retry Required
Creation : 06.06.2018 / FLA
Modifications : 17.03.2022 - FLA : Change DBA mail
=============================================================================*/
USE [msdb];
/* Add categorie for SQL Server Agent Alerts */
DECLARE @CategoryName sysname,
@OperatorName sysname,
@AlertName sysname
SET @CategoryName = N'SQL Server Agent Alerts';
SET @OperatorName = N'DBA_operator'
IF NOT EXISTS (SELECT *
FROM msdb.dbo.syscategories
WHERE category_class = 2 /*2=Alert*/
AND category_type = 3
AND name = @CategoryName)
BEGIN
EXEC dbo.sp_add_category @class = N'ALERT', @type = N'NONE', @name = @CategoryName;
END
/* Add operator DBA_operator for SQL Server Agent Alerts */
IF EXISTS (SELECT name FROM msdb.dbo.sysoperators WHERE name = N'DBA_operator')
EXEC msdb.dbo.sp_delete_operator @name=N'DBA_operator'
EXEC msdb.dbo.sp_add_operator @name=N'DBA_operator',
@enabled=1,
@weekday_pager_start_time=90000,
@weekday_pager_end_time=180000,
@saturday_pager_start_time=90000,
@saturday_pager_end_time=180000,
@sunday_pager_start_time=90000,
@sunday_pager_end_time=180000,
@pager_days=0,
@email_address=N'Gal_SE_DBA@galenica.com',
@category_name=N'[Uncategorized]'
SET @AlertName = 'DBA - Sev 19 Error: Fatal Error in Resource'
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id=0,
@severity=19,
@enabled=1,
@delay_between_responses=900,
@include_event_description_in=1,
@category_name = @CategoryName
IF NOT EXISTS(SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName, @operator_name=@OperatorName, @notification_method = 1;
SET @AlertName = 'DBA - Sev 20 Error: Fatal Error in Current Process'
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_delete_alert @name=@AlertName
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id=0,
@severity=20,
@enabled=1,
@delay_between_responses=900,
@include_event_description_in=1,
@category_name = @CategoryName
IF NOT EXISTS(SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName, @operator_name=@OperatorName, @notification_method = 1;
SET @AlertName = 'DBA - Sev 21 Error: Fatal Error in Database Process'
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_delete_alert @name=@AlertName
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id=0,
@severity=21,
@enabled=1,
@delay_between_responses=900,
@include_event_description_in=1,
@category_name = @CategoryName
IF NOT EXISTS(SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName, @operator_name=@OperatorName, @notification_method = 1;
SET @AlertName = 'DBA - Sev 22 Error: Fatal Error Table Integrity Suspect'
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_delete_alert @name=@AlertName
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id=0,
@severity=22,
@enabled=1,
@delay_between_responses=900,
@include_event_description_in=1,
@category_name = @CategoryName
IF NOT EXISTS(SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName, @operator_name=@OperatorName, @notification_method = 1;
SET @AlertName = 'DBA - Sev 23 Error: Fatal Error Database Integrity Suspect'
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_delete_alert @name=@AlertName
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id=0,
@severity=23,
@enabled=1,
@delay_between_responses=900,
@include_event_description_in=1,
@category_name = @CategoryName
IF NOT EXISTS(SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName, @operator_name=@OperatorName, @notification_method = 1;
SET @AlertName = 'DBA - Sev 24 Error: Fatal Hardware Error'
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_delete_alert @name=@AlertName
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id=0,
@severity=24,
@enabled=1,
@delay_between_responses=900,
@include_event_description_in=1,
@category_name = @CategoryName
IF NOT EXISTS(SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName, @operator_name=@OperatorName, @notification_method = 1;
SET @AlertName = 'DBA - Sev 25 Error: Fatal Error'
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_delete_alert @name=@AlertName
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id=0,
@severity=25,
@enabled=1,
@delay_between_responses=900,
@include_event_description_in=1,
@category_name = @CategoryName
IF NOT EXISTS(SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName, @operator_name=@OperatorName, @notification_method = 1;
SET @AlertName = 'DBA - Error 825: Read-Retry Required'
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_delete_alert @name=@AlertName
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id=825,
@severity=0,
@enabled=1,
@delay_between_responses=900,
@include_event_description_in=1,
@category_name = @CategoryName
IF NOT EXISTS(SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName, @operator_name=@OperatorName, @notification_method = 1;

View File

@@ -0,0 +1,24 @@
USE [msdb]
GO
DECLARE @namespace NVARCHAR(255)
= N'\\.\root\Microsoft\SqlServer\ServerEvents\' + COALESCE
(
CONVERT(NVARCHAR(32), SERVERPROPERTY('InstanceName')),
N'MSSQLSERVER'
);
IF NOT EXISTS(SELECT 1 FROM msdb.dbo.sysalerts WHERE [name] = N'DBA - Audit Login')
BEGIN
EXEC msdb.dbo.sp_add_alert @name=N'DBA - Audit Login',
@message_id=0,
@severity=0,
@enabled=1,
@delay_between_responses=0,
@include_event_description_in=0,
@category_name=N'[Uncategorized]',
@wmi_namespace= @namespace,
@wmi_query=N'SELECT * FROM AUDIT_LOGIN_FAILED',
@job_name=N'_92020 - Audit Login'
END
GO

View File

@@ -0,0 +1,358 @@
/* Update blocked process threshold */
exec master.dbo.sp_configure 'show advanced option', 1;
RECONFIGURE WITH OVERRIDE
EXEC sp_configure 'blocked process threshold', 10 ---- CHANGE HERE !!
exec master.dbo.sp_configure 'show advanced option', 0;
RECONFIGURE WITH OVERRIDE
GO
/* Add table to store alert report*/
USE [HCITools]
GO
IF NOT EXISTS ( SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[BlockingSessionInfo]')
AND type in ( N'U' ))
BEGIN
CREATE TABLE [dbo].[BlockingSessionInfo] (
[SessionInfoId] [int] IDENTITY(1, 1) NOT NULL,
[AlertTime] [datetime2](0) NOT NULL,
[BlockingDetails] [xml] NULL,
[MailNotification] [BIT] NOT NULL
DEFAULT 0,
CONSTRAINT [PK_BlockingSessionInfo]
PRIMARY KEY CLUSTERED ([SessionInfoId] ASC)) ON [PRIMARY]
END
GO
USE [msdb]
GO
/* Deploy job for alert response */
/* Drop existing standard schedule for job */
declare @schedule_id int
declare c_schedules cursor local forward_only static for
select ss.schedule_id
from msdb.dbo.sysjobschedules sjs
INNER JOIN msdb.dbo.sysschedules ss
ON sjs.schedule_id = ss.schedule_id
AND ss.name NOT LIKE '%#SPEC#'
INNER JOIN msdb.dbo.sysjobs sj
ON sjs.job_id = sj.job_id
WHERE sj.name = N'_92050 - Response - Blocked Process Event'
open c_schedules
FETCH NEXT FROM c_schedules into @schedule_id
while @@fetch_status = 0
begin
IF ((select COUNT(*) from msdb.dbo.sysjobschedules where schedule_id=@schedule_id) = 1)
EXEC msdb.dbo.sp_delete_schedule @schedule_id=@schedule_id, @force_delete = 1
FETCH NEXT FROM c_schedules into @schedule_id
end
close c_schedules
deallocate c_schedules
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'_92050 - Response - Blocked Process Event')
EXEC msdb.dbo.sp_delete_job @job_name = N'_92050 - Response - Blocked Process Event', @delete_unused_schedule=0
GO
/* Creation Job and Steps*/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'DBA-Monitoring' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'DBA-Monitoring'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
/* Add Job */
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'_92050 - Response - Blocked Process Event',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'16.11.2018 : RTC Store Blocking session report details and send notification to DBA only every 2 minutes and during opening hours.',
@category_name=N'DBA-Monitoring',
@start_step_id=1,
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Insert Blocking info',
@step_id=2,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=5,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'INSERT INTO dbo.BlockingSessionInfo (
AlertTime,
BlockingDetails
)
VALUES (
GETDATE(),
''$(ESCAPE_NONE(WMI(TextData)))''
)',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send blocking session report if needed',
@step_id=3,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=5,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'DECLARE @reportXml XML;
DECLARE @XmlToString NVARCHAR(MAX);
DECLARE @path NVARCHAR(4000);
SET @reportXml = CONVERT(XML, N''$(ESCAPE_SQUOTE(WMI(TextData)))'', 1);
SET @XmlToString = CONVERT(NVARCHAR(MAX), @reportXml);
/* Elapse time since last mail sent in seconds*/
DECLARE @elapseTime AS INT;
SELECT @elapseTime = 0;
SELECT TOP 1
@elapseTime = DATEDIFF(SECOND, AlertTime, GETDATE())
FROM HCITools.dbo.BlockingSessionInfo
WHERE MailNotification = 1
ORDER BY AlertTime DESC;
IF EXISTS (SELECT 1 FROM sys.databases WHERE name = ''Arizona'')
BEGIN
IF (Arizona.dbo.aps_fn_Is_working_hour(GETDATE(), NULL, NULL) = 1)
AND
(
@elapseTime >= 120
OR NOT EXISTS
(
SELECT 1
FROM HCITools.dbo.BlockingSessionInfo
WHERE MailNotification = 1
)
)
BEGIN
EXEC [Arizona].[dbo].[aps_Send_Mail_with_template] @in_param_varchar_2 = ''DBA_operator'',
-- ,@in_param_varchar_3 =@XmlToString -- ''A session blocked has occured in SQL Server. Attached you will find the lock graph.''
@in_param_message = @XmlToString,
@in_job_type = 3;
UPDATE TOP (1)
HCITools.dbo.BlockingSessionInfo
SET MailNotification = 1
WHERE SessionInfoId IN
(
SELECT TOP 1
SessionInfoId
FROM HCITools.dbo.BlockingSessionInfo
ORDER BY AlertTime DESC
);
END;
END;
;
',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step for success',
@step_id=4,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send email KO',
@step_id=5,
@cmdexec_success_code=0,
@on_success_action=2,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec Get_Job_Error_Info @in_JobName = ''_92050 - Response - Blocked Process Event'', @in_Recipients = ''DBA_operator''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Attach existing specific schedule for job */
declare @enabled_schedule int,
@schedule_name nvarchar(50)
declare c_schedules cursor local forward_only static for
select enabled, name
from msdb.dbo.sysschedules
where name LIKE '_92050%'
and name LIKE '%#SPEC#'
open c_schedules
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
while @@fetch_status = 0
begin
EXEC @ReturnCode = msdb.dbo.sp_attach_schedule @job_id = @jobId, @schedule_name=@schedule_name
IF(@enabled_schedule = 1)
begin
SET @schedule_name = SUBSTRING(@schedule_name,0,LEN(@schedule_name)-5)
IF EXISTS (select name from msdb.dbo.sysschedules where name = @schedule_name)
EXEC @ReturnCode = msdb.dbo.sp_update_schedule @name=@schedule_name, @enabled=0
end
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
end
close c_schedules
deallocate c_schedules
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO
/* Add categorie for SQL Server Agent Alerts */
DECLARE @CategoryName sysname,
@AlertName sysname
SET @CategoryName = N'SQL Server Agent Alerts';
IF NOT EXISTS (SELECT *
FROM msdb.dbo.syscategories
WHERE category_class = 2 /*2=Alert*/
AND category_type = 3
AND name = @CategoryName)
BEGIN
PRINT 'Add Category SQL Server Agent Alerts'
EXEC dbo.sp_add_category @class = N'ALERT', @type = N'NONE', @name = @CategoryName;
END
/****** Alert [DBA - WMI:Respond to Blocking session] ******/
SET @AlertName = 'DBA - WMI:Respond to Blocking session'
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_delete_alert @name= @AlertName
GO
DECLARE @CategoryName sysname,
@AlertName sysname
SET @CategoryName = N'SQL Server Agent Alerts';
SET @AlertName = 'DBA - WMI:Respond to Blocking session'
DECLARE @namespace NVARCHAR(200);
IF (SERVERPROPERTY('InstanceName') IS NOT NULL)
BEGIN
SELECT @namespace = N'\\.\root\Microsoft\SqlServer\ServerEvents\'
+ CONVERT(NVARCHAR(128), SERVERPROPERTY('InstanceName'));
END;
ELSE
BEGIN
DECLARE @InstanceName SYSNAME
SET @InstanceName = CONVERT(VARCHAR(128),ISNULL(SERVERPROPERTY ('InstanceName'),'MSSQLSERVER'))
SELECT @namespace = N'\\.\root\Microsoft\SqlServer\ServerEvents\' + @InstanceName;
END;
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id=0,
@severity=0,
@enabled=1,
@delay_between_responses=10,
@include_event_description_in=5,
@category_name=@CategoryName,
@wmi_namespace=@namespace,
@wmi_query=N'SELECT * FROM BLOCKED_PROCESS_REPORT',
@job_name=N'_92050 - Response - Blocked Process Event'
GO

View File

@@ -0,0 +1,48 @@
USE [msdb]
GO
-- delete operator
IF EXISTS (SELECT name FROM msdb.dbo.sysoperators WHERE name = N'DBA operator')
EXEC msdb.dbo.sp_delete_operator @name=N'DBA operator'
GO
USE [msdb]
GO
-- Create operator
EXEC msdb.dbo.sp_add_operator @name=N'DBA operator',
@enabled=1,
@weekday_pager_start_time=90000,
@weekday_pager_end_time=180000,
@saturday_pager_start_time=90000,
@saturday_pager_end_time=180000,
@sunday_pager_start_time=90000,
@sunday_pager_end_time=180000,
@pager_days=0,
@email_address=N'Gal_SE_DBA@galenica.com',
@category_name=N'[Uncategorized]'
GO
USE [msdb]
GO
-- delete Alerte
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = N'DBA - Broker - Too many messages in queue')
EXEC msdb.dbo.sp_delete_alert @name=N'DBA - Broker - Too many messages in queue'
GO
USE [msdb]
GO
-- create alert
EXEC msdb.dbo.sp_add_alert @name=N'DBA - Broker - Too many messages in queue',
@message_id=0,
@severity=0,
@enabled=1,
@delay_between_responses=900,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@performance_condition=N'MSSQL$APSSQL:Broker Statistics|Enqueued Messages Total||>|50',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO

View File

@@ -0,0 +1,437 @@
USE [msdb];
GO
IF NOT EXISTS (SELECT 1 FROM master.cfg.InstanceContext WHERE Business IN ('TPPHAR','TPCENT'))
BEGIN
IF EXISTS (SELECT 1 FROM sys.databases WHERE name = 'distribution')
BEGIN
DECLARE @OperatorName sysname,
@AlertName sysname;
SET @OperatorName = N'DBA_operator';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysoperators
WHERE name = @OperatorName)
EXEC msdb.dbo.sp_add_operator @name = @OperatorName,
@enabled = 1,
@weekday_pager_start_time = 90000,
@weekday_pager_end_time = 180000,
@saturday_pager_start_time = 90000,
@saturday_pager_end_time = 180000,
@sunday_pager_start_time = 90000,
@sunday_pager_end_time = 180000,
@pager_days = 0,
@email_address = N'Gal_SE_DBA@galenica.com',
@category_name = N'[Uncategorized]';
SET @AlertName = 'Replication Warning: Transactional replication latency (Threshold: latency)';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 14161,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication Warning: Subscription expiration (Threshold: expiration)';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 14160,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication Warning: Slow merge over LAN connection (Threshold: mergefastrunspeed)';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 14164,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication Warning: Slow merge over dialup connection (Threshold: mergeslowrunspeed)';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 14165,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication Warning: Long merge over LAN connection (Threshold: mergefastrunduration)';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 14162,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication Warning: Long merge over dialup connection (Threshold: mergeslowrunduration)';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 14163,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication: agent custom shutdown';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 20578,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication: agent failure';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 14151,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication: agent retry';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 14152,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication: agent success';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 14150,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication: expired subscription dropped';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 14157,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication: Subscriber has failed data validation';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 20574,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication: Subscriber has passed data validation';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 20575,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
SET @AlertName = 'Replication: Subscription reinitialized after validation failure';
IF EXISTS ( SELECT name
FROM msdb.dbo.sysalerts
WHERE ( name = @AlertName
AND enabled = 0)
OR ( name = @AlertName
AND has_notification = 0))
EXEC msdb.dbo.sp_delete_alert @name = @AlertName;
IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @AlertName)
EXEC msdb.dbo.sp_add_alert @name = @AlertName,
@message_id = 20572,
@severity = 0,
@enabled = 1,
@delay_between_responses = 3600,
@include_event_description_in = 5,
@category_name = N'Replication',
@job_id = N'00000000-0000-0000-0000-000000000000';
IF NOT EXISTS ( SELECT name
FROM msdb.dbo.sysalerts AS sa
INNER JOIN msdb.dbo.sysnotifications AS sn
ON sa.id = sn.alert_id
WHERE sa.name = @AlertName)
EXEC msdb.dbo.sp_add_notification @alert_name = @AlertName,
@operator_name = @OperatorName,
@notification_method = 1;
END;
END;
GO

View File

@@ -0,0 +1,200 @@
/* Drop existing standard schedule for job */
declare @schedule_id int
declare c_schedules cursor local forward_only static for
select ss.schedule_id
from msdb.dbo.sysjobschedules sjs
INNER JOIN msdb.dbo.sysschedules ss
ON sjs.schedule_id = ss.schedule_id
AND ss.name NOT LIKE '%#SPEC#'
INNER JOIN msdb.dbo.sysjobs sj
ON sjs.job_id = sj.job_id
WHERE sj.name = N'D93160 - Purge All Stats SP'
open c_schedules
FETCH NEXT FROM c_schedules into @schedule_id
while @@fetch_status = 0
begin
IF ((select COUNT(*) from msdb.dbo.sysjobschedules where schedule_id=@schedule_id) = 1)
EXEC msdb.dbo.sp_delete_schedule @schedule_id=@schedule_id, @force_delete = 1
FETCH NEXT FROM c_schedules into @schedule_id
end
close c_schedules
deallocate c_schedules
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'D93160 - Purge All Stats SP')
EXEC msdb.dbo.sp_delete_job @job_name = N'D93160 - Purge All Stats SP', @delete_unused_schedule=0
GO
/* Creation Job and Steps*/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'DBA-Maintenance' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'DBA-Maintenance'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
/* Add Job */
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'D93160 - Purge All Stats SP',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'Cleaning SP statistics data older than 12 months.
23.09.2020 - FLA - Created
17.03.2022 - FLA : Change DBA mail',
@category_name=N'DBA-Maintenance',
@start_step_id=1,
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Delete SP statistics older than 12 months',
@step_id=2,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=4,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'EXEC [dbo].[mon_Purge_All_Stats_SP]',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step for success',
@step_id=3,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=4,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */
exec Get_Job_Error_Info @in_JobName = ''D93160 - Purge All Stats SP'', @in_Recipients = ''DBA_operator''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send email KO',
@step_id=4,
@cmdexec_success_code=0,
@on_success_action=2,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec Get_Job_Error_Info @in_JobName = ''D93160 - Purge All Stats SP'', @in_Recipients = ''DBA_operator''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Standard Schedule */
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'D93160-D',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20161129,
@active_end_date=99991231,
@active_start_time=233000,
@active_end_time=235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Attach existing specific schedule for job */
declare @enabled_schedule int,
@schedule_name nvarchar(50)
declare c_schedules cursor local forward_only static for
select enabled, name
from msdb.dbo.sysschedules
where name LIKE 'D93160%'
and name LIKE '%#SPEC#'
open c_schedules
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
while @@fetch_status = 0
begin
EXEC @ReturnCode = msdb.dbo.sp_attach_schedule @job_id = @jobId, @schedule_name=@schedule_name
IF(@enabled_schedule = 1)
begin
SET @schedule_name = SUBSTRING(@schedule_name,0,LEN(@schedule_name)-5)
IF EXISTS (select name from msdb.dbo.sysschedules where name = @schedule_name)
EXEC @ReturnCode = msdb.dbo.sp_update_schedule @name=@schedule_name, @enabled=0
end
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
end
close c_schedules
deallocate c_schedules
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

View File

@@ -0,0 +1,174 @@
/*=============================================================================
Agrégation des statistiques de procédures stockées
-----------------------------------------------
Ce script créer un job afin d'agréger les statistiques de procédures stockées dans la table Aggregate_Stats_SP
Contexte d'utilisation
----------------------
Création : 23.09.2020 / FLA
Modifications : 17.03.2022 - FLA : Change DBA mail
=============================================================================*/
/* Drop existing standard schedule for job */
declare @schedule_id int
declare c_schedules cursor local forward_only static for
select ss.schedule_id
from msdb.dbo.sysjobschedules sjs
INNER JOIN msdb.dbo.sysschedules ss
ON sjs.schedule_id = ss.schedule_id
AND ss.name NOT LIKE '%#SPEC#'
INNER JOIN msdb.dbo.sysjobs sj
ON sjs.job_id = sj.job_id
WHERE sj.name = N'_D92270 - Aggregate Stats SP'
open c_schedules
FETCH NEXT FROM c_schedules into @schedule_id
while @@fetch_status = 0
begin
IF ((select COUNT(*) from msdb.dbo.sysjobschedules where schedule_id=@schedule_id) = 1)
EXEC msdb.dbo.sp_delete_schedule @schedule_id=@schedule_id, @force_delete = 1
FETCH NEXT FROM c_schedules into @schedule_id
end
close c_schedules
deallocate c_schedules
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'_D92270 - Aggregate Stats SP')
EXEC msdb.dbo.sp_delete_job @job_name = N'_D92270 - Aggregate Stats SP', @delete_unused_schedule=0
GO
/* Creation Job and Steps*/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'DBA-Monitoring' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'DBA-Monitoring'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
/* Add Job */
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'_D92270 - Aggregate Stats SP',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'Aggregate Stats SP in table Aggregate_Stats_SP
23.09.2020 - FLA - Created',
@category_name=N'DBA-Monitoring',
@start_step_id=1,
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Aggregate Stats SP',
@step_id=2,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=4,
@retry_attempts=0,
@retry_interval=1,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec [dbo].[mon_Aggregate_Stats_SP]',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step for success',
@step_id=3,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=4,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */
exec Get_Job_Error_Info @in_JobName = ''_D92270 - Aggregate Stats SP'', @in_Recipients = ''DBA_operator''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send email KO',
@step_id=4,
@cmdexec_success_code=0,
@on_success_action=2,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec Get_Job_Error_Info @in_JobName = ''_D92270 - Aggregate Stats SP'', @in_Recipients = ''DBA_operator''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

View File

@@ -0,0 +1,198 @@
/* Drop existing standard schedule for job */
declare @schedule_id int
declare c_schedules cursor local forward_only static for
select ss.schedule_id
from msdb.dbo.sysjobschedules sjs
INNER JOIN msdb.dbo.sysschedules ss
ON sjs.schedule_id = ss.schedule_id
AND ss.name NOT LIKE '%#SPEC#'
INNER JOIN msdb.dbo.sysjobs sj
ON sjs.job_id = sj.job_id
WHERE sj.name = N'D91040 - Backup of simple databases after MSI update'
open c_schedules
FETCH NEXT FROM c_schedules into @schedule_id
while @@fetch_status = 0
begin
IF ((select COUNT(*) from msdb.dbo.sysjobschedules where schedule_id=@schedule_id) = 1)
EXEC msdb.dbo.sp_delete_schedule @schedule_id=@schedule_id, @force_delete = 1
FETCH NEXT FROM c_schedules into @schedule_id
end
close c_schedules
deallocate c_schedules
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'D91040 - Backup of simple databases after MSI update')
EXEC msdb.dbo.sp_delete_job @job_name = N'D91040 - Backup of simple databases after MSI update', @delete_unused_schedule=0
GO
/* Creation Job and Steps*/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'DBA Database Maintenance' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'DBA Database Maintenance'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
/* Add Job */
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'D91040 - Backup of simple databases after MSI update',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'09-01.2023 RTC: OCTPDBA-454 Backup TriaPharm database having SIMPLE recovery mode after MSI update',
@category_name=N'DBA Database Maintenance',
@start_step_id=1,
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Backup databases',
@step_id=2,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=4,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec hcitools.dbo.[Backup_Simple_Databases]',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step for success',
@step_id=3,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=4,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */
',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send email KO',
@step_id=4,
@cmdexec_success_code=0,
@on_success_action=2,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec Get_Job_Error_Info @in_JobName = ''D91040 - Backup of simple databases after MSI update'', @in_Recipients = ''DBA_operator''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Standard Schedule */
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'D91040-D',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20230109,
@active_end_date=99991231,
@active_start_time=60000,
@active_end_time=235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Attach existing specific schedule for job */
declare @enabled_schedule int,
@schedule_name nvarchar(50)
declare c_schedules cursor local forward_only static for
select enabled, name
from msdb.dbo.sysschedules
where name LIKE 'D91040%'
and name LIKE '%#SPEC#'
open c_schedules
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
while @@fetch_status = 0
begin
EXEC @ReturnCode = msdb.dbo.sp_attach_schedule @job_id = @jobId, @schedule_name=@schedule_name
IF(@enabled_schedule = 1)
begin
SET @schedule_name = SUBSTRING(@schedule_name,0,LEN(@schedule_name)-5)
IF EXISTS (select name from msdb.dbo.sysschedules where name = @schedule_name)
EXEC @ReturnCode = msdb.dbo.sp_update_schedule @name=@schedule_name, @enabled=0
end
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
end
close c_schedules
deallocate c_schedules
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

View File

@@ -0,0 +1,243 @@
/*=============================================================================
Collecte des statistiques d'index
-----------------------------------------------
Ce script créer un job appelant la procédure stockée [mon_Collect_Stats_Index]
Contexte d'utilisation
----------------------
Ce job doit être créé après avoir créé la procédure stockée [mon_Collect_Stats_Index]
Création : 14.07.2015 / FLA
Modifications : 22.07.2016 / FLA standardize job name and schedule
09.09.2016 / FLA : Ajout de Get_Job_Error_Info dans empty step et Send Mail KO
04.10.2017 / FLA : Ajout de la gestion des environnements
16.11.2020 / SPE - TFS62199 - Collect Stats SP and Index performances
17.03.2022 / FLA : Change DBA mail
=============================================================================*/
/* Drop existing standard schedule for job */
declare @schedule_id int
declare c_schedules cursor local forward_only static for
select ss.schedule_id
from msdb.dbo.sysjobschedules sjs
INNER JOIN msdb.dbo.sysschedules ss
ON sjs.schedule_id = ss.schedule_id
AND ss.name NOT LIKE '%#SPEC#'
INNER JOIN msdb.dbo.sysjobs sj
ON sjs.job_id = sj.job_id
WHERE sj.name = N'D92080 - Collect Stats Index'
open c_schedules
FETCH NEXT FROM c_schedules into @schedule_id
while @@fetch_status = 0
begin
IF ((select COUNT(*) from msdb.dbo.sysjobschedules where schedule_id=@schedule_id) = 1)
EXEC msdb.dbo.sp_delete_schedule @schedule_id=@schedule_id, @force_delete = 1
FETCH NEXT FROM c_schedules into @schedule_id
end
close c_schedules
deallocate c_schedules
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'D92080 - Collect Stats Index')
EXEC msdb.dbo.sp_delete_job @job_name = N'D92080 - Collect Stats Index', @delete_unused_schedule=0
GO
/* Creation Job and Steps*/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'DBA-Monitoring' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'DBA-Monitoring'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
/* Add Job */
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'D92080 - Collect Stats Index',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'Collect Stats Index from DMV sys.dm_db_index_usage_stats
14.07.2015 - FLA - Created
16.11.2020 - SPE - Modify schedules and add random time',
@category_name=N'DBA-Monitoring',
@start_step_id=1,
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Wait for a random delay of 0..15 minutes',
@step_id=2,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'EXEC [dbo].[aps_Wait_Random_Time] @in_Minutes = 15
',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Collect Stats Index',
@step_id=3,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=5,
@retry_attempts=0,
@retry_interval=1,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec [dbo].[mon_Collect_Stats_Index]',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step for success',
@step_id=4,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=5,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */
exec Get_Job_Error_Info @in_JobName = ''D92080 - Collect Stats Index'', @in_Recipients = ''DBA_operator''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send email KO',
@step_id=5,
@cmdexec_success_code=0,
@on_success_action=2,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec Get_Job_Error_Info @in_JobName = ''D92080 - Collect Stats Index'', @in_Recipients = ''DBA_operator''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Standard Schedule */
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'D92080-D',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20160722,
@active_end_date=99991231,
@active_start_time=233000,
@active_end_time=235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Attach existing specific schedule for job */
declare @enabled_schedule int,
@schedule_name nvarchar(50)
declare c_schedules cursor local forward_only static for
select enabled, name
from msdb.dbo.sysschedules
where name LIKE 'D92080%'
and name LIKE '%#SPEC#'
open c_schedules
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
while @@fetch_status = 0
begin
EXEC @ReturnCode = msdb.dbo.sp_attach_schedule @job_id = @jobId, @schedule_name=@schedule_name
IF(@enabled_schedule = 1)
begin
SET @schedule_name = SUBSTRING(@schedule_name,0,LEN(@schedule_name)-5)
IF EXISTS (select name from msdb.dbo.sysschedules where name = @schedule_name)
EXEC @ReturnCode = msdb.dbo.sp_update_schedule @name=@schedule_name, @enabled=0
end
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
end
close c_schedules
deallocate c_schedules
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

View File

@@ -0,0 +1,240 @@
/*=============================================================================
Collecte des statistiques de procédures stockées
-----------------------------------------------
Ce script créer un job appelant la procédure stockée [mon_Collect_Stats_SP]
Contexte d'utilisation
----------------------
Ce job doit être créé après avoir créé la procédure stockée [mon_Collect_Stats_SP]
Création : 23.09.2020 / FLA
Modifications : 16.11.2020 / SPE - TFS62199 - Collect Stats SP and Index performances
17.03.2022 / FLA : Change DBA mail
=============================================================================*/
/* Drop existing standard schedule for job */
declare @schedule_id int
declare c_schedules cursor local forward_only static for
select ss.schedule_id
from msdb.dbo.sysjobschedules sjs
INNER JOIN msdb.dbo.sysschedules ss
ON sjs.schedule_id = ss.schedule_id
AND ss.name NOT LIKE '%#SPEC#'
INNER JOIN msdb.dbo.sysjobs sj
ON sjs.job_id = sj.job_id
WHERE sj.name = N'D92250 - Collect Stats SP'
open c_schedules
FETCH NEXT FROM c_schedules into @schedule_id
while @@fetch_status = 0
begin
IF ((select COUNT(*) from msdb.dbo.sysjobschedules where schedule_id=@schedule_id) = 1)
EXEC msdb.dbo.sp_delete_schedule @schedule_id=@schedule_id, @force_delete = 1
FETCH NEXT FROM c_schedules into @schedule_id
end
close c_schedules
deallocate c_schedules
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'D92250 - Collect Stats SP')
EXEC msdb.dbo.sp_delete_job @job_name = N'D92250 - Collect Stats SP', @delete_unused_schedule=0
GO
/* Creation Job and Steps*/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'DBA-Monitoring' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'DBA-Monitoring'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
/* Add Job */
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'D92250 - Collect Stats SP',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'Collect Stats Index from DMV sys.dm_exec_procedure_stats
23.09.2020 - FLA - Created
16.11.2020 - SPE - Modify schedules and add random time',
@category_name=N'DBA-Monitoring',
@start_step_id=1,
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Wait for a random delay of 0..15 minutes',
@step_id=2,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'EXEC [dbo].[aps_Wait_Random_Time] @in_Minutes = 15
',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Collect Stats SP',
@step_id=3,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=5,
@retry_attempts=0,
@retry_interval=1,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec [dbo].[mon_Collect_Stats_SP]',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step for success',
@step_id=4,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=5,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */
exec Get_Job_Error_Info @in_JobName = ''D92250 - Collect Stats SP'', @in_Recipients = ''DBA_operator''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send email KO',
@step_id=5,
@cmdexec_success_code=0,
@on_success_action=2,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec Get_Job_Error_Info @in_JobName = ''D92250 - Collect Stats SP'', @in_Recipients = ''DBA_operator''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Standard Schedule */
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'D92250-D',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20160722,
@active_end_date=99991231,
@active_start_time=230000,
@active_end_time=235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Attach existing specific schedule for job */
declare @enabled_schedule int,
@schedule_name nvarchar(50)
declare c_schedules cursor local forward_only static for
select enabled, name
from msdb.dbo.sysschedules
where name LIKE 'D92250%'
and name LIKE '%#SPEC#'
open c_schedules
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
while @@fetch_status = 0
begin
EXEC @ReturnCode = msdb.dbo.sp_attach_schedule @job_id = @jobId, @schedule_name=@schedule_name
IF(@enabled_schedule = 1)
begin
SET @schedule_name = SUBSTRING(@schedule_name,0,LEN(@schedule_name)-5)
IF EXISTS (select name from msdb.dbo.sysschedules where name = @schedule_name)
EXEC @ReturnCode = msdb.dbo.sp_update_schedule @name=@schedule_name, @enabled=0
end
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
end
close c_schedules
deallocate c_schedules
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

View File

@@ -0,0 +1,261 @@
/*=============================================================================
Transfert des statistiques de procédure stockées
-----------------------------------------------
Ce script créer un job appelant la procédure stockée [mon_Transfert_Stats_SP] puis [mon_Purge_Stats_SP]
Contexte d'utilisation
----------------------
Ce job doit être créé après avoir créé la procédure stockée [mon_Transfert_Stats_SP] et [mon_Purge_Stats_SP]
Création : 23.09.2020 / FLA
Modifications : 16.11.2020 / SPE - TFS62199 - Collect Stats SP and Index performances
17.03.2022 / FLA : Change DBA mail
=============================================================================*/
/* Drop existing standard schedule for job */
declare @schedule_id int
declare c_schedules cursor local forward_only static for
select ss.schedule_id
from msdb.dbo.sysjobschedules sjs
INNER JOIN msdb.dbo.sysschedules ss
ON sjs.schedule_id = ss.schedule_id
AND ss.name NOT LIKE '%#SPEC#'
INNER JOIN msdb.dbo.sysjobs sj
ON sjs.job_id = sj.job_id
WHERE sj.name = N'D92260 - Transfert Stats SP'
open c_schedules
FETCH NEXT FROM c_schedules into @schedule_id
while @@fetch_status = 0
begin
IF ((select COUNT(*) from msdb.dbo.sysjobschedules where schedule_id=@schedule_id) = 1)
EXEC msdb.dbo.sp_delete_schedule @schedule_id=@schedule_id, @force_delete = 1
FETCH NEXT FROM c_schedules into @schedule_id
end
close c_schedules
deallocate c_schedules
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'D92260 - Transfert Stats SP')
EXEC msdb.dbo.sp_delete_job @job_name = N'D92260 - Transfert Stats SP', @delete_unused_schedule=0
GO
/* Creation Job and Steps*/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'DBA-Monitoring' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'DBA-Monitoring'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
/* Add Job */
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'D92260 - Transfert Stats SP',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'Transfert les stats de SP sur la centrale
23.09.2020 - FLA - Created
16.11.2020 - SPE - Modify schedules',
@category_name=N'DBA-Monitoring',
@start_step_id=1,
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Wait for a random delay of 0..15 minutes',
@step_id=2,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'EXEC [dbo].[Wait_Random_Time] @in_Minutes = 15',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Transfert Stats SP',
@step_id=3,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=6,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec [dbo].[mon_Transfert_Stats_SP]',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Purge Stats SP locally',
@step_id=4,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=6,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'EXEC [dbo].[mon_Purge_Stats_SP]',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step for success',
@step_id=5,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=6,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */
exec Get_Job_Error_Info @in_JobName = ''D92260 - Transfert Stats SP'', @in_Recipients = ''DBA_operator''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send email KO',
@step_id=6,
@cmdexec_success_code=0,
@on_success_action=2,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec Get_Job_Error_Info @in_JobName = ''D92260 - Transfert Stats SP'', @in_Recipients = ''DBA_operator''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Standard Schedule */
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'D92260-D',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20160509,
@active_end_date=99991231,
@active_start_time=000000,
@active_end_time=235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Attach existing specific schedule for job */
declare @enabled_schedule int,
@schedule_name nvarchar(50)
declare c_schedules cursor local forward_only static for
select enabled, name
from msdb.dbo.sysschedules
where name LIKE 'D92260%'
and name LIKE '%#SPEC#'
open c_schedules
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
while @@fetch_status = 0
begin
EXEC @ReturnCode = msdb.dbo.sp_attach_schedule @job_id = @jobId, @schedule_name=@schedule_name
IF(@enabled_schedule = 1)
begin
SET @schedule_name = SUBSTRING(@schedule_name,0,LEN(@schedule_name)-5)
IF EXISTS (select name from msdb.dbo.sysschedules where name = @schedule_name)
EXEC @ReturnCode = msdb.dbo.sp_update_schedule @name=@schedule_name, @enabled=0
end
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
end
close c_schedules
deallocate c_schedules
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

View File

@@ -0,0 +1,201 @@
/* Drop existing standard schedule for job */
declare @schedule_id int
declare c_schedules cursor local forward_only static for
select ss.schedule_id
from msdb.dbo.sysjobschedules sjs
INNER JOIN msdb.dbo.sysschedules ss
ON sjs.schedule_id = ss.schedule_id
AND ss.name NOT LIKE '%#SPEC#'
INNER JOIN msdb.dbo.sysjobs sj
ON sjs.job_id = sj.job_id
WHERE sj.name = N'D93020 - Daily clean-up'
open c_schedules
FETCH NEXT FROM c_schedules into @schedule_id
while @@fetch_status = 0
begin
IF ((select COUNT(*) from msdb.dbo.sysjobschedules where schedule_id=@schedule_id) = 1)
EXEC msdb.dbo.sp_delete_schedule @schedule_id=@schedule_id, @force_delete = 1
FETCH NEXT FROM c_schedules into @schedule_id
end
close c_schedules
deallocate c_schedules
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'D93020 - Daily clean-up')
EXEC msdb.dbo.sp_delete_job @job_name = N'D93020 - Daily clean-up', @delete_unused_schedule=0
GO
/* Creation Job and Steps*/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'DBA Database Maintenance' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'DBA Database Maintenance'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
/* Add Job */
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'D93020 - Daily clean-up',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'22.02.2013 - PDE - Created
03.07.2015 - LPO #TFS28342# Script unique pour AMAVITA, SUNSTORE, AAI
10.02.2021 - SPE #TFS63542# - Adapt purge DR jobs daily treatment
17.03.2022 - FLA : Change DBA mail',
@category_name=N'DBA Database Maintenance',
@start_step_id=1,
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Daily Clean-up',
@step_id=2,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=4,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'EXEC [dbo].[CleanUp_History]',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step for success',
@step_id=3,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=4,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */
exec Get_Job_Error_Info @in_JobName = ''D93020 - Daily clean-up'', @in_Recipients = ''DBA_operator''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send email KO',
@step_id=4,
@cmdexec_success_code=0,
@on_success_action=2,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec Get_Job_Error_Info @in_JobName = ''D93020 - Daily clean-up'', @in_Recipients = ''DBA_operator''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Standard Schedule */
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'D93020-D',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20160208,
@active_end_date=99991231,
@active_start_time=61500,
@active_end_time=235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Attach existing specific schedule for job */
declare @enabled_schedule int,
@schedule_name nvarchar(50)
declare c_schedules cursor local forward_only static for
select enabled, name
from msdb.dbo.sysschedules
where name LIKE 'D93020%'
and name LIKE '%#SPEC#'
open c_schedules
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
while @@fetch_status = 0
begin
EXEC @ReturnCode = msdb.dbo.sp_attach_schedule @job_id = @jobId, @schedule_name=@schedule_name
IF(@enabled_schedule = 1)
begin
SET @schedule_name = SUBSTRING(@schedule_name,0,LEN(@schedule_name)-5)
IF EXISTS (select name from msdb.dbo.sysschedules where name = @schedule_name)
EXEC @ReturnCode = msdb.dbo.sp_update_schedule @name=@schedule_name, @enabled=0
end
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
end
close c_schedules
deallocate c_schedules
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

View File

@@ -0,0 +1,201 @@
/* Drop existing standard schedule for job */
declare @schedule_id int
declare c_schedules cursor local forward_only static for
select ss.schedule_id
from msdb.dbo.sysjobschedules sjs
INNER JOIN msdb.dbo.sysschedules ss
ON sjs.schedule_id = ss.schedule_id
AND ss.name NOT LIKE '%#SPEC#'
INNER JOIN msdb.dbo.sysjobs sj
ON sjs.job_id = sj.job_id
WHERE sj.name = N'DR92030 - Check open transactions'
open c_schedules
FETCH NEXT FROM c_schedules into @schedule_id
while @@fetch_status = 0
begin
IF ((select COUNT(*) from msdb.dbo.sysjobschedules where schedule_id=@schedule_id) = 1)
EXEC msdb.dbo.sp_delete_schedule @schedule_id=@schedule_id, @force_delete = 1
FETCH NEXT FROM c_schedules into @schedule_id
end
close c_schedules
deallocate c_schedules
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'DR92030 - Check open transactions')
EXEC msdb.dbo.sp_delete_job @job_name = N'DR92030 - Check open transactions', @delete_unused_schedule=0
GO
/* Creation Job and Steps*/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
/* Add Job */
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'DR92030 - Check open transactions',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'12.08.2011 - PDE - Created
06.12.2012 - PDE - Added check of opened transactions
11.12.2018 - RTC - Remove blocking session.
17.03.2022 - FLA : Change DBA mail',
@category_name=N'[Uncategorized (Local)]',
@start_step_id=1,
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send warning in case of opened transactions',
@step_id=2,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=4,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'EXEC [dbo].[mon_Check_Open_Tran]',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step for success',
@step_id=3,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=4,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */
exec Get_Job_Error_Info @in_JobName = ''DR92030 - Check open transactions'', @in_Recipients = ''DBA_operator''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send email KO',
@step_id=4,
@cmdexec_success_code=0,
@on_success_action=2,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec Get_Job_Error_Info @in_JobName = ''DR92030 - Check open transactions'', @in_Recipients = ''DBA_operator''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Standard Schedule */
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'DR92030-DR',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=4,
@freq_subday_interval=2,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20110811,
@active_end_date=99991231,
@active_start_time=80000,
@active_end_time=230000
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Attach existing specific schedule for job */
declare @enabled_schedule int,
@schedule_name nvarchar(50)
declare c_schedules cursor local forward_only static for
select enabled, name
from msdb.dbo.sysschedules
where name LIKE 'DR92030%'
and name LIKE '%#SPEC#'
open c_schedules
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
while @@fetch_status = 0
begin
EXEC @ReturnCode = msdb.dbo.sp_attach_schedule @job_id = @jobId, @schedule_name=@schedule_name
IF(@enabled_schedule = 1)
begin
SET @schedule_name = SUBSTRING(@schedule_name,0,LEN(@schedule_name)-5)
IF EXISTS (select name from msdb.dbo.sysschedules where name = @schedule_name)
EXEC @ReturnCode = msdb.dbo.sp_update_schedule @name=@schedule_name, @enabled=0
end
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
end
close c_schedules
deallocate c_schedules
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

View File

@@ -0,0 +1,207 @@
/* Drop existing standard schedule for job */
declare @schedule_id int
declare c_schedules cursor local forward_only static for
select ss.schedule_id
from msdb.dbo.sysjobschedules sjs
INNER JOIN msdb.dbo.sysschedules ss
ON sjs.schedule_id = ss.schedule_id
AND ss.name NOT LIKE '%#SPEC#'
INNER JOIN msdb.dbo.sysjobs sj
ON sjs.job_id = sj.job_id
WHERE sj.name = N'DR92160 - Replication Check'
open c_schedules
FETCH NEXT FROM c_schedules into @schedule_id
while @@fetch_status = 0
begin
IF ((select COUNT(*) from msdb.dbo.sysjobschedules where schedule_id=@schedule_id) = 1)
EXEC msdb.dbo.sp_delete_schedule @schedule_id=@schedule_id, @force_delete = 1
FETCH NEXT FROM c_schedules into @schedule_id
end
close c_schedules
deallocate c_schedules
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'DR92160 - Replication Check')
EXEC msdb.dbo.sp_delete_job @job_name = N'DR92160 - Replication Check', @delete_unused_schedule=0
GO
/* Creation Job and Steps*/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'DBA-Monitoring' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'DBA-Monitoring'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
/* Add Job */
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'DR92160 - Replication Check',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'Vérifie un ensemble de points critiques de la réplication
18.07.2017 - FLA - Ajout du step de test de l''etat des souscriptions et de l''état des agents
09.02.2018 - FLA - Ajout du step de control des jobs à double
24.04.2018 - RTC - Ajout du test des commandes non distribuées et mise à jour du schedule
05.07.2019 - SPE - Modification schedule 7h00 -> 6h00
20.04.2020 - SPE - Modifications pour ajout monitoring Nagios
17.03.2022 - FLA : Change DBA mail',
@category_name=N'DBA-Monitoring',
@start_step_id=1,
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Check all steps',
@step_id=2,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=4,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'EXEC [dbo].[Replication_Check] @in_CheckType = 0, @in_Email = 1',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step for success',
@step_id=3,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=4,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */
',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send email KO',
@step_id=4,
@cmdexec_success_code=0,
@on_success_action=2,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec Get_Job_Error_Info @in_JobName = ''DR92160 - Replication Check'', @in_Recipients = ''DBA_operator''
',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Standard Schedule */
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'DR92160-DR',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=4,
@freq_subday_interval=30,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20160921,
@active_end_date=99991231,
@active_start_time=60000,
@active_end_time=180000
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Attach existing specific schedule for job */
declare @enabled_schedule int,
@schedule_name nvarchar(50)
declare c_schedules cursor local forward_only static for
select enabled, name
from msdb.dbo.sysschedules
where name LIKE 'DR92160%'
and name LIKE '%#SPEC#'
open c_schedules
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
while @@fetch_status = 0
begin
EXEC @ReturnCode = msdb.dbo.sp_attach_schedule @job_id = @jobId, @schedule_name=@schedule_name
IF(@enabled_schedule = 1)
begin
SET @schedule_name = SUBSTRING(@schedule_name,0,LEN(@schedule_name)-5)
IF EXISTS (select name from msdb.dbo.sysschedules where name = @schedule_name)
EXEC @ReturnCode = msdb.dbo.sp_update_schedule @name=@schedule_name, @enabled=0
end
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
end
close c_schedules
deallocate c_schedules
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

View File

@@ -0,0 +1,209 @@
/****************************************************************/
/********** SUPPRESSION TEMPORAIRE DES ANCIENS JOBS ************/
/****************************************************************/
USE [msdb]
GO
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'DR92050 - Long Running Jobs')
EXEC msdb.dbo.sp_delete_job @job_name=N'DR92050 - Long Running Jobs', @delete_unused_schedule=1
GO
/* Drop existing standard schedule for job */
declare @schedule_id int
declare c_schedules cursor local forward_only static for
select ss.schedule_id
from msdb.dbo.sysjobschedules sjs
INNER JOIN msdb.dbo.sysschedules ss
ON sjs.schedule_id = ss.schedule_id
AND ss.name NOT LIKE '%#SPEC#'
INNER JOIN msdb.dbo.sysjobs sj
ON sjs.job_id = sj.job_id
WHERE sj.name = N'DR92240 - Long Running Jobs'
open c_schedules
FETCH NEXT FROM c_schedules into @schedule_id
while @@fetch_status = 0
begin
IF ((select COUNT(*) from msdb.dbo.sysjobschedules where schedule_id=@schedule_id) = 1)
EXEC msdb.dbo.sp_delete_schedule @schedule_id=@schedule_id, @force_delete = 1
FETCH NEXT FROM c_schedules into @schedule_id
end
close c_schedules
deallocate c_schedules
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'DR92240 - Long Running Jobs')
EXEC msdb.dbo.sp_delete_job @job_name = N'DR92240 - Long Running Jobs', @delete_unused_schedule=0
GO
/* Creation Job and Steps*/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'DBA-Monitoring' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'DBA-Monitoring'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
/* Add Job */
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'DR92240 - Long Running Jobs',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'25.06.2015/LPE: Check long running SQL Agent Jobs
03.08.2015 - LPO #TFS28342# Script unique pour AMAVITA, SUNSTORE, AAI',
@category_name=N'DBA-Monitoring',
@start_step_id=1,
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Check long running jobs',
@step_id=2,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=4,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'EXEC [dbo].[mon_Check_Long_Running_Jobs]',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step for success',
@step_id=3,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=4,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send email KO',
@step_id=4,
@cmdexec_success_code=0,
@on_success_action=2,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* empty*/',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Standard Schedule */
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'DR92240-DR',
@enabled=1,
@freq_type=8,
@freq_interval=62,
@freq_subday_type=4,
@freq_subday_interval=5,
@freq_relative_interval=0,
@freq_recurrence_factor=1,
@active_start_date=20150625,
@active_end_date=99991231,
@active_start_time=70000,
@active_end_time=193000
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Attach existing specific schedule for job */
declare @enabled_schedule int,
@schedule_name nvarchar(50)
declare c_schedules cursor local forward_only static for
select enabled, name
from msdb.dbo.sysschedules
where name LIKE 'DR92240%'
and name LIKE '%#SPEC#'
open c_schedules
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
while @@fetch_status = 0
begin
EXEC @ReturnCode = msdb.dbo.sp_attach_schedule @job_id = @jobId, @schedule_name=@schedule_name
IF(@enabled_schedule = 1)
begin
SET @schedule_name = SUBSTRING(@schedule_name,0,LEN(@schedule_name)-5)
IF EXISTS (select name from msdb.dbo.sysschedules where name = @schedule_name)
EXEC @ReturnCode = msdb.dbo.sp_update_schedule @name=@schedule_name, @enabled=0
end
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
end
close c_schedules
deallocate c_schedules
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

View File

@@ -0,0 +1,201 @@
/* Drop existing standard schedule for job */
declare @schedule_id int
declare c_schedules cursor local forward_only static for
select ss.schedule_id
from msdb.dbo.sysjobschedules sjs
INNER JOIN msdb.dbo.sysschedules ss
ON sjs.schedule_id = ss.schedule_id
AND ss.name NOT LIKE '%#SPEC#'
INNER JOIN msdb.dbo.sysjobs sj
ON sjs.job_id = sj.job_id
WHERE sj.name = N'DR92110 - Check Broker Queues'
open c_schedules
FETCH NEXT FROM c_schedules into @schedule_id
while @@fetch_status = 0
begin
IF ((select COUNT(*) from msdb.dbo.sysjobschedules where schedule_id=@schedule_id) = 1)
EXEC msdb.dbo.sp_delete_schedule @schedule_id=@schedule_id, @force_delete = 1
FETCH NEXT FROM c_schedules into @schedule_id
end
close c_schedules
deallocate c_schedules
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'DR92110 - Check Broker Queues')
EXEC msdb.dbo.sp_delete_job @job_name = N'DR92110 - Check Broker Queues', @delete_unused_schedule=0
GO
/* Creation Job and Steps*/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'DBA-Monitoring' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'DBA-Monitoring'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
/* Add Job */
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'DR92110 - Check Broker Queues',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'Vérification si les queues ne sont pas disabled (poison messages)
07.06.2016 - FLA - Création
17.03.2022 - FLA : Change DBA mail',
@category_name=N'DBA-Monitoring',
@start_step_id=1,
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */',
@database_name=N'master',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Check all Broker queues',
@step_id=2,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=4,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'EXEC [dbo].[mon_Check_Broker_queues]',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Empty step for success',
@step_id=3,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=4,
@on_fail_step_id=4,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'/* Empty step */
exec Get_Job_Error_Info @in_JobName = ''DR92110 - Check Broker Queues'', @in_Recipients = ''DBA_operator''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Step */
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send email KO',
@step_id=4,
@cmdexec_success_code=0,
@on_success_action=2,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec Get_Job_Error_Info @in_JobName = ''DR92110 - Check Broker Queues'', @in_Recipients = ''DBA_operator''',
@database_name=N'HCITools',
@output_file_name=NULL,
@flags=0,
@database_user_name=NULL,
@server=NULL,
@additional_parameters=NULL,
@proxy_id=NULL,
@proxy_name=NULL
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Add Standard Schedule */
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'DR92110-DR',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=4,
@freq_subday_interval=15,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20160607,
@active_end_date=99991231,
@active_start_time=0,
@active_end_time=235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/* Attach existing specific schedule for job */
declare @enabled_schedule int,
@schedule_name nvarchar(50)
declare c_schedules cursor local forward_only static for
select enabled, name
from msdb.dbo.sysschedules
where name LIKE 'DR92110%'
and name LIKE '%#SPEC#'
open c_schedules
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
while @@fetch_status = 0
begin
EXEC @ReturnCode = msdb.dbo.sp_attach_schedule @job_id = @jobId, @schedule_name=@schedule_name
IF(@enabled_schedule = 1)
begin
SET @schedule_name = SUBSTRING(@schedule_name,0,LEN(@schedule_name)-5)
IF EXISTS (select name from msdb.dbo.sysschedules where name = @schedule_name)
EXEC @ReturnCode = msdb.dbo.sp_update_schedule @name=@schedule_name, @enabled=0
end
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
FETCH NEXT FROM c_schedules into @enabled_schedule, @schedule_name
end
close c_schedules
deallocate c_schedules
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

Some files were not shown because too many files have changed in this diff Show More