Last Updated on 12. Juni 2020 by Sebastian
In diesem Blogbeitrag möchte ich euch über die Möglichkeit berichten die 3 Citrix SQL Datenbanken ( Site, Monitoring, Logging ) auf einen andren SQL Server zu Migrieren. Ich schreiben diesen Blog Beitrag, da ich komischerweise im Internet keine für mich passenden Anleitung gefunden habe. Ich war dadurch gezwungen mir die Infos von mehreren Seiten zusammenzutragen. Eigentlich ist das Migrieren der Datenbanken kein Hexenwerk aber trotzdem sollte man für einen optimalen Ablauf ein paar Dinge beachten.
1. ) Datenbank sichern
Im ersten Schritt sollte wir die Datenbanken auf dem jetzigen SQL Server sichern. Sollten wir nicht wissen auf welchen Server sich die Datenbanken aktuell befinden können wir mit PowerShell befehen dies entsprechend 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 nun auch mit der Sicherung zu beginen sollten wir zuvor dafür sorgen das der Delivery Controller(Global für die Site) keine weitere 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 ein 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 ein Namen für die Backupdatei wählen. Bitte darauf achten wenn ihr keinen Dateisuffix angibt wird die Datei ohne Endung gespeichert. 🙂 Wir wiederholen dann diesen Schritt für alle 3 Datenbanken.
Nun wechseln wir auf den neuen SQL Server wo wir die 3 Datenbanken einspielen wollen. In unserem Beispiel heist der neue Server ADM01. Nachdem wir auch hier via Mangement Studio verbunden sind klicken wir mit der Rechten Maustaste auf den Punkt Database und wählen dort im Kontextmenü den Punkt Restore Database
Hier könnt ihr dann unter Device eure Datenbank lokal oder auf einem Netlaufwerk suchen. Achtung ihr könnt zwar eine Mehrfachselektion( Mehrere Dateien gleichzeitig ) durchführen aber im Grunde trotzdem nur die letzt gewählte Datenbank unter dem Punkt Database importieren. Vielleicht gibt es hier noch einen Alternativen schritt zu betrachten und man kann hier auch alle 3 Datenbanken auf einmal importieren dann gerne per Mail oder in den Kommentaren posten. 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 hier 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 folgenden Rollen:
Site database – ADIdentitySchema_ROL
Site database – Analytics_ROLE (7.8 and newer)
Site database – AppLibrarySchema_ROLE (7.8 and newer)
Site database – chr_Broker
Site database – chr_Controller Site database – ConfigLoggingSchema_ROLE
Site database – ConfigLoggingSiteSchema_ROLE
Site database – ConfigurationSchema_ROLE
Site database – DAS_ROLE
Site database – DesktopUpdateManagerSchema_ROLE
Site database – EnvTestServiceSchema_ROLE
Site database – HostingUnitServiceSchema_ROLE
Site database – Monitor_ROLE
Site database – MonitorData_ROLE
Site database – OrchestrationSchema_ROLE (7.11 and newer)
Site database – public
Site 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 versichert das 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 Script. Wichtig ist das die AdminDBConnection als letztes 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 nun auf dem ersten Delivery Controller gemacht haben müssen wir das 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 wurde vom Delivery Controller der Local Host Cache aktiviert und eine aktive Steuerung des Delivery Controller ist nicht mehr möglich. Damit wir diese Zustand schnell wieder ändern. Setzen wir ein weiteres Script 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 dies verfolgreich durchgeführt wurde wechseln wir wieder auf den nächsten Delivery Controller in unsere Site und führen das Script auch dort aus.
Abschliessend aktvieren wir wieder das Logging und das Monitoring und kontrollieren die Verfügbarkeit der Seite 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 hoffen die Anleitung ist für euch Hilfreich und ihr könnt Sie evtl bei der nächsten Datenbank migration gebrauchen. Solltet ihr Fragen, Anregungen oder Kritik haben. Gerne in den Kommentaren oder per Mail. Bis zum nächsten Blogpost.