In diesem Blogbeitrag möchte ich euch über die Möglichkeit berichten, die drei Citrix-SQL-Datenbanken (Site, Monitoring, Logging) auf einen anderen SQL-Server zu migrieren. Ich schreibe diesen Beitrag, da ich im Internet komischerweise keine für mich passende Anleitung gefunden habe. Ich war dadurch gezwungen, mir die Infos von mehreren Seiten zusammenzutragen. Eigentlich ist das Migrieren der Datenbanken kein Hexenwerk, trotzdem sollte man für einen reibungslosen Ablauf ein paar Dinge beachten.
- ) Datenbank sichern
Im ersten Schritt sollten wir die Datenbanken auf dem jetzigen SQL-Server sichern. Sollten wir nicht wissen, auf welchem Server sich die Datenbanken aktuell befinden, können wir das mit PowerShell-Befehlen feststellen.
asnp citrix* <- Die Citrix PowerShell Module Get-BrokerDBConnection <- Zeigt die Site Database Verbindung an Get-LogDBConnection <- Zeigt die Configuration Logging Database Verbindung an Get-MonitorDBConnection <- Zeigt die Monitor Database Verbindung an

Um mit der Sicherung zu beginnen, sollten wir zuvor dafür sorgen, dass der Delivery Controller (global für die Site) keine weiteren Daten in die Monitoring- und Logging-Datenbank schreibt.
Set-MonitorConfiguration -DataCollectionEnabled $false <- Deaktiviert das Monitoring Set-LogSite -State Disabled <- Deaktiviert das Logging

Entweder verbinden wir uns jetzt Remote oder direkt auf dem SQL Server via SQL Management Studio zur entsprechenden Instanz des SQL Servers.

Durch einen Rechtsklick auf die jeweilige Datenbank öffnet sich ein Kontextmenü. Unter Tasks befindet sich der Punkt Back Up

Im nächsten Dialog müssen wir das Backupziel auswählen. In diesem Fall habe ich den Ordner Temp gewählt. Zusätzlich kann man einen Namen für die Backupdatei wählen. Bitte darauf achten: Wenn ihr keine Dateiendung angibt, wird die Datei ohne Endung gespeichert. 🙂 Wir wiederholen diesen Schritt für alle drei Datenbanken.

Nun wechseln wir auf den neuen SQL-Server, auf dem wir die drei Datenbanken einspielen wollen. In unserem Beispiel heißt der neue Server ADM01. Nachdem wir auch hier via Management Studio verbunden sind, klicken wir mit der rechten Maustaste auf den Punkt Database und wählen im Kontextmenü Restore Database.

Hier könnt ihr dann unter Device eure Datenbank lokal oder auf einem Netzlaufwerk suchen. Achtung: Ihr könnt zwar eine Mehrfachauswahl treffen (mehrere Dateien gleichzeitig), aber trotzdem nur die zuletzt gewählte Datenbank unter dem Punkt Database importieren. Falls es dafür doch einen Weg gibt und man alle drei Datenbanken auf einmal importieren kann: gerne per Mail. Ansonsten wiederholen wir den Schritt für jede exportierte Datenbank.

Als Nächstes erstellen wir den Account (Computerkonto) für den Delivery Controller. Da es nicht möglich ist, ein Computerkonto über die Standardfunktion hinzuzufügen, verwenden wir eine kurze SQL-Abfrage. Diesen Vorgang wiederholen wir natürlich für jeden Delivery Controller den wir in unserer Site haben.
create login [itnetx\dehwt-xc01$] from windows

Nachdem wir das Computerkonto hinzugefügt haben, überprüfen wir die Berechtigungen des Computerkontos auf den Datenbanken. Da sich die SID des Computerkontos nicht geändert hat, sollten alle Berechtigungen noch richtig gesetzt sein. Rechte Maustaste auf den entsprechenden Computeraccount → Properties

Unter User Mappings können wir dann einzeln für jede Datenbank die „role membership“ prüfen. Für Configuration Logging ist es:
Logging database – ConfigLoggingSchema_ROLE
Logging database – public

Für die Monitoring Database sind es die folgenden Rollen:
Monitoring database – Monitor_ROLE Monitoring database – public

Abschließend für die Site Database sind es folgende Rollen:
Site database – ADIdentitySchema_ROLSite database – Analytics_ROLE (7.8 and newer)Site database – AppLibrarySchema_ROLE (7.8 and newer)Site database – chr_BrokerSite database – chr_Controller Site database – ConfigLoggingSchema_ROLESite database – ConfigLoggingSiteSchema_ROLESite database – ConfigurationSchema_ROLESite database – DAS_ROLESite database – DesktopUpdateManagerSchema_ROLESite database – EnvTestServiceSchema_ROLESite database – HostingUnitServiceSchema_ROLESite database – Monitor_ROLESite database – MonitorData_ROLESite database – OrchestrationSchema_ROLE (7.11 and newer)Site database – publicSite database – StoreFrontSchema_ROLE (7.8 and newer)Site database – TrustSchema_ROLE (7.11 and newer)

Nachdem wir nun alles für einen reibungslosen Übergang zum neuen Datenbankserver vorbereitet haben, beginnen wir damit die alten Datenbankverbindung vom Delivery Controller zu trennen. Vorab können wir uns noch versichern, dass der Local Host Cache aktiv ist. Damit sind zumindest Shared Desktops beim Umschalten weiter verfügbar. Bestehende Verbindungen zu Hosted Shared Desktops oder Hosted VDI sind von dem Ausfall zudem auch nicht betroffen.
Get-BrokerSite Set-BrokerSite -LocalHostCacheEnabled $true -ConnectionLeasingEnabled $false <- Setzt den LHC sollte er nicht gesetzt sein.

