0

两个单独的 exe(进程)使用相同的数据库和更新数据库,如果用户在 Delphi xe2 中同时运行两个 exe 进行数据库更新,如何同步数据库操作。如果我们运行一个 exe,它看起来就像挂起,直到在数据库中进行更新。我正在使用 ODBC 连接。请建议。

我在两个exe(进程)中都使用控件连接到数据库。我使用的数据库是 Sybase SQL Anywhere 12。

4

1 回答 1

2

对于我可以用谷歌搜索的内容,有两个版本的 Anywhere aka WatcomSQL:服务器和 UltraLite

第一个问题当然是你是否使用事务:http ://en.wikipedia.org/wiki/Database_transaction

虽然大多数 RDBMS 需要显式使用事务,但一些简化的类 RDBMS(如 MySQL 或 Advantage)则不需要。而且看起来SQL Anywhere 还可以让您在没有事务的情况下工作。这是一个陷阱:没有事务可能更容易开始,但它仅在您拥有单个独家客户端时才有效。 http://infocenter.sybase.com/help/topic/com.sybase.help.sqlanywhere.12.0.1/uladmin/fo-databases-s-5108100.html

如果你偷工减料并制作了无事务程序,那么可能是重构它的时候了。或者,也许 Sybase 中继服务器可以提供一些帮助。


您可能正在使用嵌入式数据库模式或某种本地连接。如果是这样,请尝试将 Server 作为单独的应用程序安装并通过 TCP/IP 网络连接到它,尽管它实际上是在同一台机器上运行的。

http://infocenter.sybase.com/help/topic/com.sybase.help.sqlanywhere.12.0.1/dbadmin/da-dbconnections.html


如果您使用事务,那么如果阻塞另一个事务,则可能是在大规模插入更新一个事务期间。例如,如果您使用数字 ID 字段,则有一个常见的数据库杀手陷阱来分配新的数据 ID,Select MAX(ID) + 1 from TableName或者它可能是其他一些锁定。http://en.wikipedia.org/wiki/Snapshot_isolation

虽然 SQL Anywhere Server 12 被告知使用版本控制引擎,但它可能仅在某些事务上使用它并在其他事务模式中使用阻塞,但会受到锁定升级的影响?或者任何地方 UltraLite 都不使用它?

好吧,无论如何,SQL Anywhere 中的快照隔离是基于 first-writer-wins 的,这迫使 writers 阻止 writers

总而言之——你有机会在数据库事务层、网络层甚至连接库中拥有锁。要监视和检测所有潜在的锁定问题,您需要全面了解给定数据库,以及可用的监视和测试工具以及如何使用它。它认为您会更容易在 Sybase 论坛和 Stack Oмerflow 的 Sybase 部分中找到帮助,而不是在 Delphi 中。我认为这个答案值得发布在https://dba.stackexchange.com/questions/tagged/sybase

于 2013-04-17T07:31:00.033 回答