Skip to content

Commit

Permalink
commit latest
Browse files Browse the repository at this point in the history
  • Loading branch information
nate-hughes committed Feb 16, 2021
1 parent f34c67f commit d9955f0
Show file tree
Hide file tree
Showing 15 changed files with 398 additions and 69 deletions.
19 changes: 19 additions & 0 deletions database-get-checkdb-history.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
DECLARE @default_trace_path VARCHAR(500)
,@tracefilename VARCHAR(500)
,@indx INT;

SET @default_trace_path = (SELECT path FROM sys.traces WHERE is_default = 1);
SET @default_trace_path = REVERSE(@default_trace_path);
SELECT @indx = PATINDEX('%\%', @default_trace_path);
SET @default_trace_path = REVERSE(@default_trace_path);
SET @tracefilename = LEFT( @default_trace_path,LEN(@default_trace_path) - @indx) + '\log.trc';

SELECT SUBSTRING(CONVERT(NVARCHAR(MAX),TEXTData),36, PATINDEX('%executed%',TEXTData)-36) [Command]
,LoginName
,StartTime
,CONVERT(INT,SUBSTRING(CONVERT(NVARCHAR(MAX),TEXTData),PATINDEX('%found%',TEXTData)+6,PATINDEX('%errors %',TEXTData)-PATINDEX('%found%',TEXTData)-6)) [Errors], CONVERT(INT,SUBSTRING(CONVERT(NVARCHAR(MAX),TEXTData),PATINDEX('%repaired%',TEXTData)+9,PATINDEX('%errors.%',TEXTData)-PATINDEX('%repaired%',TEXTData)-9)) [Repaired]
,SUBSTRING(CONVERT(NVARCHAR(MAX),TEXTData),PATINDEX('%time:%',TEXTData)+6,PATINDEX('%hours%',TEXTData)-PATINDEX('%time:%',TEXTData)-6)+':'+SUBSTRING(CONVERT (NVARCHAR(MAX),TEXTData),PATINDEX('%hours%',TEXTData)+6,PATINDEX('%minutes%',TEXTData)-PATINDEX('%hours%',TEXTData)-6)+':'+SUBSTRING(CONVERT(NVARCHAR (MAX),TEXTData),PATINDEX('%minutes%',TEXTData)+8,PATINDEX('%seconds.%',TEXTData)-PATINDEX('%minutes%',TEXTData)-8) [Duration]
FROM ::fn_trace_gettable( @tracefilename, DEFAULT)
WHERE EventClass = 22
AND SUBSTRING(TEXTData,36,12) = 'DBCC CHECKDB'
ORDER BY StartTime DESC;
24 changes: 24 additions & 0 deletions dynamic-pivot-query-example.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
,@ColumnName AS NVARCHAR(MAX);

DROP TABLE IF EXISTS #CourseSales;
CREATE TABLE #CourseSales (Course VARCHAR(50), Year INT, Earning INT);
INSERT #CourseSales VALUES
('course_a',2020, 1), ('course_a',2021,2)
, ('course_b',2019,1), ('course_b',2020,2),('course_b',2021,3)
, ('course_c',2018,1), ('course_c',2019,2), ('course_c',2020,3),('course_c',2021,4)
, ('other',2019,2), ('other',2020,4), ('other',2021,6);

