daily-backup.ps1 #2

  • //
  • guest/
  • perforce_software/
  • sdp/
  • main/
  • Server/
  • Windows/
  • p4/
  • common/
  • bin/
  • daily-backup.ps1
  • View
  • Commits
  • Open Download .zip Download (2 KB)
# ============================================================================
# Copyright and license info is available in the LICENSE file included with
# the Server Deployment Package (SDP), and also available online:
# https://swarm.workshop.perforce.com/projects/perforce-software-sdp/view/main/LICENSE
# ----------------------------------------------------------------------------

<#
    .Synopsis
        Daily_Backup.ps1 performs journal rotation to offline database and creates offline checkpoint
        
    .Description
        Admin access is required.
        Also recovers from the offline checkpoint to ensure that it is good, and that offline
        DB files are unfragmented.
        
    .Parameter sdp-instance
        The specified instance to backup
        
    .Example
        daily_backup.ps1 Master
        
    .Example
        daily_backup.ps1 1
#>

[CmdletBinding()]
param ([string]$SDPInstance = $(throw "SDPInstance parameter is required."))

Set-StrictMode -Version 2.0

# Source the SDP Functions shared between scripts
$SDPFunctionsPath = Split-Path -parent $MyInvocation.MyCommand.Path | Join-Path -childpath "SDP-Functions.ps1" 
. $SDPFunctionsPath

$global:ScriptName = "Daily-backup.ps1"
$global:ScriptTask = "Daily Backup"
$global:LogFileName = "checkpoint.log"

Parse-SDPConfigFile $MyInvocation.MyCommand.Path
Create-LogFile

$OrigPath = convert-path .
Set-Location -Path $global:LOGS_DIR

try {
    Invoke-P4Login
    Check-OfflineDBUsable
    Check-OfflineDBExists
    Ensure-CheckpointNotRunning
    Get-CurrentJournalCounter
    Get-OfflineJournalCounter
    Truncate-Journal
    Rotate-Logfiles
    Replay-JournalsToOfflineDB
    Create-OfflineCheckpoint
    Recreate-OfflineDBFiles
    Remove-OldCheckpointsAndJournals
    Log-DiskSpace
    Remove-OldLogs
    Log "End ${global:SDP_INSTANCE_P4SERVICE_NAME} ${global:ScriptTask}"
    Send-Email "${env:computername} ${global:SDP_INSTANCE_P4SERVICE_NAME} ${global:ScriptTask} log."
    Set-Counter
    Signal-CheckpointComplete
    Write-Output "`r`n${global:ScriptTask} completed successfully - see ${global:logfile}"
}
Catch
{
    write-error $error[0].ScriptStackTrace
    LogException $_.Exception
    Send-Email "FAILED: ${env:computername} ${global:SDP_INSTANCE_P4SERVICE_NAME} ${global:ScriptTask} log."
    Write-Output "`r`nFAILED - ${global:ScriptTask} - see ${global:logfile}"
}

Set-Location -Path $OrigPath
# Change User Description Committed
#3 27331 C. Thomas Tyler Released SDP 2020.1.27325 (2021/01/29).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#2 22931 Robert Cowham Updated docs for Windows.
New rotate-log-files script.
Working upgrade.ps1
#1 20767 C. Thomas Tyler Released SDP 2016.2.20755 (2016/09/29).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
//guest/perforce_software/sdp/dev/Server/Windows/p4/common/bin/daily-backup.ps1
#7 20640 Robert Cowham Test gets as far as liveCheckpoint
#6 20175 Robert Cowham Set-strictmode
Remove warnings
Improve exception logging
#5 20150 Robert Cowham Refactored names to use PowerShell Verb-Noun convention
#4 20149 Robert Cowham Split rotation of current script log file from rotation of other log files.
#3 20147 Robert Cowham Fix mail subject
#2 20146 Robert Cowham Refactor email sending.
Output final message of success/failure.
#1 20142 Robert Cowham Initial versions of Powershell scripts