DCUG | Datenbak Migration

XenDesktop 7.x Datenbank Migration

Heute kam auf mich die, wie ich feststellen musste, undankbare Aufgabe zu die XenDesktop 7.6 Datenbank von dem mitinstallierten SQL Express auf einen SQL 2014 zu verschieben / migrieren.

Soweit so gut, dachte ich mir.

Nach einem kurzen Blick in die Studio Konsole musste ich feststellen, dass mich meine Erinnerung nicht getrügt hat und hier ein ändern der Datenbank nur bei der Monitoring Datenbank und dem Configuration Logging möglich ist.
Was nun? Nach kurzer Recherche im Netz musste ich feststellen, dass das bisher noch nicht so optimal dokumentiert ist.
Jedenfalls haben die meisten Einträge nur das ändern der zwei zuvor genannten Datenbanken behandelt, was ich ja in der GUI erledigen kann.

Glücklicherweise habe ich dann doch noch den CTX140319 gefunden, der einem schön in Steps erklärt was zu tun ist.
Das Prinzip „Sollte – Hätte – Wäre“
Sollte man alles richtig eingegeben haben hätte das eigentlich relativ schnell erledigt gewesen sein sollen und alles wäre gut gewesen.

Deshalb hier nun noch ein paar Gedanken die euch unter Umständen ein wenig Zeit ersparen.

Erst einmal sollte man sich überlegen ob es den Aufwand wert ist die Datenbank zu migrieren, oder ob man die 5-10 Geräte von seinem PoC wieder neu anlegen will. Sollte man diesen „Shortcut“ wählen, kann man zu Punkt 11 in der Anleitung des oben genannten CTX springen und einfach die Datenbank Verbindungen lösen. (siehe Gedanken dazu weiter unten).
Nach einem Neustart der Studio Konsole fängt man wieder bei Null an. Quasi wie nach einer frischen Installation des Controllers.

Nachdem ich mich nun aber für den steinigeren Weg entschieden habe, ging es mit dem Datenbank exportieren und dem Import auf dem neuen SQL weiter.
Natürlich verlangt diese Datenbank wieder eine Authentifizierung, sobald eine Verbindung später aufgebaut wird. Hätte ich diese Berechtigungen bereits vor dem Restore des Backups im SQL Server angelegt, wäre wohl auch die Berechtigung auf der Datenbank korrekt gesetzt gewesen. Für meinen Citrix Admin hat er diese jedenfalls mit übernommen.. oder doch nur weil dieser auch DB Admin ist? Eine Frage die ihr selbst klären könnt.

Wie auch immer,.. In dem CTX Artikel ist jedenfalls beschrieben es sollte mittels SQLCMD möglich sein diese Credentials zu erstellen.
Sollte deswegen, da es bei mir nur via SQL Studio klappt.

Ich habe das extra für diesen Beitrag nun einmal nachgestellt, wie es aussieht wenn man das als Lazy Admin vergisst bzw auslässt:
Die Meldung im gelben Rahmen erscheint, wenn der XenDesktop / XenApp Controller keinen Login am SQL Server besitzt.
Die Meldung im grünen Rahmen erscheint, wenn der Controller keine Berechtigung / Mapping auf der Datenbank besitzt.

Fehlerhafter Login

Punkt 10 – Test Database

Testen noch bevor ich umschwenke ?
Ja, wir können so tun als wären wir schon auf der neuen Datenbank!
Das sollte soweit schon gut klappen. Dies ändert auch noch NICHTS an der derzeitigen Verbindung und kann also ohne bedenken getestet werden.
Der folgende Befehl sollte übrigens mit gesetzten Variablen, wie im Artikel beschrieben, und nicht mittels Server=Mein SQL Server;… Catalog=Meine Datenbank konfiguriert werden.

$cs=“Server=$ServerName; Initial Catalog=$DBName; Integrated Security=True“
In meinem Beispiel sieht man auch warum: Der Abstand im Namen macht ihn unter Umständen unglücklich.

 

Punkt 11 – Datenbankverbindungen lösen

Sollte man sich wie oben beschrieben, entschlossenen haben als Shortcut hier weiter zu machen, bitte nicht vergessen, wie in der Anleitung beschrieben, erst die Logging- und Montioring-Datenbank / Funktion zu deaktivieren.

Ich würde es nun bevorzugen das Citrix Studio zu schließen. In der CTX Anleitung passiert dies erst später.
Ich habe mittels Copy-Paste der Befehle, die Datenbank auf $null gesetzt, somit also bestimmt nichts vergessen.
Als ich dann später die Datenbank Verbindungen neu setzen wollte kam folgende Meldung:

 

Register

 

Dazwischen wollte ich sehen wie das Studio reagiert, wenn diese Verbindungen released worden sind (im Prinzip wie wenn die Datenbank offline ist).
Vielleicht war deshalb noch ein Lock auf die DB Verbindung und konnte nicht zurück gesetzt werden? …wobei die Studio Konsole ja auch nichts anderes als Powershell Befehle absetzt?
Sehr seltsam jedenfalls. Man sieht aber im Screenshot, dass mit einem erneuten $null und anschließendem setzen der Verbindung plötzlich der Wert auf OK steht.

Hat man alle Verbindungen erfolgreich gelöst, kann man nun die Verbindungen wie beschrieben neu setzen.

Soweit so gut… eigentlich fertig!
Ich würde nun allerdings das Logging noch nicht aktivieren, wie in Punkt 16 beschrieben, sondern erst Testen ob alle Verbindungen funktionieren.
Im Fehlerfall hat man sonst erst unter Umständen wieder 2 Schritte mehr zu erledigen um die Verbindung zu korrigieren.

Alles in allem eine recht mühsame Prozedur, weshalb man sich schon von Anfang an immer gut überlegen sollte, ob eine SQL Express Installation wirklich ausreichend ist, oder ob man lieber gleich auf einen vollwertigen Server setzen möchte.

 

Troubleshooting:

Sollte beim Neuverbinden der Datenbank bzw. beim Neuerstellen der Datenbank ein Fehler kommen der mit folgender Meldung beginnt…

Citrix.Console.Models.Exceptions.DatabaseConnectionException Failed to set database connection. 
oder
Citrix.Console.Models.Exceptions.ScriptException You are not authorized to perform this operation.

…liegt das daran, dass euer $null setzen nicht bei allen Parametern sauber geklappt hat bzw durchgeführt werden konnte.

In diesem Fall ist es notwendig das händisch nach zu holen, da das erneute setzen via Powershell an diesem Problem leider nichts ändern wird.

 

DCUG | Datenbank Migration | Registry

 

Ein Blick via Regedit in HKEY_LOCAL_MACHINE\Software\Citrix\XDservices\ offenbart uns einblick in all die Schema´s und deren Datenbankverbindung.
Bitte hier nun z.B. in ADIdentitySchema – Datastore öffnen und hier Connections auswählen.
Der darin enthaltene String „ConnectionString“ MUSS LEER SEIN ! In dem Bild oben kann man so eine noch ausgefüllte Datenbankverbindung sehen.

Anschließend die betroffenen Dienste, oder gleich alle durchstarten.
Für Lazy Admins hier nochmal zur Erinnerung der Shortcut in Powershell:

Get-Service Citrix* | Stop-Service -Force
Get-Service Citrix* | Start-Service