Firebird

火鳥isql獨占模式?

  • January 23, 2020

我有一個模糊的回憶,Firebird 的 isql 實用程序在某些情況下會與數據庫建立獨占連接,這意味著任何其他連接嘗試都將被拒絕。

我找不到有關此的資訊。

誰能解釋在哪些情況下會發生這種情況,特別是我如何確保它不會發生?

我的預期用途是在計劃任務中執行一些命令/查詢,並且我不想冒在此任務執行時阻塞其他數據庫工作的風險。

從一些簡單的測試來看,我似乎得到了一個獨占連接,即當沒有其他連接存在時,不允許其他連接。反之,如果isql連接時還有其他連接,isql的連接不會阻塞其他連接。

我在超級伺服器模式下使用 Firebird 3.0.4 和 FlameRobin 對此進行了測試,對 isql 和 FlameRobin 連接使用相同的數據庫別名。別名是使用絕對本地文件路徑定義的。

我是否應該包含主機和埠以確保 isql 始終通過超級伺服器連接(允許其他連接)而不是直接打開文件(阻止其他連接)?

好的,所以進一步的測試似乎表明發生了什麼:

如果為 isql 的連接指定的數據庫只是一個本地文件路徑(可能間接通過別名),isql 將首先嘗試通過直接打開文件來連接。這將是用於經典(和超經典?)模式的那種連接。所以它本身並不是獨占的,但與超級伺服器不兼容。如果文件已被鎖定,如果超級伺服器與其有連接,isql 將嘗試通過超級伺服器進行連接。在這種情況下,連接顯然不會以任何方式阻塞任何其他連接。

因此,為了確保在使用 isql 時其他(超級伺服器)連接永遠不會被阻塞,isql 的命令行應該指定一個 TCP/IP 連接字元串,如下所示:

isql -u usr -p pwd localhost/3050:MyDBAlias

如果使用這樣的連接字元串,其他(超級伺服器)連接就可以正常工作。

引用自:https://dba.stackexchange.com/questions/258038