2016-02-29 107 views
2

在我的java應用程序中,我想設置jdbc連接到oracle數據庫的鎖定超時。當一個表被實際鎖定時,當不需要鎖時,我的應用程序不會超時。有沒有辦法設置超時?會話的Oracle設置鎖定超時

+0

有一個會話參數叫做ddl_lock_timeout,也許這就是你需要的......但是當一個會話想要修改表時,它會被特別使用(如名字所示)。 – Kamil

+0

找出你爲什麼要購買和/或持有你不需要的鎖可能是有用的。什麼是鎖定桌子,什麼在等待鎖? (不知道爲什麼要假定DDL ......)在此期間,[資源管理器](http://docs.oracle.com/cd/E11882_01/server.112/e25494/dbrm.htm)可以幫助您,通過MAX_IDLE_BLOCKER_TIME? –

+0

您通常指定在請求鎖定時:「select ... for update wait 10」等待鎖定10秒鐘。 –

回答

0

的Oracle 11g開始,你可以在會話級DDL_LOCK_TIMEOUT設置爲非零值。

documentation

DDL_LOCK_TIMEOUT

DDL_LOCK_TIMEOUT指定DDL語句多久 將在DML鎖排隊等待的時間限制。缺省值爲零表示NOWAIT的狀態爲 。在DDL語句中,最大值1,000,000秒將導致 永久等待獲取DML鎖定。

如果在超時時間到期之前沒有獲取鎖定,則會返回一個 錯誤。

查看示例here

+0

爲什麼DDL_LOCK_TIMEOUT?是否有DML_LOCK_TIMEOUT? – Sunnyday

+0

@Sunnyday不,據我所知,沒有任何會話級別的DML參數。但是,DDL_LOCK_TIMEOUT指定DDL語句在DML鎖定隊列中等待的時間限制。獲取DML鎖定是等待時間。 –