@@ -34,10 +34,11 @@ ALTER PROCEDURE [dbo].[sp_Blitz]
3434WITH RECOMPILE
3535AS
3636 SET NOCOUNT ON ;
37+ SET STATISTICS XML OFF ;
3738 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
3839
3940
40- SELECT @Version = ' 8.03 ' , @VersionDate = ' 20210420 ' ;
41+ SELECT @Version = ' 8.04 ' , @VersionDate = ' 20210530 ' ;
4142 SET @OutputType = UPPER (@OutputType);
4243
4344 IF (@VersionCheckMode = 1 )
428429 AND db_id (' rdsadmin' ) IS NOT NULL
429430 AND EXISTS (SELECT * FROM master .sys .all_objects WHERE name IN (' rds_startup_tasks' , ' rds_help_revlogin' , ' rds_hexadecimal' , ' rds_failover_tracking' , ' rds_database_tracking' , ' rds_track_change' ))
430431 BEGIN
431- INSERT INTO #SkipChecks (CheckID) VALUES (6 );
432- INSERT INTO #SkipChecks (CheckID) VALUES (29 );
433- INSERT INTO #SkipChecks (CheckID) VALUES (30 );
434- INSERT INTO #SkipChecks (CheckID) VALUES (31 );
435- INSERT INTO #SkipChecks (CheckID) VALUES (40 ); /* TempDB only has one data file */
436- INSERT INTO #SkipChecks (CheckID) VALUES (57 );
437- INSERT INTO #SkipChecks (CheckID) VALUES (59 );
438- INSERT INTO #SkipChecks (CheckID) VALUES (61 );
439- INSERT INTO #SkipChecks (CheckID) VALUES (62 );
440- INSERT INTO #SkipChecks (CheckID) VALUES (68 );
441- INSERT INTO #SkipChecks (CheckID) VALUES (69 );
442- INSERT INTO #SkipChecks (CheckID) VALUES (73 );
443- INSERT INTO #SkipChecks (CheckID) VALUES (79 );
444- INSERT INTO #SkipChecks (CheckID) VALUES (92 );
445- INSERT INTO #SkipChecks (CheckID) VALUES (94 );
446- INSERT INTO #SkipChecks (CheckID) VALUES (96 );
447- INSERT INTO #SkipChecks (CheckID) VALUES (98 );
432+ INSERT INTO #SkipChecks (CheckID) VALUES (6 ); /* Security - Jobs Owned By Users per https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/issues/1919 */
433+ INSERT INTO #SkipChecks (CheckID) VALUES (29 ); /* tables in model database created by users - not allowed */
434+ INSERT INTO #SkipChecks (CheckID) VALUES (40 ); /* TempDB only has one data file in RDS */
435+ INSERT INTO #SkipChecks (CheckID) VALUES (62 ); /* Database compatibility level - cannot change in RDS */
436+ INSERT INTO #SkipChecks (CheckID) VALUES (68 ); /* Check for the last good DBCC CHECKDB date - can't run DBCC DBINFO() */
437+ INSERT INTO #SkipChecks (CheckID) VALUES (69 ); /* High VLF check - requires DBCC LOGINFO permission */
438+ INSERT INTO #SkipChecks (CheckID) VALUES (73 ); /* No Failsafe Operator Configured check */
439+ INSERT INTO #SkipChecks (CheckID) VALUES (92 ); /* Drive info check - requires xp_Fixeddrives permission */
448440 INSERT INTO #SkipChecks (CheckID) VALUES (100 ); /* Remote DAC disabled */
449- INSERT INTO #SkipChecks (CheckID) VALUES (123 );
450- INSERT INTO #SkipChecks (CheckID) VALUES (177 );
451- INSERT INTO #SkipChecks (CheckID) VALUES (180 ); /* 180/181 are maintenance plans */
452- INSERT INTO #SkipChecks (CheckID) VALUES (181 );
453- INSERT INTO #SkipChecks (CheckID) VALUES (184 ); /* xp_readerrorlog checking for IFI */
454- INSERT INTO #SkipChecks (CheckID) VALUES (211 ); /* xp_regread checking for power saving */
455- INSERT INTO #SkipChecks (CheckID) VALUES (212 ); /* xp_regread */
456- INSERT INTO #SkipChecks (CheckID) VALUES (219 );
441+ INSERT INTO #SkipChecks (CheckID) VALUES (177 ); /* Disabled Internal Monitoring Features check - requires dm_server_registry access */
442+ INSERT INTO #SkipChecks (CheckID) VALUES (180 ); /* 180/181 are maintenance plans checks - Maint plans not available in RDS*/
443+ INSERT INTO #SkipChecks (CheckID) VALUES (181 ); /* Find repetitive maintenance tasks*/
444+
445+ -- can check errorlog using rdsadmin.dbo.rds_read_error_log, so allow this check
446+ -- INSERT INTO #SkipChecks (CheckID) VALUES (193); /* xp_readerrorlog checking for IFI */
447+
448+ INSERT INTO #SkipChecks (CheckID) VALUES (211 ); /* xp_regread not allowed - checking for power saving */
449+ INSERT INTO #SkipChecks (CheckID) VALUES (212 ); /* xp_regread not allowed - checking for additional instances */
457450 INSERT INTO #SkipChecks (CheckID) VALUES (2301 ); /* sp_validatelogins called by Invalid login defined with Windows Authentication */
451+
452+ -- Following are skipped due to limited permissions in msdb/SQLAgent in RDS
453+ INSERT INTO #SkipChecks (CheckID) VALUES (30 ); /* SQL Server Agent alerts not configured */
454+ INSERT INTO #SkipChecks (CheckID) VALUES (31 ); /* check whether we have NO ENABLED operators */
455+ INSERT INTO #SkipChecks (CheckID) VALUES (57 ); /* SQL Agent Job Runs at Startup */
456+ INSERT INTO #SkipChecks (CheckID) VALUES (59 ); /* Alerts Configured without Follow Up */
457+ INSERT INTO #SkipChecks (CheckID) VALUES (61 ); /* SQL Server Agent alerts do not exist for severity levels 19 through 25*/
458+ INSERT INTO #SkipChecks (CheckID) VALUES (79 ); /* Shrink Database Job check */
459+ INSERT INTO #SkipChecks (CheckID) VALUES (94 ); /* job failure without operator notification check */
460+ INSERT INTO #SkipChecks (CheckID) VALUES (96 ); /* Agent alerts for corruption */
461+ INSERT INTO #SkipChecks (CheckID) VALUES (98 ); /* check for disabled alerts */
462+ INSERT INTO #SkipChecks (CheckID) VALUES (123 ); /* Agent Jobs Starting Simultaneously */
463+ INSERT INTO #SkipChecks (CheckID) VALUES (219 ); /* check for alerts that do NOT include event descriptions in their outputs via email/pager/net-send */
458464 INSERT INTO #BlitzResults
459465 ( CheckID ,
460466 Priority ,
@@ -3248,11 +3254,6 @@ AS
32483254 ' The job ' + [name]
32493255 + ' has not been set up to notify an operator if it fails.' AS Details
32503256 FROM msdb.[dbo].[sysjobs] j
3251- INNER JOIN ( SELECT DISTINCT
3252- [job_id]
3253- FROM [msdb].[dbo].[sysjobschedules]
3254- WHERE next_run_date > 0
3255- ) s ON j .job_id = s .job_id
32563257 WHERE j .enabled = 1
32573258 AND j .notify_email_operator_id = 0
32583259 AND j .notify_netsend_operator_id = 0
@@ -8130,16 +8131,30 @@ IF @ProductVersionMajor >= 10 AND NOT EXISTS ( SELECT 1
81308131 */
81318132 IF NOT EXISTS ( SELECT 1
81328133 FROM #SkipChecks
8133- WHERE DatabaseName IS NULL AND CheckID = 184 )
8134- AND (@ProductVersionMajor >= 13 ) OR (@ProductVersionMajor = 12 AND @ProductVersionMinor >= 5000 )
8134+ WHERE DatabaseName IS NULL AND CheckID = 193 )
8135+ AND (( @ProductVersionMajor >= 13 ) OR (@ProductVersionMajor = 12 AND @ProductVersionMinor >= 5000 ) )
81358136 BEGIN
81368137
8137- IF @Debug IN (1 , 2 ) RAISERROR (' Running CheckId [%d].' , 0 , 1 , 184 ) WITH NOWAIT ;
8138+ IF @Debug IN (1 , 2 ) RAISERROR (' Running CheckId [%d].' , 0 , 1 , 193 ) WITH NOWAIT ;
81388139
8139- INSERT INTO #ErrorLog
8140- EXEC sys .xp_readerrorlog 0 , 1 , N ' Database Instant File Initialization: enabled' ;
8140+ -- If this is Amazon RDS, use rdsadmin.dbo.rds_read_error_log
8141+ IF LEFT (CAST (SERVERPROPERTY (' ComputerNamePhysicalNetBIOS' ) AS VARCHAR (8000 )), 8 ) = ' EC2AMAZ-'
8142+ AND LEFT (CAST (SERVERPROPERTY (' MachineName' ) AS VARCHAR (8000 )), 8 ) = ' EC2AMAZ-'
8143+ AND LEFT (CAST (SERVERPROPERTY (' ServerName' ) AS VARCHAR (8000 )), 8 ) = ' EC2AMAZ-'
8144+ AND db_id (' rdsadmin' ) IS NOT NULL
8145+ AND EXISTS (SELECT * FROM master .sys .all_objects WHERE name IN (' rds_startup_tasks' , ' rds_help_revlogin' , ' rds_hexadecimal' , ' rds_failover_tracking' , ' rds_database_tracking' , ' rds_track_change' ))
8146+ BEGIN
8147+ INSERT INTO #ErrorLog
8148+ EXEC rdsadmin .dbo .rds_read_error_log 0 , 1 , N ' Database Instant File Initialization: enabled' ;
8149+ END
8150+ ELSE
8151+ BEGIN
8152+ INSERT INTO #ErrorLog
8153+ EXEC sys .xp_readerrorlog 0 , 1 , N ' Database Instant File Initialization: enabled' ;
8154+ END
81418155
81428156 IF @@ROWCOUNT > 0
8157+ begin
81438158 INSERT INTO #BlitzResults
81448159 ( CheckID ,
81458160 [Priority] ,
@@ -8155,6 +8170,37 @@ IF @ProductVersionMajor >= 10 AND NOT EXISTS ( SELECT 1
81558170 ' Instant File Initialization Enabled' AS [Finding] ,
81568171 ' https://www.brentozar.com/go/instant' AS [URL] ,
81578172 ' The service account has the Perform Volume Maintenance Tasks permission.' ;
8173+ end
8174+ else -- if version of sql server has instant_file_initialization_enabled column in dm_server_services, check that too
8175+ -- in the event the error log has been cycled and the startup messages are not in the current error log
8176+ begin
8177+ if EXISTS ( SELECT *
8178+ FROM sys .all_objects o
8179+ INNER JOIN sys .all_columns c ON o .object_id = c .object_id
8180+ WHERE o .name = ' dm_server_services'
8181+ AND c .name = ' instant_file_initialization_enabled' )
8182+ begin
8183+ INSERT INTO #BlitzResults
8184+ ( CheckID ,
8185+ [Priority] ,
8186+ FindingsGroup ,
8187+ Finding ,
8188+ URL ,
8189+ Details
8190+ )
8191+ SELECT
8192+ 193 AS [CheckID] ,
8193+ 250 AS [Priority] ,
8194+ ' Server Info' AS [FindingsGroup] ,
8195+ ' Instant File Initialization Enabled' AS [Finding] ,
8196+ ' https://www.brentozar.com/go/instant' AS [URL] ,
8197+ ' The service account has the Perform Volume Maintenance Tasks permission.'
8198+ where exists (select 1 FROM sys .dm_server_services
8199+ WHERE instant_file_initialization_enabled = ' Y'
8200+ AND filename LIKE ' %sqlservr.exe%' )
8201+ OPTION (RECOMPILE );
8202+ end ;
8203+ end ;
81588204 END ;
81598205
81608206 /* Server Info - Instant File Initialization Not Enabled - Check 192 - SQL Server 2016 SP1 and newer */
0 commit comments