Skip to content

Instantly share code, notes, and snippets.

@bitmetric-bv
Last active March 8, 2022 20:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bitmetric-bv/138a781204b871507ffde2b0068d8dfb to your computer and use it in GitHub Desktop.
Save bitmetric-bv/138a781204b871507ffde2b0068d8dfb to your computer and use it in GitHub Desktop.
Backup Qlik Sense Repository, Log Database and Shared Persistence folder
#requires -version 4
<#
.SYNOPSIS
Backup the Qlik Sense Repository and Log database, as well as the Qlik Share
.DESCRIPTION
Backs up the Qlik Sense Repository (QSR) and centralized logging (QLogs)
databases from Postgres, as well as the contents of the Qlik Sendse Shared
Persistence folder (ArchivedLogs, Apps, StaticContent and CustomData folders).
.NOTES
Version: 1.2
Author: Barry Harmsen / Bitmetric
Creation Date: 2019-04-11
Purpose/Change: Initial script development
#>
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
$start_time = (Get-Date)
$backup_repo_folder = "d:\backup\repository" # Target directory for repository backups
$backup_share_folder = "d:\backup\qlikshare" # Target directory for Qlik Share backups
$log_folder = "d:\backup\log" # Folder for log files
$file_prefix = (Get-Date -Format FileDateTime).ToString() # Prefix for backed up QVFs (and log file)
$days_to_keep = "14" # Number of days to keep backups
$backup_user = "qliksensebackup"
$postgres_folder = "D:\Program Files\Qlik\Sense\Repository\PostgreSQL\9.6\bin" # Location of Postgres binaries
$source_qlikshare_folder = "d:\QlikSense" # Location of the Qlik Sense shared persistence folder
$source_qlikshare_filter = "Apps|ArchivedLogs|CustomData|StaticContent" # List of folders to include in backup
# Delete old backups
Write-Output "Removing backups older than $days_to_keep days"
$date_remove = (Get-Date).AddDays(-$days_to_keep)
Get-ChildItem -Path $backup_repo_folder -Recurse | Where { ! $_.PSIsContainer } | Where-Object { $_.LastWriteTime -lt $date_remove } | Remove-Item
Get-ChildItem -Path $backup_share_folder -Recurse | Where { ! $_.PSIsContainer } | Where-Object { $_.LastWriteTime -lt $date_remove } | Remove-Item
# Send stop command to service and wait for completion
function stopService([string]$service_name) {
$service = Get-Service -Name $service_name
if($service.status -eq "Running") {
Write-Output "Stopping $service_name"
Stop-Service $service
$service.WaitForStatus("Stopped")
Write-Output "$service_name stopped"
} else {
Write-Output "$service_name already stopped"
}
}
# Send start command to service and wait for completion
function startService([string]$service_name) {
$service = Get-Service -Name $service_name
if($service.status -eq "Stopped") {
Write-Output "Starting $service_name"
Start-Service $service
$service.WaitForStatus("Running")
Write-Output "$service_name started"
} else {
Write-Output "$service_name already started"
}
}
Start-Transcript -Path "$($log_folder)\$($file_prefix)_backup_qliksense_log.txt" -Force
Write-Output "Stopping Qlik Services"
stopService "QlikSenseEngineService"
stopService "QlikSenseSchedulerService"
stopService "QlikSensePrintingService"
stopService "QlikSenseServiceDispatcher"
stopService "QlikLoggingService"
stopService "QlikSenseProxyService"
stopService "QlikSenseRepositoryService"
cd $postgres_folder
Write-Output "Backing up QSR database"
.\pg_dump -h localhost -p 4432 -U $backup_user -w -F t -f "$($backup_repo_folder)\$($file_prefix)_QSR.tar" QSR
Write-Output "Backing up QLogs database"
.\pg_dump -h localhost -p 4432 -U $backup_user -w -F t -f "$($backup_repo_folder)\$($file_prefix)_QLogs.tar" QLogs
Write-Output "Backup up Qlik Shared Persistence folder"
$qlikshare_folders = Get-ChildItem -Path $source_qlikshare_folder -Directory |
Where-Object {$_.Name -match $source_qlikshare_filter}
$qlikshare_destination = "$($backup_share_folder)\$($file_prefix)_qlikshare.zip"
Write-Output "Destination: $($qlikshare_destination)"
ForEach($qlikshare_folder in $qlikshare_folders) {
Write-Output "Adding $($qlikshare_folder.FullName)"
Compress-Archive -Path $qlikshare_folder.FullName -DestinationPath $qlikshare_destination -Update
}
Write-Output "Starting Qlik Services"
startService "QlikSenseRepositoryService"
startService "QlikSenseProxyService"
startService "QlikLoggingService"
startService "QlikSenseServiceDispatcher"
startService "QlikSensePrintingService"
startService "QlikSenseSchedulerService"
startService "QlikSenseEngineService"
$elapsed_time = (Get-Date) - $start_time
Write-Output "Script runtime"
Write-Output "--------------"
Write-Output $elapsed_time
Stop-Transcript
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment