@@ -511,6 +511,90 @@ Describe $CommandName -Tag IntegrationTests {
511511 }
512512 }
513513
514+ Context " SetSourceOffline regression test for issue #9546" {
515+ BeforeAll {
516+ $PSDefaultParameterValues [" *-Dba*:EnableException" ] = $true
517+
518+ $splatStopProcess = @ {
519+ SqlInstance = $TestConfig.instance2 , $TestConfig.instance3
520+ Program = " dbatools PowerShell module - dbatools.io"
521+ }
522+ Get-DbaProcess @splatStopProcess | Stop-DbaProcess - WarningAction SilentlyContinue
523+
524+ $random = Get-Random
525+ $offlineTestDb = " dbatoolsci_offline_test$random "
526+
527+ $server2 = Connect-DbaInstance - SqlInstance $TestConfig.instance2
528+ $server2.Query (" CREATE DATABASE $offlineTestDb ; ALTER DATABASE $offlineTestDb SET AUTO_CLOSE OFF WITH ROLLBACK IMMEDIATE" )
529+
530+ $server3 = Connect-DbaInstance - SqlInstance $TestConfig.instance3
531+ $server3.Query (" CREATE DATABASE $offlineTestDb ; ALTER DATABASE $offlineTestDb SET AUTO_CLOSE OFF WITH ROLLBACK IMMEDIATE" )
532+
533+ $PSDefaultParameterValues.Remove (" *-Dba*:EnableException" )
534+ }
535+
536+ AfterAll {
537+ $PSDefaultParameterValues [" *-Dba*:EnableException" ] = $true
538+
539+ $splatRemoveDbs = @ {
540+ SqlInstance = $TestConfig.instance2 , $TestConfig.instance3
541+ Database = $offlineTestDb
542+ }
543+ Remove-DbaDatabase @splatRemoveDbs - ErrorAction SilentlyContinue
544+
545+ $PSDefaultParameterValues.Remove (" *-Dba*:EnableException" )
546+ }
547+
548+ It " Should not set source database offline when copy operation fails" {
549+ $splatCopyOffline = @ {
550+ Source = $TestConfig.instance2
551+ Destination = $TestConfig.instance3
552+ Database = $offlineTestDb
553+ BackupRestore = $true
554+ UseLastBackup = $true
555+ SetSourceOffline = $true
556+ WarningAction = " SilentlyContinue"
557+ }
558+ $results = Copy-DbaDatabase @splatCopyOffline
559+
560+ $results.Status | Should - Be " Skipped"
561+ $results.Notes | Should - Be " Already exists on destination"
562+
563+ $sourceDb = Get-DbaDatabase - SqlInstance $TestConfig.instance2 - Database $offlineTestDb
564+ $sourceDb.Status | Should -Not - BeLike " *Offline*"
565+ }
566+
567+ It " Should set source database offline when copy operation succeeds" {
568+ $splatRemoveDestDb = @ {
569+ SqlInstance = $TestConfig.instance3
570+ Database = $offlineTestDb
571+ }
572+ Remove-DbaDatabase @splatRemoveDestDb
573+
574+ $splatBackup = @ {
575+ SqlInstance = $TestConfig.instance2
576+ Database = $offlineTestDb
577+ BackupDirectory = $NetworkPath
578+ }
579+ $null = Backup-DbaDatabase @splatBackup
580+
581+ $splatCopySuccess = @ {
582+ Source = $TestConfig.instance2
583+ Destination = $TestConfig.instance3
584+ Database = $offlineTestDb
585+ BackupRestore = $true
586+ UseLastBackup = $true
587+ SetSourceOffline = $true
588+ }
589+ $results = Copy-DbaDatabase @splatCopySuccess
590+
591+ $results [0 ].Status | Should - Be " Successful"
592+
593+ $sourceDb = Get-DbaDatabase - SqlInstance $TestConfig.instance2 - Database $offlineTestDb
594+ $sourceDb.Status | Should - BeLike " *Offline*"
595+ }
596+ }
597+
514598 if ($env: azurepasswd ) {
515599 Context " Copying via Azure storage" {
516600 BeforeAll {
0 commit comments