# ============================================================================
# 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
Recreate-offline-db.ps1 recreates offline_db using latest checkpoint found.
.Description
This script recreates offline_db files from the latest checkpoint. If it fails, then
check to see if the most recent checkpoint in the c:\p4\INSTANCE\checkpoints directory is
bad (ie doesn't look like the right size compared to the others), and if so, delete it
and rerun this script. If the error you are getting is that the journal replay failed,
then the only option is to run live-checkpoint.ps1 script (which locks database while
it runs).
.Parameter sdp-instance
The specified instance to process
.Example
recreate-offline-db.ps1 Master
.Example
recreate-offline-db.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 = "recreate-offline-db.ps1"
$global:ScriptTask = "Recreate offline db"
$global:LogFileName = "recreate-offline-db.log"
Parse-SDPConfigFile $MyInvocation.MyCommand.Path
Create-LogFile
$OrigPath = convert-path .
Set-Location -Path $global:LOGS_DIR
try {
Ensure-CheckpointNotRunning
Get-CurrentJournalCounter
# Drop the journal number by one since we are not truncating the journal and
# replay_journals_to_offline_db assumes a truncate_journal has been run.
$global:JOURNAL_NUM = $global:JOURNAL_NUM - 1
$global:CHECKPOINT_NUM = $global:JOURNAL_NUM + 1
Recreate-OfflineDBFiles
Invoke-P4Login
Get-OfflineJournalCounter
Replay-JournalsToOfflineDB
# Don't remove other files such as logs etc
Log "End ${global:SDP_INSTANCE_P4SERVICE_NAME} ${global:ScriptTask}"
Signal-CheckpointComplete
Write-Output "`r`n${global:ScriptTask} completed successfully - see ${global:logfile}"
}
Catch
{
write-error $error[0].ScriptStackTrace
LogException $_.Exception
Write-Output "`r`nFAILED - ${global:ScriptTask} - see ${global:logfile}"
}
Set-Location -Path $OrigPath