418 lines
13 KiB
Transact-SQL
418 lines
13 KiB
Transact-SQL
USE [HCITools]
|
|
GO
|
|
|
|
IF NOT EXISTS (SELECT * FROM master.sys.schemas WHERE name = N'dba')
|
|
BEGIN
|
|
EXEC('CREATE SCHEMA [dba] AUTHORIZATION [dbo]')
|
|
END
|
|
GO
|
|
|
|
/* Creation de la table DBA_trace_flags */
|
|
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dba].[DBA_trace_flags]') AND type in (N'U'))
|
|
BEGIN
|
|
|
|
CREATE TABLE [dba].[DBA_trace_flags](
|
|
[DBA_trace_flags_ID] [int] NOT NULL,
|
|
[DTF_name] [varchar](MAX) NOT NULL,
|
|
[DTF_lowerstVersion] [smallint] NOT NULL,
|
|
[DTF_highestVersion] [smallint] NULL,
|
|
[DTF_active] [bit] NOT NULL
|
|
CONSTRAINT [PK_DBA_trace_flags] PRIMARY KEY CLUSTERED
|
|
(
|
|
[DBA_trace_flags_ID] ASC
|
|
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
|
|
) ON [PRIMARY]
|
|
|
|
END
|
|
GO
|
|
|
|
|
|
|
|
/* DEBUT CONFIGURATIONS DES TRACEFLAGS ------------------------------------------------------------------------------*/
|
|
|
|
/*
|
|
10 = SQL 2008
|
|
11 = SQL 2012
|
|
12 = SQL 2014
|
|
13 = SQL 2016
|
|
14 = SQL 2017
|
|
15 = SQL 2019
|
|
|
|
In SQL Managed instance, only these trace flags are compatible: 460, 2301, 2389, 2390, 2453, 2467, 7471, 8207, 9389, 10316, and 11024 */
|
|
IF (SERVERPROPERTY('EngineEdition') <> 8)
|
|
BEGIN
|
|
|
|
/* TraceFlag 1117 Grow All Files in a FileGroup Equally */
|
|
IF NOT EXISTS(SELECT 1 FROM [dba].[DBA_trace_flags] WHERE DBA_trace_flags_ID =1117)
|
|
BEGIN
|
|
INSERT INTO [dba].[DBA_trace_flags](DBA_trace_flags_ID,DTF_name,DTF_lowerstVersion,DTF_highestVersion,DTF_active)
|
|
VALUES(1117,'Grow All Files in a FileGroup Equally',10,12,1)
|
|
END
|
|
|
|
/* TraceFlag 3226 Suppress all successful backups in SQL server error log */
|
|
IF NOT EXISTS(SELECT 1 FROM [dba].[DBA_trace_flags] WHERE DBA_trace_flags_ID =3226)
|
|
BEGIN
|
|
INSERT INTO [dba].[DBA_trace_flags](DBA_trace_flags_ID,DTF_name,DTF_lowerstVersion,DTF_highestVersion,DTF_active)
|
|
VALUES(3226,'Suppress all successful backups in SQL server error log',10,NULL,1)
|
|
END
|
|
|
|
/* TraceFlag 9481 Set the Query Optimizer cardinality estimation model to 70 (LEGACY) */
|
|
IF NOT EXISTS(SELECT 1 FROM [dba].[DBA_trace_flags] WHERE DBA_trace_flags_ID =9481)
|
|
BEGIN
|
|
INSERT INTO [dba].[DBA_trace_flags](DBA_trace_flags_ID,DTF_name,DTF_lowerstVersion,DTF_highestVersion,DTF_active)
|
|
VALUES(9481,'Set the Query Optimizer cardinality estimation model to 70 (LEGACY)',12,12,1)
|
|
END
|
|
|
|
END
|
|
|
|
/* FIN CONFIGURATIONS DES TRACEFLAGS --------------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
|
|
/* CREATION DE LA PROCEDURE STOCKEE */
|
|
|
|
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dba].[DBA_Set_All_TraceFlags]') AND type in (N'P', N'PC'))
|
|
DROP PROCEDURE [dba].[DBA_Set_All_TraceFlags]
|
|
GO
|
|
|
|
SET ANSI_NULLS ON
|
|
GO
|
|
|
|
SET QUOTED_IDENTIFIER ON
|
|
GO
|
|
|
|
CREATE PROCEDURE [dba].[DBA_Set_All_TraceFlags]
|
|
AS
|
|
/*=============================================================================
|
|
|
|
Explication du traitement realise par la SP
|
|
-------------------------------------------
|
|
La SP va rechercher la configuration des traceflags par rapport a la version actuelle du moteur SQL et configure le necessaire.
|
|
|
|
Contexte d'utilisation
|
|
----------------------
|
|
Appelé depuis le job _94010 - Set Traceflags
|
|
|
|
Parametres
|
|
----------
|
|
|
|
Creation : 16.03.21 / SPE
|
|
|
|
Modifications :
|
|
|
|
=============================================================================*/
|
|
|
|
SET NOCOUNT ON;
|
|
|
|
/*------------------- Declaration des variables --------------------*/
|
|
|
|
DECLARE @currentSQLVersion SMALLINT,
|
|
@lowestSQLVersion SMALLINT,
|
|
@highestSQLVersion SMALLINT,
|
|
@traceFlagNumber INT,
|
|
@sqlstmt VARCHAR(MAX)
|
|
|
|
|
|
/*------------ Affectation des parametres aux variables ------------*/
|
|
|
|
SET @currentSQLVersion = SUBSTRING(CAST(SERVERPROPERTY('ProductVersion') AS NVARCHAR(128)), 1, CHARINDEX('.', CAST(SERVERPROPERTY('ProductVersion') AS NVARCHAR(128))) - 1 )
|
|
|
|
|
|
/*-------------------------- Traitement ---------------------------*/
|
|
|
|
BEGIN TRY
|
|
|
|
DECLARE c_traceflags CURSOR LOCAL FORWARD_ONLY STATIC FOR
|
|
SELECT DBA_trace_flags_ID,DTF_lowerstVersion,DTF_highestVersion
|
|
FROM [dba].[DBA_trace_flags]
|
|
WHERE DTF_active = 1
|
|
;
|
|
OPEN c_traceflags
|
|
;
|
|
FETCH NEXT FROM c_traceflags
|
|
INTO @traceFlagNumber,@lowestSQLVersion,@highestSQLVersion
|
|
;
|
|
WHILE @@fetch_status = 0
|
|
BEGIN
|
|
|
|
IF ((SERVERPROPERTY('EngineEdition') = 8) and (@traceFlagNumber IN (460,2301,2389,2390,2453,2467,7471,8207,9389,10316,11024 ))) OR (SERVERPROPERTY('EngineEdition') <> 8)
|
|
BEGIN
|
|
|
|
IF @currentSQLVersion >= @lowestSQLVersion
|
|
BEGIN
|
|
IF @currentSQLVersion <= isnull(@highestSQLVersion,9999)
|
|
BEGIN
|
|
SET @sqlstmt = 'DBCC TRACEON (' + convert(VARCHAR,@traceFlagNumber) + ', -1) WITH NO_INFOMSGS;'
|
|
EXEC (@sqlstmt)
|
|
END
|
|
END
|
|
|
|
END
|
|
|
|
FETCH NEXT FROM c_traceflags
|
|
INTO @traceFlagNumber,@lowestSQLVersion,@highestSQLVersion
|
|
;
|
|
END
|
|
;
|
|
CLOSE c_traceflags
|
|
;
|
|
DEALLOCATE c_traceflags
|
|
|
|
|
|
|
|
/*---------------------- Traitement des erreurs ----------------------*/
|
|
END TRY
|
|
BEGIN CATCH
|
|
|
|
/* Traitement des erreurs (avec RaiseError) */
|
|
EXEC dbo.get_Error_Info @in_RaiseError = 1
|
|
|
|
END CATCH
|
|
GO
|
|
|
|
|
|
|
|
|
|
/* CREATION DU JOB SQL */
|
|
|
|
USE [msdb]
|
|
GO
|
|
|
|
/****************************************************************/
|
|
/********** SUPPRESSION TEMPORAIRE DES ANCIENS JOBS ************/
|
|
/****************************************************************/
|
|
|
|
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'_90210 - Set Traceflag 1117')
|
|
EXEC msdb.dbo.sp_delete_job @job_name=N'_90210 - Set Traceflag 1117', @delete_unused_schedule=1
|
|
GO
|
|
|
|
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'_94010 - Set Traceflag 1117')
|
|
EXEC msdb.dbo.sp_delete_job @job_name=N'_94010 - Set Traceflag 1117', @delete_unused_schedule=1
|
|
GO
|
|
|
|
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'_94010 - Set Traceflag 1117 and 3226')
|
|
EXEC msdb.dbo.sp_delete_job @job_name=N'_94010 - Set Traceflag 1117 and 3226', @delete_unused_schedule=1
|
|
GO
|
|
|
|
/* Creation des categories manquantes si besoin*/
|
|
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'DBA-Configuration' AND category_class=1)
|
|
BEGIN
|
|
EXEC msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'DBA-Configuration'
|
|
END
|
|
|
|
/*=============================================================================
|
|
|
|
Job utilise avec la table DBA_trace_flags pour les configurations sur les traceflags selon la version SQL
|
|
|
|
Création : 16.03.2021 / SPE
|
|
|
|
Modifications :
|
|
|
|
=============================================================================*/
|
|
/* 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'_94010 - Set Traceflags'
|
|
|
|
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'_94010 - Set Traceflags')
|
|
EXEC msdb.dbo.sp_delete_job @job_name = N'_94010 - Set Traceflags', @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-Configuration' AND category_class=1)
|
|
BEGIN
|
|
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'DBA-Configuration'
|
|
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'_94010 - Set Traceflags',
|
|
@enabled=1,
|
|
@notify_level_eventlog=0,
|
|
@notify_level_email=0,
|
|
@notify_level_netsend=0,
|
|
@notify_level_page=0,
|
|
@delete_level=0,
|
|
@description=N'Use table DBA_trace_flags to set all SQL traceflags',
|
|
@category_name=N'DBA-Configuration',
|
|
@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'Set ALL Traceflags',
|
|
@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 [dba].[DBA_Set_All_TraceFlags]',
|
|
@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 = ''_94010 - Set Traceflags'', @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 = ''_94010 - Set Traceflags'', @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'_94010',
|
|
@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=20150714,
|
|
@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 '_94010%'
|
|
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
|
|
|
|
|
|
|
|
/* EXECUTION DU JOB POUR ACTIVER LES TRACEFLAGS */
|
|
|
|
EXEC dbo.sp_start_job @job_name = N'_94010 - Set Traceflags'
|
|
GO
|