Commands / Invoke-sqmLogShrink
Invoke-sqmLogShrink
PerformancesqmSQLTool v1.8.2+ · Maintenance✓ -WhatIf supported
Shrinks transaction log files (LDF) using DBCC SHRINKFILE. Target size is calculated as a percentage of current size (ShrinkTargetPercent, default 10%) with a minimum threshold (MinTargetMB, default 64 MB). For Always On AG members, automatically redirects to the primary replica. System databases and offline databases are skipped.

Parameters

ParameterTypeRequiredDefaultNotes
-SqlInstancestringOptional$env:COMPUTERNAMETarget SQL Server instance. Auto-redirects to AG primary if applicable.
-SqlCredentialPSCredentialOptionalCredentials for the connection.
-Databasestring[]OptionalAll user DBsTarget databases (wildcards allowed). System and tempdb always skipped.
-AllswitchOptional$falseExplicitly process all user databases.
-ShrinkTargetPercentintOptional10Target as % of current log size (1-99).
-MinTargetMBintOptional64Minimum target size in MB (floor limit).
-ContinueOnErrorswitchSwitch$falseContinue to next database on error.
-EnableExceptionswitchSwitch$falseRe-throw exceptions immediately.
-WhatIf / -ConfirmswitchOptionalShouldProcess (ConfirmImpact: None) guards shrink execution.

Execution Flow

START dbatools available? NO throw: dbatools not found YES Get-DbaDatabase -ExcludeSystem (or filter for user DBs only) Apply -Database wildcard filter | skip system + offline DBs foreach $db in $dbList Get log file info: current size, calculate target TargetSize = max(CurrentSize * ShrinkTargetPercent / 100, MinTargetMB) If AG member: redirect to primary via Get-DbaAvailabilityGroup ShouldProcess? (ConfirmImpact: None) NO WhatIf: log shrink plan continue YES DBCC SHRINKFILE (NOTRUNCATE, TargetSize) catch: log error (continue if -ContinueOnError) Return [PSCustomObject[]] shrink results per database Database, OldSizeMB, TargetSizeMB, NewSizeMB, Status DONE

Examples

Shrink log file to 20% of current size
Invoke-sqmLogShrink -Database "MyDB" -ShrinkTargetPercent 20
All databases with -WhatIf
Invoke-sqmLogShrink -SqlInstance "SQL01" -All -WhatIf