Hi all,
I hoping someone might be able to help or suggest where to start looking with this one.
We have a site running Opera 3 SQL SE. They have a large payroll in a single payroll group in one company (they run multiple companies and payrolls in Opera). This group contains approx. 5000 employees.
Intermittently, when running the payroll update it will fail. The errors recorded in the LogEntries table are shown below. It appears to be some sort of connectivity/timeout issue but I've no idea what might cause this. When it errors, they can run it again and it will work the second time.
I've not been able to replicate the issue offsite with a backup taken just prior to running the update process.
They have SQL 2019 installed on its own server and the Opera databases are the only thing in that instance. SQL SE is installed on its own application server and the users run Opera from a client on one of two RDS servers. All servers have plenty of available resource.
Any advice or suggestions would be gratefully received.
Thanks,
Alex
System.AggregateException: One or more errors occurred. ---> System.InvalidOperationException: Invalid operation. The connection is closed. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at System.Data.SqlClient.SqlInternalConnectionTds.ValidateConnectionForExecute(SqlCommand command) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at System.Data.SqlClient.SqlInternalTransaction.Rollback() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at System.Data.SqlClient.SqlTransaction.Dispose(Boolean disposing) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at EntityFramework.Batch.SqlServerBatchRunner.<InternalUpdate>d__15`1.MoveNext() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--- End of inner exception stack trace --- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at EntityFramework.Extensions.BatchExtensions.Update[TEntity](IQueryable`1 source, Expression`1 updateExpression) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at Pegasus.Opera3SE.OperaDips.DipCore.Payroll.Update.PayrollUpdateProcess.ProcessPayrollTransactions() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---> (Inner Exception #0) System.InvalidOperationException: Invalid operation. The connection is closed. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at System.Data.SqlClient.SqlInternalConnectionTds.ValidateConnectionForExecute(SqlCommand command) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at System.Data.SqlClient.SqlInternalTransaction.Rollback() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at System.Data.SqlClient.SqlTransaction.Dispose(Boolean disposing) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at EntityFramework.Batch.SqlServerBatchRunner.<InternalUpdate>d__15`1.MoveNext()<--- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at EntityFramework.Extensions.BatchExtensions.Update[TEntity](IQueryable`1 source, Expression`1 updateExpression) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at Pegasus.Opera3SE.OperaDips.DipCore.Payroll.Update.PayrollUpdateProcess.ProcessPayrollTransactions() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
System.Exception: Cannot unlock table. Connection must be open. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at Pegasus.Opera3SE.Data.OperaORM.Locking.OperaLockingApi.SetTableUnlock(SqlConnection connection, String[] tableNames) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at Pegasus.Opera3SE.Data.OperaORM.Locking.OperaLockingApi.UnlockAllTables(SqlConnection connection) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at Pegasus.Opera3SE.Data.OperaORM.Company.Context.CompanyDatabase.UnlockAllTables() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at Pegasus.Opera3SE.OperaDips.DipCore.Payroll.Update.PayrollUpdateProcess.Clean() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at OAPROFORCE_PayrollUpdateProcess.OperationalAccountingSystemsLtd_PayrollUpdateProcess.Execute(CommonRequestHeader header, MessageBase details, ICoreObjects coreObjects) |
|
|
|
|
|
|
|
|
|
|
|
|
at Pegasus.Opera3SE.Commands.CommandObject.Execute(String caller, CommonRequestHeader header, MessageBase details, ICoreObjects coreObjectsInstance) at Pegasus.Opera3SE.Data.OperaORM.Locking.OperaLockingApi.SetTableUnlock(SqlConnection connection, String[] tableNames) |
|
|
at Pegasus.Opera3SE.Data.OperaORM.Locking.OperaLockingApi.UnlockAllTables(SqlConnection connection) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at Pegasus.Opera3SE.Data.OperaORM.Company.Context.CompanyDatabase.UnlockAllTables() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at Pegasus.Opera3SE.OperaDips.DipCore.Payroll.Update.PayrollUpdateProcess.Clean() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
at OAPROFORCE_PayrollUpdateProcess.OperationalAccountingSystemsLtd_PayrollUpdateProcess.Execute(CommonRequestHeader header, MessageBase details, ICoreObjects coreObjects) |
|
|
|
|
|
|
|
|
|
|
|
|
at Pegasus.Opera3SE.Commands.CommandObject.Execute(String caller, CommonRequestHeader header, MessageBase details, ICoreObjects coreObjectsInstance) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|