Explorar el Código

Added 2016 SP1 support

Pedro Lopes hace 9 años
padre
commit
8e608dcef4
Se han modificado 2 ficheros con 83 adiciones y 49 borrados
  1. 1 0
      BPCheck/Changelog.txt
  2. 82 49
      BPCheck/Check_BP_Servers.sql

+ 1 - 0
BPCheck/Changelog.txt

@@ -320,3 +320,4 @@ v2.1.2 - 10/25/2016 - Added incremental stats as default to Database Options che
 v2.1.3 - 10/26/2016 - Fixed conversion issue with Account checks;
 			Fixed negative CPU usage in avg cpu usage last 2h check.
 v2.1.4 - 11/08/2016 - Fixed autogrows in last 72h shown in MB instead of KB.
+v2.1.5 - 11/17/2016 - Added support for SQLS erver 2016 SP1 (Enterprise_features_usage, LPIM and IFI checks).

+ 82 - 49
BPCheck/Check_BP_Servers.sql

@@ -378,6 +378,7 @@ v2.1.2 - 10/25/2016 - Added incremental stats as default to Database Options che
 v2.1.3 - 10/26/2016 - Fixed conversion issue with Account checks;
 						Fixed negative CPU usage in avg cpu usage last 2h check.
 v2.1.4 - 11/08/2016 - Fixed autogrows in last 72h shown in MB instead of KB.
+v2.1.5 - 11/17/2016 - Added support for SQLS erver 2016 SP1 (Enterprise_features_usage, LPIM and IFI checks).
 
 PURPOSE: Checks SQL Server in scope for some of most common skewed Best Practices. Valid from SQL Server 2005 onwards.
 
@@ -1614,7 +1615,7 @@ SELECT ''' + @dbname + ''' AS [DBName], feature_name FROM sys.dm_db_persisted_sk
 		END
 	END;
 	
-	IF @sqlmajorver > 10 AND @sqlmajorver < 13 AND @IsHadrEnabled = 1
+	IF @sqlmajorver > 10 AND ((@sqlmajorver = 13 AND @sqlbuild < 4000) OR @sqlmajorver < 13) AND @IsHadrEnabled = 1
 	BEGIN
 		INSERT INTO #tblPerSku
 		SELECT NULL, 'Always_On' AS feature_name
@@ -1626,6 +1627,12 @@ SELECT ''' + @dbname + ''' AS [DBName], feature_name FROM sys.dm_db_persisted_sk
 		SELECT DISTINCT d.name, 'DB_Snapshot' AS feature_name FROM master.sys.databases d (NOLOCK) WHERE database_id NOT IN (2,3) AND source_database_id IS NOT NULL
 	END;
 	
+	IF (@sqlmajorver = 13 AND @sqlbuild >= 4000) OR @sqlmajorver > 13
+	BEGIN
+		DELETE FROM #tblPerSku
+		WHERE feature_name IN ('ColumnStoreIndex','InMemoryOLTP')
+	END;
+	
 	IF (SELECT COUNT([Feature_Name]) FROM #tblPerSku) > 0
 	BEGIN
 		SELECT 'Information' AS [Category], 'Enterprise_features_usage' AS [Check], '[INFORMATION: Some databases are using Enterprise only features]' AS [Comment]
@@ -2479,7 +2486,14 @@ END;
 --------------------------------------------------------------------------------------------------------------------------------
 RAISERROR (N'  |-Starting LPIM', 10, 1) WITH NOWAIT
 DECLARE @lpim bit, @lognumber int, @logcount int
-IF @sqlmajorver > 9
+
+IF ((@sqlmajorver = 13 AND @sqlbuild >= 4000) OR @sqlmajorver > 13)
+BEGIN
+	SET @sqlcmd = N'SELECT @lpimOUT = CASE WHEN sql_memory_model = 2 THEN 1 ELSE 0 END FROM sys.dm_os_sys_info';
+	SET @params = N'@lpimOUT bit OUTPUT';
+	EXECUTE sp_executesql @sqlcmd, @params, @lpimOUT=@lpim OUTPUT;
+END
+ELSE IF ((@sqlmajorver = 13 AND @sqlbuild < 4000) OR @sqlmajorver < 13)
 BEGIN
 	SET @sqlcmd = N'SELECT @lpimOUT = CASE WHEN locked_page_allocations_kb > 0 THEN 1 ELSE 0 END FROM sys.dm_os_process_memory (NOLOCK)'
 	SET @params = N'@lpimOUT bit OUTPUT';
@@ -4723,7 +4737,7 @@ SELECT 'Instance_checks' AS [Category], 'Recommended_Build' AS [Check],
 			OR (@sqlmajorver = 10 AND @sqlminorver = 50 AND @sqlbuild < 6000)
 			OR (@sqlmajorver = 11 AND @sqlbuild < 6020)
 			OR (@sqlmajorver = 12 AND @sqlbuild < 5000)
-			OR (@sqlmajorver = 13 AND @sqlbuild < 1601)
+			OR (@sqlmajorver = 13 AND @sqlbuild < 4000)
 		THEN '[WARNING: current service pack has been superseded in the current SQL Server version. Install the latest service pack as soon as possible.]'
 		ELSE '[OK]'
 	END AS [Deviation], 
@@ -5728,70 +5742,89 @@ END;
 -- IFI subsection
 --------------------------------------------------------------------------------------------------------------------------------
 RAISERROR (N'  |-Starting IFI', 10, 1) WITH NOWAIT
-IF @allow_xpcmdshell = 1
+DECLARE @ifi bit, @IFIStatus NVARCHAR(256)
+IF ((@sqlmajorver = 13 AND @sqlbuild < 4000) OR @sqlmajorver < 13)
 BEGIN
-	DECLARE @ifi bit
-	IF ISNULL(IS_SRVROLEMEMBER(N'sysadmin'), 0) = 1 -- Is sysadmin
-		OR ((ISNULL(IS_SRVROLEMEMBER(N'sysadmin'), 0) <> 1 
-			AND (SELECT COUNT(credential_id) FROM sys.credentials WHERE name = '##xp_cmdshell_proxy_account##') > 0)) -- Is not sysadmin but proxy account exists
-		OR ((ISNULL(IS_SRVROLEMEMBER(N'sysadmin'), 0) <> 1 
-			AND (SELECT COUNT([name]) FROM @permstbl WHERE [name] = 'xp_cmdshell') > 0))
+	IF @allow_xpcmdshell = 1
 	BEGIN
-		RAISERROR ('    |-Configuration options set for IFI check', 10, 1) WITH NOWAIT
-		SELECT @sao = CAST([value] AS smallint) FROM sys.configurations (NOLOCK) WHERE [name] = 'show advanced options'
-		SELECT @xcmd = CAST([value] AS smallint) FROM sys.configurations (NOLOCK) WHERE [name] = 'xp_cmdshell'
-		IF @sao = 0
-		BEGIN
-			EXEC sp_configure 'show advanced options', 1; RECONFIGURE WITH OVERRIDE;
-		END
-		IF @xcmd = 0
+		IF ISNULL(IS_SRVROLEMEMBER(N'sysadmin'), 0) = 1 -- Is sysadmin
+			OR ((ISNULL(IS_SRVROLEMEMBER(N'sysadmin'), 0) <> 1 
+				AND (SELECT COUNT(credential_id) FROM sys.credentials WHERE name = '##xp_cmdshell_proxy_account##') > 0)) -- Is not sysadmin but proxy account exists
+			OR ((ISNULL(IS_SRVROLEMEMBER(N'sysadmin'), 0) <> 1 
+				AND (SELECT COUNT([name]) FROM @permstbl WHERE [name] = 'xp_cmdshell') > 0))
 		BEGIN
-			EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE WITH OVERRIDE;
-		END
-
-		BEGIN TRY
-			DECLARE @xp_cmdshell_output2 TABLE ([Output] VARCHAR (8000));
-			SET @CMD = ('whoami /priv')
-			INSERT INTO @xp_cmdshell_output2
-			EXEC master.dbo.xp_cmdshell @CMD;
-			
-			IF EXISTS (SELECT * FROM @xp_cmdshell_output2 WHERE [Output] LIKE '%SeManageVolumePrivilege%')
+			RAISERROR ('    |-Configuration options set for IFI check', 10, 1) WITH NOWAIT
+			SELECT @sao = CAST([value] AS smallint) FROM sys.configurations (NOLOCK) WHERE [name] = 'show advanced options'
+			SELECT @xcmd = CAST([value] AS smallint) FROM sys.configurations (NOLOCK) WHERE [name] = 'xp_cmdshell'
+			IF @sao = 0
 			BEGIN
-				SELECT 'Instance_checks' AS [Category], 'Instant_Initialization' AS [Check], '[OK]' AS [Deviation];
-				SET @ifi = 1;
+				EXEC sp_configure 'show advanced options', 1; RECONFIGURE WITH OVERRIDE;
 			END
-			ELSE
+			IF @xcmd = 0
 			BEGIN
-				SELECT 'Instance_checks' AS [Category], 'Instant_Initialization' AS [Check], '[WARNING: Instant File Initialization is disabled. This can impact data file autogrowth times]' AS [Deviation];
-				SET @ifi = 0
+				EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE WITH OVERRIDE;
 			END
-		END TRY
-		BEGIN CATCH
-			SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_MESSAGE() AS ErrorMessage;
-			SELECT @ErrorMessage = 'IFI subsection - Error raised in TRY block. ' + ERROR_MESSAGE()
-			RAISERROR (@ErrorMessage, 16, 1);
-		END CATCH
 
-		IF @xcmd = 0
-		BEGIN
-			EXEC sp_configure 'xp_cmdshell', 0; RECONFIGURE WITH OVERRIDE;
+			BEGIN TRY
+				DECLARE @xp_cmdshell_output2 TABLE ([Output] VARCHAR (8000));
+				SET @CMD = ('whoami /priv')
+				INSERT INTO @xp_cmdshell_output2
+				EXEC master.dbo.xp_cmdshell @CMD;
+				
+				IF EXISTS (SELECT * FROM @xp_cmdshell_output2 WHERE [Output] LIKE '%SeManageVolumePrivilege%')
+				BEGIN
+					SELECT 'Instance_checks' AS [Category], 'Instant_Initialization' AS [Check], '[OK]' AS [Deviation];
+					SET @ifi = 1;
+				END
+				ELSE
+				BEGIN
+					SELECT 'Instance_checks' AS [Category], 'Instant_Initialization' AS [Check], '[WARNING: Instant File Initialization is disabled. This can impact data file autogrowth times]' AS [Deviation];
+					SET @ifi = 0
+				END
+			END TRY
+			BEGIN CATCH
+				SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_MESSAGE() AS ErrorMessage;
+				SELECT @ErrorMessage = 'IFI subsection - Error raised in TRY block. ' + ERROR_MESSAGE()
+				RAISERROR (@ErrorMessage, 16, 1);
+			END CATCH
+
+			IF @xcmd = 0
+			BEGIN
+				EXEC sp_configure 'xp_cmdshell', 0; RECONFIGURE WITH OVERRIDE;
+			END
+			IF @sao = 0
+			BEGIN
+				EXEC sp_configure 'show advanced options', 0; RECONFIGURE WITH OVERRIDE;
+			END
 		END
-		IF @sao = 0
+		ELSE
 		BEGIN
-			EXEC sp_configure 'show advanced options', 0; RECONFIGURE WITH OVERRIDE;
+			RAISERROR('[WARNING: Only a sysadmin can run the "Instant Initialization" check. A regular user can also run this check if a xp_cmdshell proxy account exists. Bypassing check]', 16, 1, N'xp_cmdshellproxy')
+			RAISERROR('[WARNING: If not sysadmin, then must be a granted EXECUTE permissions on the following extended sprocs to run checks: xp_cmdshell. Bypassing check]', 16, 1, N'extended_sprocs')
+			--RETURN
 		END
 	END
 	ELSE
 	BEGIN
-		RAISERROR('[WARNING: Only a sysadmin can run the "Instant Initialization" check. A regular user can also run this check if a xp_cmdshell proxy account exists. Bypassing check]', 16, 1, N'xp_cmdshellproxy')
-		RAISERROR('[WARNING: If not sysadmin, then must be a granted EXECUTE permissions on the following extended sprocs to run checks: xp_cmdshell. Bypassing check]', 16, 1, N'extended_sprocs')
+		RAISERROR('  |- [INFORMATION: "Instant Initialization" check was skipped because xp_cmdshell was not allowed.]', 10, 1, N'disallow_xp_cmdshell')
 		--RETURN
 	END
 END
-ELSE
+ELSE IF ((@sqlmajorver = 13 AND @sqlbuild >= 4000) OR @sqlmajorver > 13)
 BEGIN
-	RAISERROR('  |- [INFORMATION: "Instant Initialization" check was skipped because xp_cmdshell was not allowed.]', 10, 1, N'disallow_xp_cmdshell')
-	--RETURN
+	SET @sqlcmd = N'SELECT @IFIStatusOUT = instant_file_initialization_enabled FROM sys.dm_server_services WHERE servicename LIKE ''SQL Server%'' AND servicename NOT LIKE ''SQL Server Agent%''';
+	SET @params = N'@IFIStatusOUT NVARCHAR(256) OUTPUT';
+	EXECUTE sp_executesql @sqlcmd, @params, @IFIStatusOUT=@IFIStatus OUTPUT;
+	IF @IFIStatus = 'Y'
+	BEGIN
+		SELECT 'Instance_checks' AS [Category], 'Instant_Initialization' AS [Check], '[OK]' AS [Deviation];
+		SET @ifi = 1;
+	END
+	ELSE
+	BEGIN
+		SELECT 'Instance_checks' AS [Category], 'Instant_Initialization' AS [Check], '[WARNING: Instant File Initialization is disabled. This can impact data file autogrowth times]' AS [Deviation];
+		SET @ifi = 0
+	END
 END;
 
 --------------------------------------------------------------------------------------------------------------------------------