Skip to main content
Enterprise applications
本繁體中文版使用機器翻譯,譯文僅供參考,若與英文版本牴觸,應以英文版本為準。

過時的 NFSv3 鎖定

貢獻者

如果 Oracle 資料庫伺服器當機、則重新啟動時可能會發生過時的 NFS 鎖定問題。請仔細注意伺服器上的名稱解析設定、以避免此問題。

產生此問題的原因是建立鎖定和清除鎖定會使用兩種稍微不同的名稱解析方法。涉及兩個過程: Network Lock Manager ( NLM )和 NFS 用戶端。NLM 使用 uname n 以決定主機名稱、而 rpc.statd 程序用途 gethostbyname()。這些主機名稱必須相符、作業系統才能正確清除過時的鎖定。例如、主機可能正在尋找擁有的鎖定 dbserver5`但鎖定已由主機登錄為 `dbserver5.mydomain.org。如果 gethostbyname() 不會傳回與相同的值 uname –a,則鎖定釋放程序未成功。

下列範例指令碼會驗證名稱解析是否完全一致:

#! /usr/bin/perl
$uname=`uname -n`;
chomp($uname);
($name, $aliases, $addrtype, $length, @addrs) = gethostbyname $uname;
print "uname -n yields: $uname\n";
print "gethostbyname yields: $name\n";

如果 gethostbyname 不符 uname、可能是過時的鎖定。例如、此結果顯示潛在問題:

uname -n yields: dbserver5
gethostbyname yields: dbserver5.mydomain.org

解決方案通常是透過變更主機出現在中的順序來找到 /etc/hosts。例如、假設 hosts 檔案包含下列項目:

10.156.110.201  dbserver5.mydomain.org dbserver5 loghost

若要解決此問題、請變更完整網域名稱和簡短主機名稱出現的順序:

10.156.110.201  dbserver5 dbserver5.mydomain.org loghost

gethostbyname() 現在傳回短 dbserver5 主機名稱、符合的輸出 uname。因此、鎖定會在伺服器當機後自動清除。