Skip to content

Commit

Permalink
capture latest changes
Browse files Browse the repository at this point in the history
  • Loading branch information
nate-hughes committed May 25, 2021
1 parent d9955f0 commit f2b07d6
Show file tree
Hide file tree
Showing 27 changed files with 442 additions and 70 deletions.
4 changes: 4 additions & 0 deletions alwayson-dashboard.sql
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,10 @@ BEGIN
WHEN 1 THEN 0
ELSE ISNULL(DATEDIFF([ss], [dbr].[last_commit_time], [dbrp].[last_commit_time]), 0)
END AS [EstimatedDataLoss_(Seconds)]
,CASE [dbcs].[is_failover_ready]
WHEN 1 THEN '00:00:00:000'
ELSE CONVERT(varchar, DATEADD(ms, ISNULL(DATEDIFF([ss], [dbr].[last_commit_time], [dbrp].[last_commit_time]), 0) * 1000, 0), 114)
END AS [EstimatedDataLoss]
,ISNULL(CASE [dbr].[redo_rate]
WHEN 0 THEN -1
ELSE CAST([dbr].[redo_queue_size] AS FLOAT) / NULLIF([dbr].[redo_rate] ,0)
Expand Down
48 changes: 48 additions & 0 deletions alwayson-failover-database-recovery-status.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
DECLARE @DBName VARCHAR(64) = 'database_name';

-- AG SYNC STATE
SELECT DB_NAME(database_id) as DatabaseName
,synchronization_state_desc
,database_state_desc
FROM sys.dm_hadr_database_replica_states
WHERE is_local=1
AND is_primary_replica=0
AND DB_NAME(database_id) = @DBName;

-- REPLICA ROLLBACK
SELECT object_name
,counter_name
,instance_name
,cntr_value AS [log_kb_remaining]
FROM sys.dm_os_performance_counters
WHERE counter_name = 'log remaining for undo'
AND instance_name LIKE @DBName + '%';

-- RECOVERY STATUS
DECLARE @ErrorLog AS TABLE([LogDate] CHAR(24), [ProcessInfo] VARCHAR(64), [TEXT] VARCHAR(MAX));

INSERT INTO @ErrorLog
EXEC master..sp_readerrorlog 0, 1, 'Recovery of database', @DBName;

INSERT INTO @ErrorLog
EXEC master..sp_readerrorlog 0, 1, 'Recovery completed', @DBName;

SELECT TOP 1
@DBName AS [DBName]
,[LogDate]
,CASE
WHEN SUBSTRING([TEXT],10,1) = 'c' THEN '100%'
ELSE SUBSTRING([TEXT], CHARINDEX(') is ', [TEXT]) + 4,CHARINDEX(' complete (', [TEXT]) - CHARINDEX(') is ', [TEXT]) - 4)
END AS PercentComplete
,CASE
WHEN SUBSTRING([TEXT],10,1) = 'c' THEN 0
ELSE CAST(SUBSTRING([TEXT], CHARINDEX('approximately', [TEXT]) + 13,CHARINDEX(' seconds remain', [TEXT]) - CHARINDEX('approximately', [TEXT]) - 13) AS FLOAT)/60.0
END AS MinutesRemaining
,CASE
WHEN SUBSTRING([TEXT],10,1) = 'c' THEN 0
ELSE CAST(SUBSTRING([TEXT], CHARINDEX('approximately', [TEXT]) + 13,CHARINDEX(' seconds remain', [TEXT]) - CHARINDEX('approximately', [TEXT]) - 13) AS FLOAT)/60.0/60.0
END AS HoursRemaining
,[TEXT]
FROM @ErrorLog
ORDER BY CAST([LogDate] as datetime) DESC
,[MinutesRemaining];
37 changes: 37 additions & 0 deletions backup-restore-to-RDS-for-SQL-Server.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
Migrating SQL Server to Amazon RDS using native backup and restore
https://aws.amazon.com/blogs/database/migrating-sql-server-to-amazon-rds-using-native-backup-and-restore/
*/

USE master;
GO

EXEC msdb.dbo.rds_restore_database
@restore_db_name='DatabaseName',
@s3_arn_to_restore_from='arn:aws:s3:::bucketname/sqlserverbackups/DatabaseName_full.bak',
@with_norecovery=1,
@type='FULL';
GO

SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,0);
GO

EXEC msdb.dbo.rds_restore_database
@restore_db_name='DatabaseName',
@s3_arn_to_restore_from='arn:aws:s3:::bucketname/sqlserverbackups/DatabaseName_diff.bak',
@type='DIFFERENTIAL',
@with_norecovery=1;
GO

SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,0);
GO

EXEC msdb.dbo.rds_restore_log
@restore_db_name='DatabaseName',
@s3_arn_to_restore_from='arn:aws:s3:::bucketname/sqlserverbackup/DatabaseName_log.trn',
@with_norecovery=0;
go

SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,0);
GO

40 changes: 40 additions & 0 deletions batch-update-script.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
USE [DATABASE_NAME];
GO
SET NOCOUNT ON;

DECLARE @Rows INT
,@BatchSize INT = 4000
,@Completed INT = 0
,@Total INT;

-- \/\/ Populate temp table with PK column(s) \/\/ --
SELECT [SOME_ID]
INTO #temp_ids
FROM [TABLE_NAME]
WHERE [SOME_COLUMN] IS NULL;

SELECT @Total = COUNT(*) FROM #temp_ids;

CREATE TABLE #temp_upd (Id UNIQUEIDENTIFIER);

WHILE EXISTS (SELECT 1 FROM #temp_ids)
BEGIN
DELETE TOP (@BatchSize)
FROM #temp_ids
OUTPUT deleted.Id INTO #temp_upd;

UPDATE t
SET [SOME_COLUMN] = 'Some Value'
FROM [TABLE_NAME] t
JOIN #temp_upd tmp ON t.[SOME_ID] = tmp.Id;

SET @Rows = @@ROWCOUNT;
SET @Completed = @Completed + @Rows;

PRINT 'Completed ' + cast(@Completed as varchar(10)) + '/' + cast(@Total as varchar(10));

TRUNCATE TABLE #temp_upd;
END;

DROP TABLE IF EXISTS #temp_upd;
DROP TABLE IF EXISTS #temp_ids;
9 changes: 9 additions & 0 deletions database-get-encryption-state.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
SELECT d.name AS [database]
,d.is_encrypted
,dek.encryption_state
,dek.percent_complete
,dek.key_algorithm
,dek.key_length
FROM master.sys.databases d
LEFT JOIN master.sys.dm_database_encryption_keys dek ON d.database_id = dek.database_id
ORDER BY d.name;
2 changes: 1 addition & 1 deletion database-get-file-size-and-space-used.sql
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ CREATE TABLE #DB_FILE_INFO (
);

DECLARE @l_sql NVARCHAR(4000)
,@l_DBName NVARCHAR(128)
,@l_DBName NVARCHAR(128) = 'mf_scratch'
;

SET @l_sql =
Expand Down
7 changes: 6 additions & 1 deletion database-get-table-and-index-size.sql
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,15 @@ exec sp_spaceused 'ZipCode';
exec sp_spaceused 'StatisticalArea_to_Zip';
*/

DECLARE @l_DBId INT;
DECLARE @l_DBId INT
,@l_TblName VARCHAR(128) = '[dbo].[FactLoanResponseAttribute]'
,@l_TblId INT;

SET @l_DBId = DB_ID();
SET @l_TblId = OBJECT_ID(@l_TblName);

SELECT TblId = o.object_id
, SchemaName = SCHEMA_NAME(o.schema_id)
, TblName = o.name
, IndxId = i.index_id
, IndxName = i.name
Expand All @@ -42,4 +46,5 @@ FROM sys.objects o
ON i.data_space_id = d.data_space_id
WHERE o.type = 'U'
AND o.is_ms_shipped = 0
AND (@l_TblId IS NULL OR o.object_id = @l_TblId)
ORDER BY CONVERT(NUMERIC(9,1),CASE WHEN i.index_id IN(0,1) THEN a.data_pages END * @pgsz) + CONVERT(NUMERIC(9,1),ISNULL(CASE WHEN i.index_id > 1 THEN a.data_pages END,0) * @pgsz) desc
6 changes: 5 additions & 1 deletion database-get-table-size.sql
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,12 @@ FROM [master].dbo.spt_values
WHERE number = 1
AND type = 'E';

DECLARE @l_DBId INT;
DECLARE @l_DBId INT
,@l_TblId INT
,@l_Table VARCHAR(128) = 'schema.table';

SET @l_DBId = DB_ID();
SET @l_TblId = OBJECT_ID(@l_Table);

SELECT TblId = o.object_id
, TblName = o.name
Expand All @@ -29,6 +32,7 @@ FROM sys.objects o
ON p.partition_id = a.container_id
WHERE o.type = 'U'
AND o.is_ms_shipped = 0
AND (o.object_id = @l_TblId OR @l_TblId IS NULL)
GROUP BY o.object_id
, o.name
ORDER BY 4 DESC
Expand Down
6 changes: 6 additions & 0 deletions database-migrate-encryption-keys.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ create table #key_tbls (DBName VARCHAR(100), KeyName VARCHAR(100));

