Toolkit/Public/New-RscMssqlRestore.ps1
|
#Requires -Version 3 function New-RscMssqlRestore { <# .SYNOPSIS Performs an in-place restore of a Microsoft SQL Server database. .DESCRIPTION Restores a SQL Server database back to its original host, instance, and database name at the specified point in time. This is an in-place recovery operation; if you need to copy a database to a different location or name, use New-RscMssqlExport instead. Omitting -FinishRecovery leaves the database in NORECOVERY mode, which is useful when you plan to apply additional log backups. .LINK Schema reference: https://rubrikinc.github.io/rubrik-api-documentation/schema/reference .PARAMETER RscMssqlDatabase The MSSQL database object to restore. Pipe from Get-RscMssqlDatabase. .PARAMETER FinishRecovery Bring the database fully online after restore. When omitted the database is left in NORECOVERY mode. .PARAMETER MaxDataStreams Number of parallel data streams for the restore (1-8, default 2). Test in a non-production environment before increasing. .PARAMETER RecoveryDateTime The point-in-time to recover to, in UTC. Use Get-RscMssqlDatabaseRecoveryPoint to obtain a properly formatted value. .PARAMETER AsQuery Return the query object instead of running the query. Preliminary read-only queries may still run to gather IDs or other data needed to build the main query. .EXAMPLE Restore AdventureWorks2019 to a specific point in time. $db = Get-RscMssqlDatabase -Name AdventureWorks2019 New-RscMssqlRestore -RscMssqlDatabase $db -RecoveryDateTime "2023-10-27 08:37:00.000Z" -FinishRecovery .EXAMPLE Restore a database and leave it in NORECOVERY mode for further log restores. $db = Get-RscMssqlDatabase -Name AdventureWorks2019 New-RscMssqlRestore -RscMssqlDatabase $db -RecoveryDateTime "2023-10-27 08:37:00.000Z" #> [CmdletBinding( )] Param( [Parameter( Mandatory = $true )] [RubrikSecurityCloud.Types.MssqlDatabase]$RscMssqlDatabase, [Parameter( Mandatory = $false )] [switch]$FinishRecovery, [ValidateRange(1, 8)] [Parameter( Mandatory = $false )][int]$MaxDataStreams = 2, [Parameter( Mandatory = $true )][datetime]$RecoveryDateTime, [Parameter( Mandatory = $false, ValueFromPipeline = $false, HelpMessage = "Return the query object instead of running the query" )][Switch]$AsQuery # [Parameter( # ParameterSetName = 'Recovery_LSN', # Mandatory = $false, # ValueFromPipeline = $false # )] # [string]$RecoveryLSN, ) Process { Write-Debug "- Running New-RscMssqlRestore" #region Create Query $query = New-RscMutation -Gql restoreMssqlDatabase $query.Var.input = New-Object -TypeName RubrikSecurityCloud.Types.RestoreMssqlDatabaseInput $query.Var.input.id = "$($RscMssqlDatabase.Id)" $query.Var.input.config = New-Object RubrikSecurityCloud.Types.RestoreMssqlDbJobConfigInput $query.Var.input.config.finishRecovery = $FinishRecovery If (![string]::IsNullOrEmpty($maxDataStreams)){$query.Var.input.config.maxDataStreams = $maxDataStreams} $query.Var.input.config.recoveryPoint = New-Object RubrikSecurityCloud.Types.MssqlRecoveryPointInput $query.Var.input.config.recoveryPoint.date = $RecoveryDateTime #endregion if ( $AsQuery ) { return $query } $result = $query.Invoke() $result } } |