我们利用 ODBC 连接,因此我们的代码可以访问各种数据库——即 Oracle、Sybase 12 和 SQL Server 2014。
注意:我们有一个用于锁定的表。该表中只有一条记录,它要么是空的,要么填充了谁拥有锁。
我有一个场景,当应用程序与 Oracle 或 SQL Server 2014 建立 ODBC 连接时,应用程序运行良好,测试场景是 - 两个进程访问数据库 - 一个执行长时间运行的任务,另一个执行短期任务。如果我连接到 Sybase 并在进程块之一(短任务块)中执行相同的活动。我在这里猜测,在 Sybase 中,锁表在一个事务中被写入、锁定并被释放,而另一个进程正在等待事务上的提交\回滚以接下来使用该表。
为什么它在 SQL Server 2014 和 Oracle 中工作但在 Sybase 12 中阻塞?在 Sybase 12 中需要打开/关闭什么选项才能获得 Oracle 和 SQL Server 2014 的行为?
我终于在 Sybase Central 中找到了数据库的选项,并尝试了各种选项,我通过打开“allow_snapshot_isolation”(默认情况下关闭)来让它工作。