2013-04-16 68 views
0

兩個獨立的exe(Process)使用相同的數據庫和更新數據庫,如果用戶在Delphi xe2中同時運行數據庫更新的兩個exe文件同步數據庫操作。如果我們運行一個exe,它看起來像掛起直到在數據庫中進行更新。我正在使用ODBC連接。請建議。在Delphi中同時使用兩個獨立EXE的數據庫更新

我正在使用控制連接到數據庫中的兩個exe(進程)。 我使用的數據庫是Sybase SQL Anywhere的12

+2

數據庫這樣做與交易 –

+0

你是否一直打開這兩個連接?只有準備好更新時才應打開連接,然後立即關閉它 - 在兩臺計算機上都執行此操作。如果您注意只在必要時保持連接處於打開狀態,則Sybase應該處理剩下的連接,並且您將同步。如果你一直保持開放狀態,你可能會遇到鎖定/死鎖問題,這會阻礙你。 (如果關閉但仍然可能發生的情況仍然會發生)。當某些事件掛起時,你是否看到錯誤消息或某個時間點的超時? – Vector

+1

@user它通常有意義寫Delphi版本和用於連接到服務器的庫 –

回答

2

什麼,我可以谷歌,因爲全球又名WatcomSQL的兩個版本:服務器和UltraLite

1日的問題,當然,是你是否使用事務: 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中繼服務器可能會有所幫助。


您可能正在使用嵌入式數據庫模式或某種本地連接。 如果是這樣,嘗試將服務器作爲單獨的應用程序安裝,並通過TCP/IP網絡連接到它,儘管它在物理上運行在同一臺計算機上。

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


如果你使用的交易,那麼這可能是在masive插入更新一個交易是否阻塞另一個。例如,如果您使用數字ID字段,則會有一個通用的數據庫殺手陷阱來指定新的數據ID爲Select MAX(ID) + 1 from TableName,或者可能是其他鎖定。 http://en.wikipedia.org/wiki/Snapshot_isolation

雖然SQL Anywhere服務器12 is told使用versioning engine也許它只是使用它的一些交易,並使用在其他交易模式阻塞,受到lock escalations?或者,UltraLite可能不會使用它?

好吧,無論如何snapshot isolation in SQL Anywhere is based on first-writer-wins, which forces writers to block writers

總結一下 - 你有機會鎖定數據庫事務層,網絡層甚至連接庫。要監視和檢測所有潛在的鎖定問題,您需要全面瞭解給定的數據庫以及可以使用哪些監視和測試工具以及如何使用它。它認爲您可以更輕鬆地在Sybase Opserflow的Sybase論壇和Sybase部分找到幫助,而不是在Delphi中。我認爲這個答案值得發佈在https://dba.stackexchange.com/questions/tagged/sybase

相關問題