两个单独的exe(Process)正在使用相同的数据库和更新数据库,如果用户在Delphi xe2中同时运行用于数据库更新的exe,如何同步数据库操作。如果我们运行一个exe,它看起来像挂起,直到在数据库中进行更新。我正在使用ODBC连接。请建议。
我使用控件连接到exe(Process)中的数据库。 我使用的数据库是Sybase SQL Anywhere 12。
答案 0 :(得分:2)
对于我可以谷歌,有两个版本的Anywhere aka WatcomSQL:服务器和UltraLite
第一个问题当然是您是否使用交易:http://en.wikipedia.org/wiki/Database_transaction
虽然大多数RDBMS都需要明确使用事务,但是一些简化的quazi-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 Relay Server可能会有所帮助。
您可能正在使用嵌入式数据库模式或某种本地连接。 如果是这样,尝试将服务器作为单独的应用程序安装,并通过TCP / IP网络连接到它,尽管它在物理上运行在同一台机器上。
如果您使用交易,则可能在masive插入期间更新一个交易,如果阻止另一个交易。例如,如果使用数字ID字段,则会有一个公共数据库杀手陷阱,用于将新数据ID分配为Select MAX(ID) + 1 from TableName
,或者可能是其他锁定。 http://en.wikipedia.org/wiki/Snapshot_isolation
虽然使用12 is told的SQL Anywhere服务器versioning engine可能只在某些事务上使用它并在其他事务模式下使用阻塞,但lock escalations?或者UltraLite也许不使用它?
总结一下 - 您有机会在数据库事务层,网络层甚至连接库中拥有锁。要监视和检测所有潜在的锁定问题,您需要全面了解给定的数据库以及可用的监视和测试工具以及如何使用它。它认为您可以更轻松地在Sybase论坛和StackOмerflow的Sybase部分中找到帮助,而不是在Delphi中。我认为这个答案值得在https://dba.stackexchange.com/questions/tagged/sybase
发布