Today, I was doing some testing in my Horizon 7.7 lab environment. During one of the test, I had uninstalled view Composer Server. I was planning to re-install composer again on the same server, so I did not remove system DSN that was used with my composer server. After uninstalling Composer, I made some changes to operating system that were nothing specific to Horizon View.
Once done with my changes, I tried re-installing Composer server with existing DSN. Anyway, I did test DB connection using existing DSN successfully before starting installation again. However, when I started installation process, I was presented with error message as below.
To fix this issue, initially, I thought I started installer with incorrect user after looking at the initial error screen, so I re-launched setup with Domain administrator account , which also happens to have rights on database I am using for this Composer server. Still, I got the same error screen.
So as a next troubleshooting step, I tried to define logon account manually in Horizon Composer service.
After this, retried the installation again however that still did not work.
Events viewer was piled with error messages, I could see multiple attempts made by installer to start the view composer service with below error message.
Detailed error transcript is as below,
VMware.Sim.ServiceCore.Exception.SimDaoException: Could not begin transaction. ---> NHibernate.ADOException: cannot open connection ---> System.Data.Odbc.OdbcException: ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode) at System.Data.Odbc.OdbcConnectionOpen..ctor(OdbcConnection outerConnection, OdbcConnectionString connectionOptions) at System.Data.Odbc.OdbcConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.Odbc.OdbcConnection.Open() at NHibernate.Connection.DriverConnectionProvider.GetConnection() at NHibernate.Impl.SessionFactoryImpl.OpenConnection() --- End of inner exception stack trace --- at NHibernate.Impl.SessionFactoryImpl.OpenConnection() at NHibernate.AdoNet.ConnectionManager.GetConnection() at NHibernate.Transaction.AdoTransaction.Begin(IsolationLevel isolationLevel) at NHibernate.Impl.SessionImpl.BeginTransaction(IsolationLevel isolationLevel) at VMware.Sim.ServiceCore.Persistence.Database.SimDbTransaction.Begin(Nullable`1 isolationLevel) --- End of inner exception stack trace --- Server stack trace: at VMware.Sim.ServiceCore.Persistence.SimDaoHelper.LogAndThrow(Reason reason, String message, Exception inner) at VMware.Sim.ServiceCore.Persistence.Database.SimDbTransaction.Begin(Nullable`1 isolationLevel) at VMware.Sim.ServiceCore.Persistence.Database.SimDbTransaction.InitializeInternals(Nullable`1 isolationLevel, IInterceptor interceptor, Boolean useDbPersistence, Boolean serialize) at VMware.Sim.ServiceCore.Persistence.Database.SimDbTransaction..ctor(Nullable`1 isolationLevel, IInterceptor interceptor) at VMware.Sim.ServiceCore.Persistence.Database.SimDbReadOnlyTransaction..ctor() at VMware.Sim.ServiceCore.Persistence.DoMgrFactory.GetDbSchemaVersion() at VMware.Sim.ServiceCore.Persistence.DoMgrFactory.CheckSchemaVersion() at VMware.Sim.WebService.SimServer.Init() at VMware.Sim.WebService.SimServer.<SimStart>b__2() at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object args, Object server, Object& outArgs) at System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink) Exception rethrown at : at System.Runtime.Remoting.Proxies.RealProxy.EndInvokeHelper(Message reqMsg, Boolean bProxyCase) at System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(Object NotUsed, MessageData& msgData) at VMware.Sim.WebService.SimServer.WorkerFunction.EndInvoke(IAsyncResult result) at VMware.Sim.WebService.SimServer.SimStart(String args) at VMware.Sim.WebService.SimServer.OnStart(String args), Machine Name: CMP-SRV, Timestamp: 5/13/2020 1:44:05 PM, App Domain Name: SviWebService.exe, Thread Identity: , Windows Identity: NT AUTHORITY\SYSTEM, OS Version: Microsoft Windows NT 6.2.9200.0, reason: Hibernate
As per the transcript, it seemed like ODBC connector was not able to establish connection to existing DB and execute the query. That raised some suspicion about my existing DSN, so I decided to create new DSN to my Existing DB as in screenshots below.
- Enter DSN Name and Server, Click next
- Enter DB Server credentials and click next
- Select default DB to existing db and permissions and click next.
- Click Finish on next screen. This pops up test connection window, click test connection.
- Ensure test is successful. Click OK .
So this new DSN was added in System DSN list as in image below.
So after adding this DSN, I attempted to retry installation from error screen earlier as in image below.
I was not completely sure about issue to be fixed with this solution. But still gave it a try by clicking Retry on error screen.
While looking at events window, I could see service started event popped up.
To confirm service status, checked view composer service and it was started.
Beyond my expectation, this actually fixed the problem. Installation was completed successfully.
Just to confirm, that it is actually fixed, I added this server to Horizon admin console and also verified the connectivity.
So finally I was able to get the composer server back in business.
That is all in this post.