@@ -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
537534BEGIN
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 ';
549559END
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
0 commit comments