--Get distinct values of the PIVOT Column(s)
SELECT @ColumnName= ISNULL(@ColumnName + ',',''+ QUOTENAME(Course)
FROM (SELECT DISTINCT Course FROM #CourseSales) AS Courses;

--Prepare the PIVOT query using the dynamic value(s)
SET @DynamicPivotQuery =
  N'SELECT Year, ' + @ColumnName + '
    FROM #CourseSales
    PIVOT(SUM(Earning) 
          FOR Course IN (' + @ColumnName + ')) AS PVTTable';

--Execute the Dynamic Pivot Query
EXEC sp_executesql @DynamicPivotQuery;
19 changes: 19 additions & 0 deletions error-log-find-size-and-location.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
DECLARE @logfiles TABLE (
[FileArchive] TINYINT,
[Date] DATETIME,
[LogFileSizeB] BIGINT
);

INSERT @logfiles
EXEC xp_enumerrorlogs;

SELECT [FileArchive]
,[Date]
,CONVERT(VARCHAR(50),CAST(SUM(CAST([LogFileSizeB] AS FLOAT)) / 1024 / 1024 AS DECIMAL(10,4))) + ' MB' SizeMB
FROM @logfiles
GROUP BY [FileArchive]
,[Date]
,[LogFileSizeB];

-- to identify error log file location
SELECT SERVERPROPERTY('ErrorLogFileName') [Error_Log_Location];
122 changes: 61 additions & 61 deletions index-get-detail-by-table.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ SET NOCOUNT ON;

DECLARE @DBId INT = DB_ID()
,@SchemaName sysname
,@TblName sysname = N'TblName'
,@TblName sysname = N'dbo.factloanresponseattribute'
,@TblId INT
,@MinFragmentation REAL = 5.0 -- Defaulted to 5% as recommended by MS in BOL
,@MinPageCount INT = 1000 -- Defaulted to 1000 pages as recommended by MS in BOL
Expand Down Expand Up @@ -68,68 +68,68 @@ ORDER BY i.index_id
OPTION (MAXDOP 2);
/****** INDEX CATALOG BLOCK END ******/

/****** INDEX SIZE BLOCK START ******/
DECLARE @tmp_compression TABLE (
object_name NVARCHAR(128)
,schema_name NVARCHAR(128)
,index_id INT PRIMARY KEY CLUSTERED
,partition_number INT
,size_with_current_compression_setting BIGINT
,size_with_requested_compression_setting BIGINT
,sample_size_with_current_compression_setting BIGINT
,sample_size_with_requested_compression_setting BIGINT
);
--/****** INDEX SIZE BLOCK START ******/
--DECLARE @tmp_compression TABLE (
-- object_name NVARCHAR(128)
-- ,schema_name NVARCHAR(128)
-- ,index_id INT PRIMARY KEY CLUSTERED
-- ,partition_number INT
-- ,size_with_current_compression_setting BIGINT
-- ,size_with_requested_compression_setting BIGINT
-- ,sample_size_with_current_compression_setting BIGINT
-- ,sample_size_with_requested_compression_setting BIGINT
--);

IF @EstimateCompression = 1
INSERT INTO @tmp_compression (
object_name
,schema_name
,index_id
,partition_number
,size_with_current_compression_setting
,size_with_requested_compression_setting
,sample_size_with_current_compression_setting
,sample_size_with_requested_compression_setting
)
EXEC sys.sp_estimate_data_compression_savings
@schema_name = @SchemaName
,@object_name = @TblName
,@index_id = NULL
,@partition_number = NULL
,@data_compression = @CompressionType;
--IF @EstimateCompression = 1
-- INSERT INTO @tmp_compression (
-- object_name
-- ,schema_name
-- ,index_id
-- ,partition_number
-- ,size_with_current_compression_setting
-- ,size_with_requested_compression_setting
-- ,sample_size_with_current_compression_setting
-- ,sample_size_with_requested_compression_setting
-- )
-- EXEC sys.sp_estimate_data_compression_savings
-- @schema_name = @SchemaName
-- ,@object_name = @TblName
-- ,@index_id = NULL
-- ,@partition_number = NULL
-- ,@data_compression = @CompressionType;

SELECT 'SIZE:' AS Info;
SELECT '[' + DB_NAME() + '].[' + OBJECT_SCHEMA_NAME(@TblId, @DBId) + '].[' + OBJECT_NAME(@TblId, @DBId) + ']' AS Object
,i.name AS [Index]
,i.type_desc AS [Index Type]
,ps.alloc_unit_type_desc AS [Allocation Type]
,CONVERT(NUMERIC(9, 2), ps.page_count * 8 * /*convert to MB*/ 0.000976562) AS [Index Size (MB)]
,ps.page_count AS Pages
,CONVERT(NUMERIC(5, 2), ps.avg_page_space_used_in_percent) AS [Avg Page Space Used (%)]
,ps.record_count AS Records
,ps.avg_record_size_in_bytes AS [Avg Record Size (bytes)]
,ps.compressed_page_count AS [Compressed Pages]
,CONVERT(NUMERIC(5, 2), tmp.size_with_requested_compression_setting * /*convert to MB*/ 0.000976562) AS [Est Compressed Size (MB)]
,'ALTER INDEX [' + i.name + +'] ON ' + '[' + OBJECT_SCHEMA_NAME(@TblId, @DBId) + '].['
+ OBJECT_NAME(@TblId, @DBId) + ']' + ' REBUILD WITH ( FILLFACTOR = '
+ CONVERT( CHAR(3), CASE WHEN i.fill_factor = 0 THEN 100
ELSE i.fill_factor
END
) + ', ONLINE=ON, SORT_IN_TEMPDB=ON );' + ' UPDATE STATISTICS [' + OBJECT_SCHEMA_NAME(@TblId, @DBId)
+ '].[' + OBJECT_NAME(@TblId, @DBId) + '] [' + i.name + +'];' AS [Rebuild Script]
FROM sys.dm_db_index_physical_stats(@DBId, @TblId, NULL, NULL, 'SAMPLED') AS ps
INNER JOIN sys.indexes i
ON ps.object_id = i.object_id
AND ps.index_id = i.index_id
LEFT OUTER JOIN @tmp_compression tmp
ON i.index_id = tmp.index_id
WHERE i.object_id = @TblId
AND i.is_disabled = 0
AND i.is_hypothetical = 0
ORDER BY i.index_id
,i.name
OPTION (MAXDOP 2);
/****** INDEX SIZE BLOCK END ******/
--SELECT 'SIZE:' AS Info;
--SELECT '[' + DB_NAME() + '].[' + OBJECT_SCHEMA_NAME(@TblId, @DBId) + '].[' + OBJECT_NAME(@TblId, @DBId) + ']' AS Object
-- ,i.name AS [Index]
-- ,i.type_desc AS [Index Type]
-- ,ps.alloc_unit_type_desc AS [Allocation Type]
-- ,CONVERT(NUMERIC(9, 2), ps.page_count * 8 * /*convert to MB*/ 0.000976562) AS [Index Size (MB)]
-- ,ps.page_count AS Pages
-- ,CONVERT(NUMERIC(5, 2), ps.avg_page_space_used_in_percent) AS [Avg Page Space Used (%)]
-- ,ps.record_count AS Records
-- ,ps.avg_record_size_in_bytes AS [Avg Record Size (bytes)]
-- ,ps.compressed_page_count AS [Compressed Pages]
-- ,CONVERT(NUMERIC(5, 2), tmp.size_with_requested_compression_setting * /*convert to MB*/ 0.000976562) AS [Est Compressed Size (MB)]
-- ,'ALTER INDEX [' + i.name + +'] ON ' + '[' + OBJECT_SCHEMA_NAME(@TblId, @DBId) + '].['
-- + OBJECT_NAME(@TblId, @DBId) + ']' + ' REBUILD WITH ( FILLFACTOR = '
-- + CONVERT( CHAR(3), CASE WHEN i.fill_factor = 0 THEN 100
-- ELSE i.fill_factor
-- END
-- ) + ', ONLINE=ON, SORT_IN_TEMPDB=ON );' + ' UPDATE STATISTICS [' + OBJECT_SCHEMA_NAME(@TblId, @DBId)
-- + '].[' + OBJECT_NAME(@TblId, @DBId) + '] [' + i.name + +'];' AS [Rebuild Script]
--FROM sys.dm_db_index_physical_stats(@DBId, @TblId, NULL, NULL, 'SAMPLED') AS ps
-- INNER JOIN sys.indexes i
-- ON ps.object_id = i.object_id
-- AND ps.index_id = i.index_id
-- LEFT OUTER JOIN @tmp_compression tmp
-- ON i.index_id = tmp.index_id
--WHERE i.object_id = @TblId
--AND i.is_disabled = 0
--AND i.is_hypothetical = 0
--ORDER BY i.index_id
-- ,i.name
--OPTION (MAXDOP 2);
--/****** INDEX SIZE BLOCK END ******/

/****** POSSIBLE MISSING INDEXES BLOCK START ******/
SELECT 'POSSIBLE MISSING (since last restart):' AS Info;
Expand Down
11 changes: 11 additions & 0 deletions mysql-procedure-template.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
USE <target-schema>;

DELIMITER //

CREATE PROCEDURE <procedure-name> ()
BEGIN
SELECT <column-list>
FROM <table>;
END //

DELIMITER ;
14 changes: 14 additions & 0 deletions mysql-trigger-template.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
USE <target-schema>;

DELIMITER //

CREATE TRIGGER <trigger-name>
AFTER INSERT
ON <table> FOR EACH ROW
BEGIN
UPDATE <table>
SET <column> = <some-value>
WHERE <id-column> = NEW.<id-column>
END;

DELIMITER ;
8 changes: 6 additions & 2 deletions plan-cache-find-longest-running-queries.sql
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* Execution plan cache */
SELECT TOP (10)
SELECT TOP (1000)
sqltext.text AS query
,querystats.execution_count
,querystats.max_elapsed_time
Expand All @@ -13,4 +13,8 @@ FROM sys.dm_exec_query_stats as querystats
CROSS APPLY sys.dm_exec_sql_text(querystats.sql_handle) AS sqltext
ORDER BY querystats.max_elapsed_time DESC
OPTION (RECOMPILE);
GO
GO

select * from sys.dm_exec_query_stats
where query_hash = 0x98714BE4E5BE6716
or query_plan_hash = 0x98714BE4E5BE6716
4 changes: 4 additions & 0 deletions security-change-sql-login-password.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
ALTER LOGIN [user] WITH
PASSWORD = 'NewPassword'
OLD_PASSWORD = 'OldPassword';
GO
5 changes: 5 additions & 0 deletions security-get-sql-server-password-age.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
-- Show all logins where the password is over 60 days old
SELECT name
,LOGINPROPERTY([name], 'PasswordLastSetTime') AS 'PasswordChanged'
FROM sys.sql_logins
WHERE LOGINPROPERTY([name], 'PasswordLastSetTime') < DATEADD(dd, -60, GETDATE());
15 changes: 10 additions & 5 deletions security-migrate-server_principals.sql
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@

-- Windows logins and groups
SELECT N'CREATE LOGIN [' + sp.name + '] FROM WINDOWS;' AS [-- Windows Logins to be Created --]
SELECT sp.name, 'IF NOT EXISTS (SELECT 1 FROM master.sys.server_principals WHERE name = ''' + sp.name + ''') BEGIN CREATE LOGIN [' + sp.name + '] FROM WINDOWS; END;' AS [-- Windows Logins to be Created --]
FROM master.sys.server_principals AS sp
WHERE sp.type IN ('U', 'G')
AND sp.is_disabled = 0
AND sp.name NOT LIKE 'NT [AS]%\%'
ORDER BY sp.name;

-- SQL Server logins
SELECT N'CREATE LOGIN [' + sp.name + ']'
SELECT sp.name
,'IF SUSER_ID(''' + sp.name + ''') IS NULL BEGIN'
+ ' ' + 'CREATE LOGIN [' + sp.name + ']'
+ ' ' + 'WITH PASSWORD=0x' + CONVERT(NVARCHAR(MAX), l.password_hash, 2) + N' HASHED'
+ ' ' + ', CHECK_POLICY='
+ CASE l.is_policy_checked
Expand All @@ -22,7 +24,7 @@ SELECT N'CREATE LOGIN [' + sp.name + ']'
END
+ ' ' + ', DEFAULT_DATABASE=[' + l.default_database_name + N']'
+ ' ' + ', SID=0x' + CONVERT(NVARCHAR(MAX), sp.sid, 2)
+ N';' AS [-- SQL Server Logins to be Created --]
+ N'; END;' AS [-- SQL Server Logins to be Created --]
FROM master.sys.server_principals AS sp
INNER JOIN master.sys.sql_logins AS l
ON sp.sid = l.sid
Expand All @@ -37,14 +39,17 @@ WHERE sp.principal_id >= 100
AND sp.type = 'R';

-- Server Role permissions
SELECT 'ALTER SERVER ROLE [' + sr.name + '] ADD MEMBER [' + sp.name + '];' AS [-- Server Roles to be Granted --]
SELECT sr.name AS role_name
,sp.name AS login_name
,'ALTER SERVER ROLE [' + sr.name + '] ADD MEMBER [' + sp.name + '];' AS [-- Server Roles to be Granted --]
FROM master.sys.server_role_members rm
JOIN master.sys.server_principals sr ON sr.principal_id = rm.role_principal_id
JOIN master.sys.server_principals sp ON sp.principal_id = rm.member_principal_id
WHERE sp.type IN ( 'S', 'U', 'G' )
AND sp.is_disabled = 0
AND sp.name NOT LIKE 'NT [AS]%\%'
AND sp.name <> 'sa';
AND sp.name <> 'sa'
ORDER BY sr.name, sp.name;

-- Server Level Permissions
SELECT CASE
Expand Down
44 changes: 44 additions & 0 deletions server-get-io-database-level.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/*
NOTE: sys.dm_io_virtual_file_stats counters are reset whenever the SQL Server service is started
*/

WITH AggregateIOStatistics AS (
SELECT DB_NAME(database_id) AS [DB Name]
,CAST(SUM(num_of_bytes_read)/1048576 AS DECIMAL(12, 2)) AS reads_in_mb
,CAST(SUM(num_of_bytes_written)/1048576 AS DECIMAL(12, 2)) AS writes_in_mb
,CAST(SUM(num_of_bytes_read + num_of_bytes_written)/1048576 AS DECIMAL(12, 2)) AS io_in_mb
FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS [DM_IO_STATS]
GROUP BY database_id
)
SELECT ROW_NUMBER() OVER(ORDER BY io_in_mb DESC) AS [I/O Rank]
,[DB Name]
,CAST(reads_in_mb/ SUM(reads_in_mb) OVER() * 100.0 AS DECIMAL(5,2)) AS [Read Percent]
,reads_in_mb AS [Read I/O (MB)]
,CAST(writes_in_mb/ SUM(writes_in_mb) OVER() * 100.0 AS DECIMAL(5,2)) AS [Write Percent]
,writes_in_mb AS [Write I/O (MB)]
,CAST(io_in_mb/ SUM(io_in_mb) OVER() * 100.0 AS DECIMAL(5,2)) AS [I/O Percent]
,io_in_mb AS [Total I/O (MB)]
FROM AggregateIOStatistics
ORDER BY [I/O Rank];


SELECT DB_NAME(DB_ID()) AS [DB_Name]
,DFS.name AS [Logical_Name]
,DIVFS.[file_id]
,DFS.physical_name AS [PH_Name]
,DIVFS.num_of_reads
,DIVFS.io_stall_read_ms
,CAST(100. * DIVFS.io_stall_read_ms/(DIVFS.io_stall_read_ms + DIVFS.io_stall_write_ms) AS DECIMAL(10,1)) AS [IO_Stall_Reads_Pct]
,CAST(DIVFS.num_of_bytes_read/1048576.0 AS DECIMAL(19, 2)) AS [MB Read]
,CAST(100. * DIVFS.num_of_reads/(DIVFS.num_of_reads + DIVFS.num_of_writes) AS DECIMAL(10,1)) AS [# Reads Pct]
,CAST(100. * DIVFS.num_of_bytes_read/(DIVFS.num_of_bytes_read + DIVFS.num_of_bytes_written) AS DECIMAL(10,1)) AS [Read Bytes Pct]
,DIVFS.num_of_writes
,DIVFS.io_stall_write_ms
,CAST(100. * DIVFS.io_stall_write_ms/(DIVFS.io_stall_write_ms + DIVFS.io_stall_read_ms) AS DECIMAL(10,1)) AS [IO_Stall_Writes_Pct]
,CAST(DIVFS.num_of_bytes_written/1048576.0 AS DECIMAL(19, 2)) AS [MB Written]
,CAST(100. * DIVFS.num_of_writes/(DIVFS.num_of_reads + DIVFS.num_of_writes) AS DECIMAL(10,1)) AS [# Write Pct]
,CAST(100. * DIVFS.num_of_bytes_written/(DIVFS.num_of_bytes_read + DIVFS.num_of_bytes_written) AS DECIMAL(10,1)) AS [Written Bytes Pct]
,(DIVFS.num_of_reads + DIVFS.num_of_writes) AS [Writes + Reads]
FROM sys.dm_io_virtual_file_stats(DB_ID(), NULL) AS DIVFS
JOIN sys.database_files AS DFS WITH (NOLOCK) ON DIVFS.[file_id]= DFS.[file_id]
ORDER BY (DIVFS.num_of_reads + DIVFS.num_of_writes) DESC;
Loading

0 comments on commit d9955f0

Please sign in to comment.