Wir müssen jetzt verschiedene Einträge, die auf unsere alte Datenbank verweisen, „nullen“. Idealerweise schreiben wir uns die Zeilen in der Microsoft ISE oder einem anderen PowerShell Editor eurer Wahl zusammen. Ihr könnt euch auch mit dem folgenden Befehl alle Set-*DBConnection Befehle anzeigen lassen.
get-command set-*DBConnection

Jetzt übertragen wir unsere Befehle in ein Skript. Wichtig ist, dass die AdminDBConnection als letzte genullt wird.
Set-ConfigDBConnection -DBConnection $null Set-AppLibDBConnection –DBConnection $null Set-OrchDBConnection –DBConnection $null Set-TrustDBConnection –DBConnection $null Set-AcctDBConnection -DBConnection $null Set-AnalyticsDBConnection -DBConnection $null Set-HypDBConnection -DBConnection $null Set-ProvDBConnection -DBConnection $null Set-BrokerDBConnection -DBConnection $null Set-EnvTestDBConnection -DBConnection $null Set-SfDBConnection -DBConnection $null Set-MonitorDBConnection -DataStore Monitor -DBConnection $null Set-MonitorDBConnection -DBConnection $null Set-LogDBConnection -DataStore Logging -DBConnection $null Set-LogDBConnection -DBConnection $null Set-AdminDBConnection -DBConnection $null -force

Nachdem wir das auf dem ersten Delivery Controller gemacht haben, müssen wir es natürlich auch auf dem zweiten tun. Entweder verbinden wir uns dort per RDP oder machen es per PowerShell
Enter-PSSession $Hostname
Dort führt ihr natürlich auch das Script aus. Vorher müsst ihr aber dort nochmal die Citrix Module laden wie oben beschrieben.
Nachdem nun alle Datenbankeinträge genullt sind, hat der Delivery Controller den Local Host Cache aktiviert, und eine aktive Steuerung ist nicht mehr möglich. Damit wir diesen Zustand schnell wieder ändern, setzen wir ein weiteres Skript ein. Wichtig sind für euch die oberen 4 Zeilen. Dort pflegt ihr ServerName sowie die Namen der unterschiedlichen Datenbanken. Solltet ihr mehrere SQL-Instanzen haben, müsst ihr die entsprechende Instanz beim ServerName mit angeben.
$ServerName = "ADM01" $SiteDBName = "CitrixDEDHNSite" $LogDBName = "CitrixDEDHNLogging" $MonitorDBName = "CitrixDEDHNMonintoring" $csSite = "Server=$ServerName;Initial Catalog=$SiteDBName;Integrated Security=True;MultiSubnetFailover=True" $csLogging = "Server=$ServerName;Initial Catalog=$LogDBName;Integrated Security=True;MultiSubnetFailover=True" $csMonitoring = "Server=$ServerName;Initial Catalog=$MonitorDBName;Integrated Security=True;MultiSubnetFailover=True" Set-AdminDBConnection -DBConnection $csSite Set-ConfigDBConnection -DBConnection $csSite Set-AcctDBConnection -DBConnection $csSite Set-AnalyticsDBConnection -DBConnection $csSite # 7.6 and newer Set-HypDBConnection -DBConnection $csSite Set-ProvDBConnection -DBConnection $csSite Set-AppLibDBConnection –DBConnection $csSite # 7.8 and newer Set-OrchDBConnection –DBConnection $csSite # 7.11 and newer Set-TrustDBConnection –DBConnection $csSite # 7.11 and newer Set-BrokerDBConnection -DBConnection $csSite Set-EnvTestDBConnection -DBConnection $csSite Set-SfDBConnection -DBConnection $csSite Set-LogDBConnection -DBConnection $csSite Set-LogDBConnection -DataStore Logging -DBConnection $null Set-LogDBConnection -DBConnection $null Set-LogDBConnection -DBConnection $csSite Set-LogDBConnection -DataStore Logging -DBConnection $csLogging Set-MonitorDBConnection -DBConnection $csSite Set-MonitorDBConnection -DataStore Monitor -DBConnection $null Set-MonitorDBConnection -DBConnection $null Set-MonitorDBConnection -DBConnection $csSite Set-MonitorDBConnection -DataStore Monitor -DBConnection $csMonitoring

Nun setzen wir das Script auf dem ersten Delivery Controller ab.

Nachdem das erfolgreich durchgeführt wurde, wechseln wir auf den nächsten Delivery Controller in unserer Site und führen das Skript auch dort aus.
Abschließend aktivieren wir wieder Logging und Monitoring und kontrollieren die Verfügbarkeit der Site im Citrix Studio.
Set-MonitorConfiguration -DataCollectionEnabled $true Set-LogSite -State Enable

Ein Test im Studio über den Zustand der Site

Alternativer Test über die PowerShell
Get-AcctServiceStatus Get-AdminServiceStatus Get-BrokerServiceStatus Get-ConfigServiceStatus Get-EnvTestServiceStatus Get-HypServiceStatus Get-LogServiceStatus Get-MonitorServiceStatus Get-ProvServiceStatus Get-SfServiceStatus Get-AppLibServiceStatus
Ich hoffe, die Anleitung ist für euch hilfreich und ihr könnt sie bei der nächsten Datenbankmigration gebrauchen. Solltet ihr Fragen, Anregungen oder Kritik haben: gerne per Mail. Bis zum nächsten Blogpost.
