Skip to content

Commit 7ec42a5

Browse files
Uwe Jankeclaude
andcommitted
v1.8.7.0: New-sqmOlaUsrDbBackupJob — Job-Step als Prozedur in master
Statt Inline-T-SQL im Job-Step wird eine Hilfsprozedur in master angelegt (master.dbo.[sqm_Run_{JobName}]). Job-Step enthaelt nur noch EXEC master.dbo.[proc]. Ergebnis: Agent-Fenster zeigt einen lesbaren Einzeiler statt einem langen T-SQL-Block. Proc wird bei Neuanlage und -Update frisch DROP+CREATE'd. AlwaysOn-Propagation erstellt die Proc ebenfalls auf Secondaries. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 377781a commit 7ec42a5

3 files changed

Lines changed: 64 additions & 42 deletions

File tree

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
# sqmSQLTool — Changelog
22

3+
## [1.8.7.0] — 2026-07-01
4+
5+
### Erweiterung
6+
7+
**`New-sqmOlaUsrDbBackupJob`** — Hilfsprozedur in master statt Inline-T-SQL im Job-Step
8+
- Umstellung: Job-Step enthaelt nur noch `EXEC master.dbo.[sqm_Run_{JobName}]`.
9+
Der eigentliche Backup-Code wird als gespeicherte Prozedur in master angelegt.
10+
Proc-Name wird aus dem Job-Namen abgeleitet (Sonderzeichen → Unterstrich).
11+
Ergebnis im Agent-Fenster: Job-Step ist auf einen Blick lesbar.
12+
Prozedur wird bei jedem Aufruf (auch `-Update`) frisch DROP+CREATE'd.
13+
Bei AlwaysOn-Propagation erhalten die Secondaries ebenfalls ihre eigene Proc.
14+
315
## [1.8.6.0] — 2026-07-01
416

517
### Bugfix

Public/New-sqmOlaUsrDbBackupJob.ps1

Lines changed: 51 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -523,57 +523,67 @@ function New-sqmOlaUsrDbBackupJob
523523

