Skip to content

Instantly share code, notes, and snippets.

View ghotz's full-sized avatar

Gianluca Hotz ghotz

View GitHub Profile
@ghotz
ghotz / get-xe-deadlocks-ringbuffer.sql
Created April 24, 2026 17:27
Get deadlocks details from an Azure SQL Database XE Session
--
-- Get deadlocks details from an Azure SQL Database XE Session with as ringbuffer as destination
--
IF OBJECT_ID('tempdb..#deadlocks') IS NOT NULL
DROP TABLE #deadlocks;
WITH XmlDataSet AS
(
SELECT CAST(xet.target_data AS xml) AS XMLDATA,*
FROM sys.dm_xe_database_session_targets AS xet
@ghotz
ghotz / evaluate-auto-shrink.sql
Last active March 6, 2026 10:14
Evaluate Auto Shrink database option
SELECT
[name] AS database_name, is_auto_shrink_on
, 'ALTER DATABASE [' + [name] + ']' + ' SET AUTO_SHRINK OFF;' AS alter_command
FROM sys.databases
WHERE [name] NOT IN ('master','model','msdb','tempdb')
AND state_desc = 'ONLINE'
AND is_auto_shrink_on = 1
ORDER BY [name]
@ghotz
ghotz / backup-delete-logins.ps1
Created January 22, 2026 15:41
Backup permissions before deleting logins and users
$instance = 'localhost'
$logins = 'group1','group2'
foreach ($login in $logins)
{
Write-Output "Processing $login"
#$file = "C:\temp\backup-$($login.Replace('\','_')).sql"
#Export-DbaLogin -SqlInstance $instance -Login $login -FilePath $file -ObjectLevel
Remove-DbaDbUser -SqlInstance $instance -User $login -Force
Remove-DbaLogin -SqlInstance $instance -Login $login -Force -Confirm:$false
@ghotz
ghotz / errorlog-filed-backups-all-databases.sql
Last active January 13, 2026 14:59
Audit database backup failures for all databases, of for specific databases, pulling surrounding error details
DECLARE @StartSearchDate datetime;
DECLARE @SecondsAround int;
DECLARE @Databases TABLE (DatabaseName sysname NOT NULL PRIMARY KEY);
SET @StartSearchDate = GETDATE() - 2;
SET @SecondsAround = 1;
--
-- Get error logs
--
@ghotz
ghotz / move-tempdb.sql
Created December 19, 2025 16:15
Move all tempdb files
DECLARE @original_path sysname = N'E:\SQLServer\MSSQL15.SQL2022\MSSQL\DATA';
DECLARE @destination_path sysname = N'E:\SQLServer\MSSQL16.SQL2022\MSSQL\DATA';
DECLARE @sqlcmd nvarchar(max) = (
SELECT
N'ALTER DATABASE [tempdb]'
+ N' MODIFY FILE (NAME = [' + [name] + ']'
+ N', FILENAME = ''' + REPLACE(physical_name, @original_path, @destination_path) + ''');'
+ CHAR(10)
@ghotz
ghotz / create-ag-alerts.sql
Created October 24, 2025 11:55
Availability Groups Alerts
USE [msdb]
GO
/****** Object: Alert [AG Connection Timeout] Script Date: 1/13/2023 10:36:31 AM ******/
EXEC msdb.dbo.sp_add_alert @name=N'AG Connection Timeout',
@message_id=35206,
@severity=0,
@enabled=1,
@delay_between_responses=60,
@include_event_description_in=1,
@ghotz
ghotz / get_roles_permissions.sql
Created July 24, 2025 12:54
Get detailed permissions for the specified roles
SELECT DISTINCT
RP.[name]
, RP.[type_desc] AS role_type
, PM.class_desc AS permission_type
, PM.[permission_name]
, pm.state_desc
, CASE
WHEN O1.type_desc IS NULL OR O1.type_desc = 'SYSTEM_TABLE'
THEN PM.class_desc
ELSE O1.[type_desc]
@ghotz
ghotz / sp_help_revlogin.sql
Created June 25, 2025 12:57
Old version of sp_help_revlogin that still otuputs sa and other system logins
/*Note This script creates two stored procedures in the master database. The procedures are named sp_hexadecimal and sp_help_revlogin. */
-- Create stored procedure sp_hexadecimal
USE master
GO
IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL
DROP PROCEDURE sp_hexadecimal
GO
CREATE PROCEDURE sp_hexadecimal
@binvalue varbinary(256),
@hexvalue varchar (514) OUTPUT
@ghotz
ghotz / scan-pst-multi.ps1
Last active May 5, 2025 21:37
Scan and repair PSTs with multiple passes and full PST amd log archival
$scanPSTExe = "C:\Program Files\Microsoft Office\root\Office16\SCANPST.EXE"
$SourceDir = "E:\Outlook\test"
$BackupDir = "F:\Backups\Outlook\test"
$MaxIterations = 10
$PSTs = Get-ChildItem -Path (Join-Path $SourceDir "\*") -Include *.pst,*.ost -File
$PSTs | ForEach-Object {
$NumIteration = 1
@ghotz
ghotz / change-dbmail-account.sql
Last active May 2, 2025 13:48
Change from and replyto e-mail address for DBMail ccount and test it
DECLARE @old_email_address nvarchar(128) = N'noreply@foobar.org';
DECLARE @new_email_address nvarchar(128) = N'sqlmail@foobar.org';
DECLARE @old_replyto_address nvarchar(128) = N'noreply@foobar.org';
DECLARE @new_replyto_address nvarchar(128) = N'sqlmail@foobar.org';
DECLARE @test_email_address nvarchar(128) = N'admin@foobar.org';
USE msdb;
SET NOCOUNT ON;
IF OBJECT_ID('tempdb..#tmp_account') IS NOT NULL