Dans un environnement “Hors Prod” nous avons rencontré un problème sur un Controller, en effet ce dernier était encore inscrit dans la ferme mais le DSName n’était plus renseigné et le MachineName contenait le SID du controller en lieu et place du nom.
Bien sûr une suppression dans Studio n’était pas possible 🙁
En googlelant nous sommes tombés sur un poste de JGSPIERS.COM “Remove orphaned Delivery Controller from XenApp XenDesktop Site“, qui via un script PowerShell (EvictiScript.ps1 ; modifier au préalable les variables $DBName $EvictedSID) va générer un fichier evict_.txt contenant le script sql à exécuter sur le serveur SQL hébergeant votre Database.
Une fois ces étapes réalisées, notre Controller est bien supprimé de la Database (tout du moins en partie mais ça nous le verrons plus bas dans ce billet), en effet nous ne le voyons plus via un Get-BrokerController.
Le script de nettoyage a bien supprimé le Controller non résolu
En regardant de plus près dans la Database (une recherche sur le SID), nous avons constaté que le SID du Controller supprimé était encore présent dans la Database (901 occurrences). Le script sql permettant de faire une recherche de chaine de caractère au sein d’une base est ci-dessous.
USE DATABASE_NAME DECLARE @SearchStr nvarchar(100) = YOUR SID DECLARE @Results TABLE (ColumnName nvarchar(370), ColumnValue nvarchar(3630))</pre> SET NOCOUNT ON DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110) SET @TableName = '' SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''') WHILE @TableName IS NOT NULL BEGIN SET @ColumnName = '' SET @TableName = ( SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName AND OBJECTPROPERTY( OBJECT_ID( QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) ), 'IsMSShipped' ) = 0 ) WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL) BEGIN SET @ColumnName = ( SELECT MIN(QUOTENAME(COLUMN_NAME)) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2) AND TABLE_NAME = PARSENAME(@TableName, 1) AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar', 'int', 'decimal') AND QUOTENAME(COLUMN_NAME) > @ColumnName ) IF @ColumnName IS NOT NULL BEGIN INSERT INTO @Results EXEC ( 'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) FROM ' + @TableName + ' (NOLOCK) ' + ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2 ) END END END SELECT ColumnName, ColumnValue FROM @Results
Une fois le script exécuté on obtient la liste de toutes les occurrences trouvées au sein de notre Database
Un petit coup de nettoyage ? 🙂
Nous avons donc supprimé les 901 occurrences de la base (avec un dump de la Database au préalable), puis nous avons publié des applications, créé des Machines Catalog/Delivery Group, Policy etc… etc… , et enfin lancé un test sur le site qui s’est terminé sans erreur 🙂 .
Comme nous souhaitions passer en 7.15 LTSR nous avons saisi l’occasion afin de tester la migration 7.6 LTSR vers 7.15 LTSR à partir d’une base nettoyée “au savon de Marseille”.
Pour info, les étapes pour une migration sont décrites dans le docs.citrix.com “Upgrade a deployment“.
La migration du premier Controller s’est terminée sans problème.
La on se dit que tout va bien….
On lance Studio (sur le même controller) et la une belle erreur.
C’est quoi cette histoire de SADate (surtout que nos licences ont une SA valide pour la 7.15 LTSR)
En rentrant le nom du DDC fraichement migré dans le champs “Enter the address of the Controller……..” et en cliquant sur le bouton Connect, Studio s’ouvre mais tourne dans la vide. Côté event (sur le Controller) nous avons une belle erreur 1007 dans le journal “Application”.
Log Name: Application
Source: Citrix Configuration Service
Date: 20/11/2017 15:50:43
Event ID: 1007
Task Category: None
Level: Error
Keywords:
User: NETWORK SERVICE
Computer
Description:
Otherwise unhandled exception in WCF call : System.ServiceModel.FaultException: Failed to retrieve site record. Error: InvalidSignature
at Citrix.Configuration.Logic.ConfigurationLogic.GetEnabledFeatures()
at Citrix.Fma.Sdk.ServiceCore.ServiceCore.CheckedCall[T](String name, Func`1 operation, Func`2 defaultValue, Enum code)
Rapidement on s’aperçoit que cette erreur relève du bug, en effet après voir migrer le deuxième Controller en 7.15 LTSR nous n’avons plus rencontré d’erreur.
Vive Marseille et son savon.
Bravo !
🙂