Topology Builder
Error «Cannot open database «xds» en Lync 2013
Buenas a todos,
Por fin consigo un rato para escribir, iré poniendo todos los post atrasados (lo prometo..), de los problemas y casos curiosos que me he ido encontrando en mis ultimas instalaciones de Microsoft Lync Server 2013 y Skype for Business. A parte continuo en mis ratos libres probando la instalación de Cloud Connector que me resulta un producto de lo mas interesante, al menos para las pequeñas y medianas empresas que han decidido irse a la nube de Microsoft y que quieren migrar sus viejas centralitas a un entorno de comunicaciones unificadas sin tener que desembolsar mucho dinero en una infraestructura de servidores.
Bueno ya tendré mas tiempo de hablar del Cloud Connector, pero en este articulo quiero hablaros de un problema que me he encontrado recientemente en un cliente.
Concretamente necesitábamos conectarnos para realizar una auditoria de la infraestructura que tenia en Lync 2013 y con información obtenida hacerle una propuesta de migración a Skype for Business con integración de Voz y servicios externos a través de un EDGE, pues bien, lo primero en estos casos es o pedirle el fichero de la topología o conectarte con un usuario que te faciliten con los permisos RBAC adecuados para descargarla tu mismo.
En este caso el cliente nos proporcionó un usuario con pertenecía a los siguientes grupos y permisos:
Pero a la hora de conectarme al FrontEnd y descargar la topología, primero recibía este mensajes «Topology Builder could not copy to the topology from the Central Management Store. Cannot read Topology. Verify that the topology data is accessible«
Después volví a forzar la descarga y recibí la siguiente ventana de error:
El texto del error completo decía lo siguiente:
DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) atSystem.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) at System.Data.SqlClient.SqlConnection.Open() at Microsoft.Rtc.Common.Data.DBCore.PerformSprocContextExecution(SprocContext sprocContext) — End of inner exception stack trace — at Microsoft.Rtc.Management.Store.Sql.XdsSqlConnection.ReadDocItems(ICollection`1 key) at Microsoft.Rtc.Management.ScopeFramework.AnchoredXmlReader.Read(ICollection`1 key) at Microsoft.Rtc.Management.WritableConfig.AnchoredXmlSchemaCache.get_Item(ScopeClass scopeClass) at Microsoft.Rtc.Management.Xds.ManagementConnection.GetAnchoredXmlWrapperFromReader(SchemaId schemaId) at Microsoft.Rtc.Management.Xds.ManagementConnection.ReadTopologyXml(TypedXml& typedXml, AnchoredXml& anchoredXml) at Microsoft.Rtc.Management.Xds.ManagementConnection.ReadTopology(TypedXml& topologyXml, Topology& topology) at Microsoft.Rtc.Management.Xds.XdsCmdlet.<ReadTopology>b__5() at Microsoft.Rtc.Management.Internal.Utilities.DeImpersonator.<>c__DisplayClass1.<Run>b__0() at Microsoft.Rtc.Management.Internal.Utilities.DeImpersonator.Run[T](Boolean dropImpersonation, Func`1 func) atMicrosoft.Rtc.Management.Xds.XdsCmdlet.ReadTopology() — End of inner exception stack trace — at System.Management.Automation.Internal.PipelineProcessor.SynchronousExecuteEnumerate(Object input, Hashtable errorResults, Boolean enumerate) at System.Management.Automation.Runspaces.LocalPipeline.InvokeHelper() at System.Management.Automation.Runspaces.LocalPipeline.InvokeThreadProc()
Failed
Finished
Tras revisar con el cliente los permisos del usuario, etc…, probé a lanzar el comando Get-CsAdminRole desde la Shell de Lync para ver que estaban bien aplicados los permisos, y recibí lo siguiente «Cannot open database xds requested by the login. The login failed«.
Con este error si pude indagar mas por la red, finalmente para solucionarlo simplemente de la manera mas fácil, arrancar el Topology Builder como Administrador
De esta forma pude descargar de forma correcta la topología, también para ejecutar comandos con el PowerShell utilizando la misma formula.
Seguramente que este post no sea de lo mas atractivo pero os lo cuento porque he visto en algún otro blog que con el mismo error que aconsejaban desinstalar todos los componentes de Lync como «Administrative Tools, Core Components, etc ..» y borrar la carpeta «RTCLOCAL» cosa que un entorno en producción es impensable y si de esta manera al menos podemos ir administrando la plataforma sin tener que provocar tanto trastorno al cliente. A mi de esta manera me sirvió y pude trabajar con normalidad.
Saludos