Skip to content

Instantly share code, notes, and snippets.

View ghotz's full-sized avatar

Gianluca Hotz ghotz

View GitHub Profile
@ghotz
ghotz / search-jobs.sql
Created May 16, 2024 14:21
Search in SQL Agent job steps commands
SELECT
JO.[name] AS job_name, JO.[enabled]
, JS.step_id, JS.step_name, JS.subsystem, JS.command
FROM msdb.dbo.sysjobs AS JO
JOIN msdb.dbo.sysjobsteps as JS
ON JO.job_id = JS.job_id
WHERE JS.command like N'%something%'
@ghotz
ghotz / check-empty-stats-alldbs.sql
Last active May 14, 2024 08:07
Check SQL Server empty statistics
EXEC sp_msforeachdb 'USE [?];
SELECT
DB_NAME()
, S.[object_id], S.[stats_id]
, FORMATMESSAGE(
N''[%s].[%s]''
, OBJECT_SCHEMA_NAME(S.[object_id])
, OBJECT_NAME(S.[object_id])
)AS object_full_name
, QUOTENAME(S.[name]) AS stat_name
@ghotz
ghotz / disable-win-features.ps1
Last active May 12, 2024 13:28
Enable/disable common Windows Optional Features that enable/disable VBS
# Windows Sandbox
Disable-WindowsOptionalFeature -FeatureName "Containers-DisposableClientVM" -Online -NoRestart
# WSL
Disable-WindowsOptionalFeature -FeatureName "VirtualMachinePlatform" -Online -NoRestart
Disable-WindowsOptionalFeature -FeatureName "Microsoft-Windows-Subsystem-Linux" -Online -NoRestart
# Hyper-V
Disable-WindowsOptionalFeature -FeatureName "Microsoft-Hyper-V-All" -Online -NoRestart
@ghotz
ghotz / evaluate-jobowner.sql
Created May 8, 2024 16:21
Evaluate and fix job owners
SELECT
J1.[name] AS job_name
, C1.[name] AS category_name, S1.[name] as [owner_name]
, CASE
WHEN S1.[name] = N'sa' OR S1.[name] LIKE '##%'
THEN NULL
ELSE 'EXEC msdb..sp_update_job @job_name = ''' + J1.[name] + ''''
+ ', @owner_login_name = ''sa'' -- was ' + QUOTENAME(S1.[name])
END AS alter_command
FROM msdb.dbo.sysjobs AS J1
@ghotz
ghotz / evaluate-db-owner.sql
Created May 8, 2024 16:01
Evaluate and fix non sa database owner
SELECT
D1.[name] AS database_name, S1.[name] as [owner_name]
, CASE
WHEN S1.[name] = N'sa'
THEN NULL
--ELSE 'ALTER AUTHORIZATION ON DATABASE::' + QUOTENAME(D1.[name]) + ' TO [sa] -- was ' + QUOTENAME(S1.[name])
ELSE 'USE ' + QUOTENAME(D1.[name]) + '; EXEC sp_changedbowner ''sa'' -- was ' + QUOTENAME(S1.[name])
END AS alter_command
FROM sys.databases AS D1
LEFT
@ghotz
ghotz / evaluate-non-trusted-constraints.sql
Created May 8, 2024 10:49
Evaluate and fix non trusted constraint
SELECT
QUOTENAME(S1.[name]) AS [schema_name]
, QUOTENAME(O1.[name]) AS [table_name]
, QUOTENAME(C1.[name]) AS [constraint_name]
, N'FOREIGN_KEY_CONSTRAINT' AS [constraint_type]
, 'ALTER TABLE ' + QUOTENAME(S1.[name]) + '.' + QUOTENAME(O1.[name])
+ ' WITH CHECK CHECK CONSTRAINT ' + QUOTENAME(C1.[name]) AS sql_stmt
FROM sys.foreign_keys AS C1
JOIN sys.objects AS O1 ON C1.parent_object_id = O1.[object_id]
JOIN sys.schemas AS S1 ON O1.[schema_id] = S1.[schema_id]
@ghotz
ghotz / evluate-page-verify.sql
Created May 8, 2024 10:05
Evaluate and standardize page verify
SELECT
[name] AS database_name, page_verify_option_desc
, CASE
WHEN page_verify_option_desc = N'CHECKSUM'
THEN NULL
ELSE 'ALTER DATABASE [' + [name] + ']'
+ ' SET PAGE_VERIFY CHECKSUM;'
END AS alter_command
FROM sys.databases
WHERE [name] NOT IN ('master','model','msdb','tempdb')
@ghotz
ghotz / evaluate-recovery-time.sql
Created May 8, 2024 10:01
Evaluate and standardize database recovery time
SELECT
[name] AS database_name, target_recovery_time_in_seconds
, CASE
WHEN target_recovery_time_in_seconds = 60
THEN NULL
ELSE 'ALTER DATABASE [' + [name] + ']'
+ ' SET TARGET_RECOVERY_TIME = 60 SECONDS;'
END AS alter_command
FROM sys.databases
WHERE [name] NOT IN ('master','model','msdb','tempdb')
@ghotz
ghotz / view-ag-listener-details.sql
Created May 8, 2024 08:06
Various Availability Groups metadata queries
SELECT AG1.[name] AS ag_name
, AL1.dns_name AS ag_listener_dns_name
, AL1.[port] AS ag_listener_tcp_port
, AL2.ip_address AS ag_listener_ip_address
, AL2.ip_subnet_mask AS ag_listener_ip_subnet_mask
FROM sys.availability_groups AS AG1
JOIN sys.availability_group_listeners AS AL1
ON AG1.group_id = AL1.group_id
JOIN sys.availability_group_listener_ip_addresses AS AL2
ON AL1.listener_id = AL2.listener_id
@ghotz
ghotz / auto-deny.ps1
Last active May 7, 2024 04:40
Auto ban IP addresses by POST requests total size over a certain threshold in the last http log file
# Warning: remember to whitelist who you want to allow to post by entering their IP addresses in the Azure Portal
import-module Az;
$TenantID = 'YOURTENANTID';
$SubscriptionID = 'YOURSUBID'
$ResourceGroupName = 'WebSite';
$AppServiceName = 'YOURSERVICENAME';
$MyIP = (Invoke-WebRequest -uri "http://ifconfig.me/ip").Content; #avoid self-banning
$MaxPostsBytes = 100KB;
# Authenticate to Azure if not already authenticated