declare @sql nvarchar(max) = 'use [?]; insert #key_tbls (DBName, KeyName) select DB_NAME(), name from sys.symmetric_keys where name <> ''##MS_DatabaseMasterKey##'';'

select DB_NAME(), name from sys.symmetric_keys where name <> '##MS_DatabaseMasterKey##';

exec sp_MSforeachdb @sql

select DBName, KeyName
Expand All @@ -15,3 +17,7 @@ alter master key add encryption by service master key
exec SystemConfiguration_GetValue 'ValidationKey'
*/


select * from sys.symmetric_keys
select * from sys.certificates
34 changes: 34 additions & 0 deletions database-purge-all-connections.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
USE MASTER
GO

DECLARE @Spid INT
DECLARE @ExecSQL VARCHAR(255)

DECLARE KillCursor CURSOR LOCAL STATIC READ_ONLY FORWARD_ONLY
FOR
SELECT DISTINCT SPID, *
FROM MASTER..SysProcesses
WHERE DBID = DB_ID('DatabaseName')

OPEN KillCursor

-- Grab the first SPID
FETCH NEXT
FROM KillCursor
INTO @Spid

WHILE @@FETCH_STATUS = 0
BEGIN
SET @ExecSQL = 'KILL ' + CAST(@Spid AS VARCHAR(50))

EXEC (@ExecSQL)

-- Pull the next SPID
FETCH NEXT
FROM KillCursor
INTO @Spid
END

CLOSE KillCursor

DEALLOCATE KillCursor
13 changes: 13 additions & 0 deletions database-shrink-file.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
USE [Database]
GO

DECLARE @StartSize INT = 102400 -- SET START SIZE OF THE DATABASE FILE (MB)
,@TargetSize INT = 20480 -- SET END SIZE OF THE DATABASE FILE (MB)
;

WHILE @StartSize > @TargetSize
BEGIN
SET @StartSize = @StartSize - 10240;
DBCC SHRINKFILE (N'FileName' , @StartSize); -- logical name
END;
GO
6 changes: 3 additions & 3 deletions error-log-query-using-xp_readerrorlog.sql
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ DECLARE @ArchiveID INT --Value of error log file you want to read: 0 = current

SELECT @ArchiveID = 0
,@LogFileType = 1
,@Filter1Text = 'SomeText'
,@Filter1Text = NULL
,@Filter2Text = NULL
,@FirstEntry = NULL
,@LastEntry = NULL
,@FirstEntry = '2021-05-01 05:44:39'
,@LastEntry = '2021-05-02 06:38:59.080'
,@SortOrder = N'asc';

EXEC master.sys.xp_readerrorlog @ArchiveID
Expand Down
19 changes: 19 additions & 0 deletions get-estimated-completion.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
DECLARE @SPID INT = <SPID>;

SELECT command
,percent_complete
,estimated_completion_time / 1000 AS estimated_completion_time_sec
FROM sys.dm_exec_requests
WHERE session_id = @SPID;

SELECT
node_id,
physical_operator_name,
SUM(row_count) row_count,
SUM(estimate_row_count) AS estimate_row_count,
CAST(SUM(row_count)*100 AS float)/SUM(estimate_row_count) as estimate_percent_complete
FROM sys.dm_exec_query_profiles
WHERE session_id=@SPID
GROUP BY node_id,physical_operator_name
ORDER BY node_id desc;

14 changes: 14 additions & 0 deletions get-worker-thread-counts.sql
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,17 @@ select (select max_workers_count from sys.dm_os_sys_info) as 'TotalThreads'
,sum(work_queue_count) as 'Request_Waiting_for_threads'
from sys.dm_os_Schedulers
where status='VISIBLE ONLINE'


SELECT s.session_id, r.command, r.status,
r.wait_type, r.scheduler_id, w.worker_address,
w.is_preemptive, w.state, t.task_state,
t.session_id, t.exec_context_id, t.request_id
FROM sys.dm_exec_sessions AS s
INNER JOIN sys.dm_exec_requests AS r
ON s.session_id = r.session_id
INNER JOIN sys.dm_os_tasks AS t
ON r.task_address = t.task_address
INNER JOIN sys.dm_os_workers AS w
ON t.worker_address = w.worker_address
WHERE s.is_user_process = 0;
Loading

0 comments on commit f2b07d6

Please sign in to comment.