diff --git a/docs/cmdlets-reference/restore-cohesityremotemssqlobject-wrapper.md b/docs/cmdlets-reference/restore-cohesityremotemssqlobject-wrapper.md deleted file mode 100644 index 4b553056..00000000 --- a/docs/cmdlets-reference/restore-cohesityremotemssqlobject-wrapper.md +++ /dev/null @@ -1,289 +0,0 @@ -# Restore-CohesityRemoteMSSQLObject-Wrapper - -## SYNOPSIS -From remote cluster restores the specified MS SQL object from a previous backup. - -## SYNTAX - -### Default (Default) -``` -Restore-CohesityRemoteMSSQLObject-Wrapper [-CaptureTailLogs] [-DbRestoreOverwritePolicy] [-JobId ] [-KeepCDC] [-NewDatabaseName ] [-NewInstanceName ] [-SqlHost ] [-RestoreTimeSecs ] [-SqlObjectName ] [-TargetHost ] [-TargetDataFilesDirectory ] [-TargetLogFilesDirectory ] [-TargetSecondaryDataFilesDirectoryList ] -``` - -## DESCRIPTION -From remote cluster restores the specified MS SQL object from a last successful backup. - -## EXAMPLES - -### EXAMPLE 1 -``` -Restore-CohesityRemoteMSSQLObject-Wrapper -JobId 1234 -SqlHost x.x.x.x -SqlObjectName "MSSQLSERVER/database" -TargetHost y.y.y.y -CaptureTailLogs:$false -NewDatabaseName database_new -NewInstanceName SQLInstance_new -TargetDataFilesDirectory "C:\" -TargetLogFilesDirectory "C:\temp" -DbRestoreOverwritePolicy:$true -``` - -Restore MSSQL database from remote cluster with Job Id 1234, SqlHost x.x.x.x and SqlObjectName MSSQLSERVER/database at TargetHost y.y.y.y from last successfull backup, with existing DB overwrite policy - -For secondary data files, construct the $patternList as follows -$patternList = @() -$pattern1 = @{filePattern = "*.mdf"; targetDirectory = "c:\test"} -$pattern2 = @{filePattern = "*.ldf"; targetDirectory = "c:\test1"} -$patternList += $pattern1 -$patternList += $pattern2 - -## PARAMETERS - -### -SqlHost -Specifies the SQL host from which database need to be restored. - -```yaml -Type: String -Parameter Sets: (All) -Aliases: - -Required: True -Position: Named -Default value: 0 -Accept pipeline input: False -Accept wildcard characters: False -``` - -### -SqlObjectName -Specifies the name of the SQL Object to be restored. - -```yaml -Type: String -Parameter Sets: (All) -Aliases: - -Required: True -Position: Named -Default value: 0 -Accept pipeline input: False -Accept wildcard characters: False -``` - -### -JobId -Specifies the job id that backed up this MS SQL instance and will be used for this restore. - -```yaml -Type: Int64 -Parameter Sets: (All) -Aliases: - -Required: True -Position: Named -Default value: 0 -Accept pipeline input: False -Accept wildcard characters: False -``` - -### -CaptureTailLogs -Specifies if the tail logs are to be captured before the restore operation. -This is only applicable if restoring the SQL database to its hosting Protection Source and the database is not being renamed. - -```yaml -Type: SwitchParameter -Parameter Sets: (All) -Aliases: - -Required: False -Position: Named -Default value: False -Accept pipeline input: False -Accept wildcard characters: False -``` - -### -DbRestoreOverwritePolicy -This field will overwrite the existing db contents if it sets to true -By default the db overwrite policy is false - -```yaml -Type: SwitchParameter -Parameter Sets: (All) -Aliases: - -Required: False -Position: Named -Default value: False -Accept pipeline input: False -Accept wildcard characters: False -``` - -### -KeepCDC -This field prevents "change data capture" settings from being reomved. -When a database or log backup is restored on another server and database is recovered. - -```yaml -Type: SwitchParameter -Parameter Sets: (All) -Aliases: - -Required: False -Position: Named -Default value: False -Accept pipeline input: False -Accept wildcard characters: False -``` - -### -NewDatabaseName -Specifies a new name for the restored database. - -```yaml -Type: String -Parameter Sets: (All) -Aliases: - -Required: False -Position: Named -Default value: None -Accept pipeline input: False -Accept wildcard characters: False -``` - -### -NewInstanceName -Specifies the instance name of the SQL Server that should be restored. - -```yaml -Type: String -Parameter Sets: (All) -Aliases: - -Required: False -Position: Named -Default value: None -Accept pipeline input: False -Accept wildcard characters: False -``` - -### -RestoreTimeSecs -Specifies the time in the past to which the SQL database needs to be restored. -This allows for granular recovery of SQL databases. -If not specified, the SQL database will be restored from the full/incremental snapshot. - -```yaml -Type: Int64 -Parameter Sets: (All) -Aliases: - -Required: False -Position: Named -Default value: 0 -Accept pipeline input: False -Accept wildcard characters: False -``` - -### -TargetDataFilesDirectory -Specifies the directory where to put the database data files. -Missing directory will be automatically created. -This field must be set if restoring to a different target host. - -```yaml -Type: String -Parameter Sets: (All) -Aliases: - -Required: False -Position: Named -Default value: None -Accept pipeline input: False -Accept wildcard characters: False -``` - -### -TargetLogFilesDirectory -Specifies the directory where to put the database log files. -Missing directory will be automatically created. -This field must be set if restoring to a different target host. - -```yaml -Type: String -Parameter Sets: (All) -Aliases: - -Required: False -Position: Named -Default value: None -Accept pipeline input: False -Accept wildcard characters: False -``` - -### -TargetSecondaryDataFilesDirectoryList -Specifies the secondary data filename pattern and corresponding directories of the DB. -Secondary data -files are optional and are user defined. -The recommended file extension for secondary files is -".ndf". -If this option is specified and the destination folders do not exist they will be -automatically created. -This field can be set only if restoring to a different target host. - -```yaml -Type: Object[] -Parameter Sets: (All) -Aliases: - -Required: False -Position: Named -Default value: None -Accept pipeline input: False -Accept wildcard characters: False -``` - -### -TargetHost -Specifies the target host if the application is to be restored to a different host. - -```yaml -Type: String -Parameter Sets: (All) -Aliases: - -Required: True -Position: Named -Default value: 0 -Accept pipeline input: False -Accept wildcard characters: False -``` - -### -WhatIf -Shows what would happen if the cmdlet runs. -The cmdlet is not run. - -```yaml -Type: SwitchParameter -Parameter Sets: (All) -Aliases: wi - -Required: False -Position: Named -Default value: None -Accept pipeline input: False -Accept wildcard characters: False -``` - -### -Confirm -Prompts you for confirmation before running the cmdlet. - -```yaml -Type: SwitchParameter -Parameter Sets: (All) -Aliases: cf - -Required: False -Position: Named -Default value: None -Accept pipeline input: False -Accept wildcard characters: False -``` - -### CommonParameters -This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). - -## INPUTS - -## OUTPUTS - -## NOTES -Published by Cohesity - -## RELATED LINKS - -[https://cohesity.github.io/cohesity-powershell-module/#/README](https://cohesity.github.io/cohesity-powershell-module/#/README) - diff --git a/docs/cmdlets-reference/restore-cohesityremotemssqlobject.md b/docs/cmdlets-reference/restore-cohesityremotemssqlobject.md index fa49443f..1ea796ec 100644 --- a/docs/cmdlets-reference/restore-cohesityremotemssqlobject.md +++ b/docs/cmdlets-reference/restore-cohesityremotemssqlobject.md @@ -23,6 +23,15 @@ Restore-CohesityRemoteMSSQLObject [-TaskName ] -SourceId -HostSo [-DbRestoreOverwritePolicy] [-TargetHostId ] [-WhatIf] [-Confirm] [] ``` +### SQL Host +``` +Restore-CohesityRemoteMSSQLObject [-TaskName ] [-SqlHost ] [-SqlObjectName ] [-JobId ] + [-CaptureTailLogs] [-KeepCDC] [-NewDatabaseName ] [-NewInstanceName ] + [-RestoreTimeSecs ] [-TargetDataFilesDirectory ] [-TargetLogFilesDirectory ] + [-TargetSecondaryDataFilesDirectoryList ] [-DbRestoreOverwritePolicy] [-TargetHost ] + [-WhatIf] [-Confirm] [] +``` + ## DESCRIPTION From remote cluster restores the specified MS SQL object from a previous backup. @@ -33,7 +42,7 @@ From remote cluster restores the specified MS SQL object from a previous backup. Restore-CohesityRemoteMSSQLObject -SourceId 1279 -HostSourceId 1277 -JobId 31520 -TargetHostId 770 -CaptureTailLogs:$false -NewDatabaseName CohesityDB_r1 -NewInstanceName MSSQLSERVER -TargetDataFilesDirectory "C:\temp" -TargetLogFilesDirectory "C:\temp" -DbRestoreOverwritePolicy:$true ``` -Restore MSSQL database from remote cluster with database id 1279 , database instance id 1277 and job id as 31520 +Restore MSSQL database from remote cluster with database id 1279 , database instance id 1277 and job id as 31520 with the latest recoverable snapshot information. $mssqlObjects = Find-CohesityObjectsForRestore -Environments KSQL Get the source id, $mssqlObjects\[0\].SnapshottedSource.Id Get the source instance id, $mssqlObjects\[0\].SnapshottedSource.SqlProtectionSource.OwnerId @@ -58,6 +67,13 @@ $pattern2 = @{filePattern = "*.ldf"; targetDirectory = "c:\test1"} $patternList += $pattern1 $patternList += $pattern2 +### EXAMPLE 4 +``` +Restore-CohesityRemoteMSSQLObject -SqlHost x.x.x.x -JobId 31520 -SqlObjectName instance/databse_1 -TargetHost y.y.y.y -CaptureTailLogs:$false -NewDatabaseName CohesityDB_r1 -NewInstanceName MSSQLSERVER -TargetDataFilesDirectory "C:\temp" -TargetLogFilesDirectory "C:\temp" -DbRestoreOverwritePolicy:$true +``` + +Restore MSSQL database from remote cluster with database name database_1 from the sql host x.x.x.x, and job id as 31520 to the target host y.y.y.y with latest recoverable snapshot information. + ## PARAMETERS ### -TaskName @@ -84,7 +100,7 @@ Type: Int64 Parameter Sets: (All) Aliases: -Required: True +Required: False Position: Named Default value: 0 Accept pipeline input: False @@ -99,7 +115,7 @@ Type: Int64 Parameter Sets: (All) Aliases: -Required: True +Required: False Position: Named Default value: 0 Accept pipeline input: False @@ -217,6 +233,51 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -SqlHost +Specifies the SQL host from which database need to be restored. + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: 0 +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -SqlObjectName +Specifies the name of the SQL Object to be restored. + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: 0 +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -TargetHost +Specifies the target host if the application is to be restored to a different host. + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: 0 +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -RestoreTimeSecs Specifies the time in the past to which the SQL database needs to be restored. This allows for granular recovery of SQL databases. diff --git a/docs/sidebar.md b/docs/sidebar.md index 0e624ec9..369d96a5 100644 --- a/docs/sidebar.md +++ b/docs/sidebar.md @@ -146,7 +146,6 @@ - [Find-CohesityObjectsForRestore](cmdlets-reference/find-cohesityobjectsforrestore.md) - [Restore-CohesityMSSQLObject](cmdlets-reference/restore-cohesitymssqlobject.md) - [Restore-CohesityRemoteMSSQLObject](cmdlets-reference/restore-cohesityremotemssqlobject.md) -- [Restore-CohesityRemoteMSSQLObject-Wrapper](cmdlets-reference/restore-cohesityremotemssqlobject-wrapper.md) - [Restore-CohesityVMwareVM](cmdlets-reference/restore-cohesityvmwarevm.md) - [Restore-CohesityHyperVVM](cmdlets-reference/restore-cohesityhypervvm.md) - [Restore-CohesityAcropolisVM](cmdlets-reference/restore-cohesityacropolisvm.md) diff --git a/src/Cohesity.Powershell/Cohesity.PowerShell.Core.psd1 b/src/Cohesity.Powershell/Cohesity.PowerShell.Core.psd1 index fa237e51..65c500f8 100644 --- a/src/Cohesity.Powershell/Cohesity.PowerShell.Core.psd1 +++ b/src/Cohesity.Powershell/Cohesity.PowerShell.Core.psd1 @@ -8,7 +8,7 @@ RootModule = 'Cohesity.PowerShell.Core.dll' # Version number of this module. -ModuleVersion = '1.9.5' +ModuleVersion = '1.9.6' # Supported PSEditions # CompatiblePSEditions = @() diff --git a/src/Cohesity.Powershell/Cohesity.PowerShell.psd1 b/src/Cohesity.Powershell/Cohesity.PowerShell.psd1 index 1abbca8e..507d3a1c 100644 --- a/src/Cohesity.Powershell/Cohesity.PowerShell.psd1 +++ b/src/Cohesity.Powershell/Cohesity.PowerShell.psd1 @@ -8,7 +8,7 @@ RootModule = 'Cohesity.PowerShell.dll' # Version number of this module. -ModuleVersion = '1.9.5' +ModuleVersion = '1.9.6' # Supported PSEditions # CompatiblePSEditions = @() diff --git a/src/Cohesity.Powershell/Scripts/Restore/Restore-CohesityRemoteMSSQLObject.ps1 b/src/Cohesity.Powershell/Scripts/Restore/Restore-CohesityRemoteMSSQLObject.ps1 index 28696d17..16e18e3f 100644 --- a/src/Cohesity.Powershell/Scripts/Restore/Restore-CohesityRemoteMSSQLObject.ps1 +++ b/src/Cohesity.Powershell/Scripts/Restore/Restore-CohesityRemoteMSSQLObject.ps1 @@ -16,6 +16,9 @@ function Restore-CohesityRemoteMSSQLObject { Get the source instance id, $mssqlObjects[0].SnapshottedSource.SqlProtectionSource.OwnerId Use the DbRestoreOverwritePolicy:$true for overriding the existing database .EXAMPLE + Restore-CohesityRemoteMSSQLObject -SqlHost x.x.x.x -JobId 31520 -SqlObjectName instance/databse_1 -TargetHost y.y.y.y -CaptureTailLogs:$false -NewDatabaseName CohesityDB_r1 -NewInstanceName MSSQLSERVER -TargetDataFilesDirectory "C:\temp" -TargetLogFilesDirectory "C:\temp" -DbRestoreOverwritePolicy:$true + Restore MSSQL database from remote cluster with database name database_1 from the sql host x.x.x.x, and job id as 31520 to the target host y.y.y.y + .EXAMPLE Restore-CohesityRemoteMSSQLObject -SourceId 3101 -HostSourceId 3099 -JobId 51275 -TargetHostId 3098 -CaptureTailLogs:$false -NewDatabaseName ReportServer_r26 -NewInstanceName MSSQLSERVER -TargetDataFilesDirectory "C:\temp" -TargetLogFilesDirectory "C:\temp" -StartTime 1616956306627994 -JobRunId 60832 -RestoreTimeSecs 1616958037 Request for restore MSSQL object with RestoreTimeSecs (point in time) parameter, StartTime and JobRunId. .EXAMPLE @@ -159,12 +162,19 @@ function Restore-CohesityRemoteMSSQLObject { } if ($SqlHost) { + # Get the list of SQL objects that can be restored and fetch the id of the specified SQL host + $sqlRecords = Find-CohesityObjectsForRestore -Environments KSQL -JobIds $JobId | Where-Object { $_.ObjectName -eq $SqlObjectName } + $vmList = $searchVMResult.vms foreach ($vm in $vmList) { if ($vm.vmDocument.objectAliases[0] -eq $SqlHost) { - $SourceId = $record.SnapshottedSource.Id - $HostSourceId = $record.SnapshottedSource.ParentId - break + foreach ($record in $sqlRecords) { + if ($vm.vmDocument.objectId.entity.sqlEntity.ownerId -eq $record.SnapshottedSource.ParentId) { + $SourceId = $record.SnapshottedSource.Id + $HostSourceId = $record.SnapshottedSource.ParentId + break + } + } } } } @@ -278,7 +288,7 @@ function Restore-CohesityRemoteMSSQLObject { $MSSQL_OBJECT_RESTORE_TYPE = 3 $MSSQL_TARGET_PHYSICAL_ENTITY_HOST_TYPE = 1 $MSSQL_TARGET_PHYSICAL_ENTITY_TYPE = 1 - $targetHost = [PSCustomObject]@{ + $targetHostObject = [PSCustomObject]@{ id = $TargetHostId } $targetHostParentSource = $null @@ -288,8 +298,8 @@ function Restore-CohesityRemoteMSSQLObject { type = $MSSQL_TARGET_VMWARE_ENTITY_TYPE name = $protectionSourceObject.vmWareProtectionSource.name } - $targetHost | Add-Member -NotePropertyName parentId -NotePropertyValue $protectionSourceObject.parentId - $targetHost | Add-Member -NotePropertyName vmwareEntity -NotePropertyValue $vmwareEntity + $targetHostObject | Add-Member -NotePropertyName parentId -NotePropertyValue $protectionSourceObject.parentId + $targetHostObject | Add-Member -NotePropertyName vmwareEntity -NotePropertyValue $vmwareEntity $targetHostParentSource = @{ id = $protectionSourceObject.parentId } @@ -304,9 +314,9 @@ function Restore-CohesityRemoteMSSQLObject { hostType = $MSSQL_TARGET_PHYSICAL_ENTITY_HOST_TYPE osName = $protectionSourceObject.physicalProtectionSource.osName } - $targetHost | Add-Member -NotePropertyName physicalEntity -NotePropertyValue $physicalEntity + $targetHostObject | Add-Member -NotePropertyName physicalEntity -NotePropertyValue $physicalEntity } - $targetHost | Add-Member -NotePropertyName type -NotePropertyValue $MSSQL_TARGET_HOST_TYPE + $targetHostObject | Add-Member -NotePropertyName type -NotePropertyValue $MSSQL_TARGET_HOST_TYPE $sqlRestoreParams = [PSCustomObject]@{ captureTailLogs = $CaptureTailLogs.IsPresent @@ -333,7 +343,7 @@ function Restore-CohesityRemoteMSSQLObject { appEntity = $searchedVMDetails.vmDocument.objectId.entity restoreParams = @{ sqlRestoreParams = $sqlRestoreParams - targetHost = $targetHost + targetHost = $targetHostObject targetHostParentSource = $targetHostParentSource } }