Last active
March 8, 2022 20:03
-
-
Save bitmetric-bv/138a781204b871507ffde2b0068d8dfb to your computer and use it in GitHub Desktop.
Backup Qlik Sense Repository, Log Database and Shared Persistence folder
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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