524524
try
525525
{
526-
# Ola-Kommando aufbauen (vor Job-Check, damit Update-Pfad es direkt nutzen kann)
526+
# Hilfsprozedur in master anlegen — Job-Step enthaelt nur noch EXEC master.dbo.[proc]
527+
$procName = 'sqm_Run_' + ($jobDef.JobName -replace '[\s\-]+', '_' -replace '[^a-zA-Z0-9_]', '')
528+
527529
if ($UseExcludeTable)
528530
{
529-
# Exclude-Liste wird bei jedem Job-Lauf frisch aus sqm_BackupExclude gelesen —
530-
# aenderungen in der Tabelle wirken sofort, ohne den Job neu anlegen zu muessen.
531-
$olaCommand = @"
532-
SET QUOTED_IDENTIFIER ON;
533-
534-
DECLARE @Databases NVARCHAR(MAX) = N'$Databases';
535-
536-
IF OBJECT_ID(N'master.dbo.sqm_BackupExclude', N'U') IS NOT NULL
531+
$procBody = @"
532+
CREATE PROCEDURE master.dbo.[$procName]
533+
AS
537534
BEGIN
538-
DECLARE @Exclusions NVARCHAR(MAX);
539-
SELECT @Exclusions = STUFF((
540-
SELECT ',' + '!' + DatabaseName
541-
FROM master.dbo.sqm_BackupExclude
542-
WHERE IsActive = 1
543-
AND IsOrphaned = 0
544-
FOR XML PATH(''), TYPE
545-
).value('.', 'NVARCHAR(MAX)'), 1, 1, '');
546-
547-
IF @Exclusions IS NOT NULL AND @Exclusions <> ''
548-
SET @Databases = @Databases + ',' + @Exclusions;
535+
SET NOCOUNT ON;
536+
DECLARE @Databases NVARCHAR(MAX) = N'$Databases';
537+
IF OBJECT_ID(N'master.dbo.sqm_BackupExclude', N'U') IS NOT NULL
538+
BEGIN
539+
DECLARE @Exclusions NVARCHAR(MAX);
540+
SELECT @Exclusions = STUFF((
541+
SELECT ',' + '!' + DatabaseName
542+
FROM master.dbo.sqm_BackupExclude
543+
WHERE IsActive = 1
544+
AND IsOrphaned = 0
545+
FOR XML PATH(''), TYPE
546+
).value('.', 'NVARCHAR(MAX)'), 1, 1, '');
547+
IF @Exclusions IS NOT NULL AND @Exclusions <> ''
548+
SET @Databases = @Databases + ',' + @Exclusions;
549+
END
550+
EXECUTE master.dbo.DatabaseBackup
551+
@Databases = @Databases,
552+
@Directory = N'$usrBackupDir',
553+
@BackupType = '$($jobDef.BackupType)',
554+
@Verify = '$Verify',
555+
$cleanupParam
556+
@Compress = '$Compress',
557+
@CheckSum = '$CheckSum',
558+
@LogToTable = '$LogToTable';
549559
END
550-
551-
EXECUTE master.dbo.DatabaseBackup
552-
@Databases = @Databases,
553-
@Directory = N'$usrBackupDir',
554-
@BackupType = '$($jobDef.BackupType)',
555-
@Verify = '$Verify',
556-
$cleanupParam
557-
@Compress = '$Compress',
558-
@CheckSum = '$CheckSum',
559-
@LogToTable = '$LogToTable';
560560
"@
561561
}
562562
else
563563
{
564-
$olaCommand = @"
565-
EXECUTE master.dbo.DatabaseBackup
566-
@Databases = '$Databases',
567-
@Directory = N'$usrBackupDir',
568-
@BackupType = '$($jobDef.BackupType)',
569-
@Verify = '$Verify',
570-
$cleanupParam
571-
@Compress = '$Compress',
572-
@CheckSum = '$CheckSum',
573-
@LogToTable = '$LogToTable';
564+
$procBody = @"
565+
CREATE PROCEDURE master.dbo.[$procName]
566+
AS
567+
BEGIN
568+
SET NOCOUNT ON;
569+
EXECUTE master.dbo.DatabaseBackup
570+
@Databases = '$Databases',
571+
@Directory = N'$usrBackupDir',
572+
@BackupType = '$($jobDef.BackupType)',
573+
@Verify = '$Verify',
574+
$cleanupParam
575+
@Compress = '$Compress',
576+
@CheckSum = '$CheckSum',
577+
@LogToTable = '$LogToTable';
578+
END
574579
"@
575580
}
576-
$olaCommand = ($olaCommand -split "`n" | Where-Object { $_.Trim() -ne '' }) -join "`n"
581+
582+
Invoke-DbaQuery @connParams -Database master -Query "IF OBJECT_ID(N'master.dbo.$procName', N'P') IS NOT NULL DROP PROCEDURE master.dbo.[$procName];" -ErrorAction Stop
583+
Invoke-DbaQuery @connParams -Database master -Query $procBody -ErrorAction Stop
584+
Invoke-sqmLogging -Message "Prozedur 'master.dbo.[$procName]' angelegt/aktualisiert." -FunctionName $functionName -Level "INFO"
585+
586+
$olaCommand = "EXEC master.dbo.[$procName];"
577587

578588
# Vorhandenen Job behandeln
579589
$existingJob = Get-DbaAgentJob @connParams -Job $jobDef.JobName -ErrorAction SilentlyContinue

sqmSQLTool.psd1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
RootModule = 'sqmSQLTool.psm1'
1818

1919
# Version number of this module.
20-
ModuleVersion = '1.8.6.0'
20+
ModuleVersion = '1.8.7.0'
2121

2222
# ID used to uniquely identify this module
2323
GUID = 'c4b10ba2-aee2-4d8d-ad86-a6e97c346ba6'

0 commit comments

Comments
 (0)