1. 程式人生 > >“無法從節點xx檢索exectask的版本” 原因分析

“無法從節點xx檢索exectask的版本” 原因分析

windows 出了 權限 包含 訪問 什麽 錯誤提示 名稱 ini

客戶有一套部署在Window 2008 R2 sp環境下的12.1.0.2 RAC環境,該RAC基於策略管理。因為業務需要,現在需要更換部分設備——踢出兩臺2路的服務器(節點名稱分別為racnode2,racnode3),然後新加兩臺4路的服務器(節點名稱分別為racnode4,racnode6)。

刪除節點,按照官方文檔上的步驟很順利地完成。

但在增加節點時,在做增加節點前的一致性檢查時,總是通不過,報錯如下:

技術分享圖片

圖 1

根據報錯信息,在百度上搜索解決辦法。大多數網友給出的解決辦法是對C:盤符設置共享。Windows 2008出於管理目的,會默認以C$的共享名稱共享C:盤符,既然C:已經共享了,莫非是共享的權限出了問題?在對該共享目錄設置了everyone擁有讀寫權限之後,問題仍然沒能得到解決。

在找不到解決辦法之後,我打算忽略掉這個錯誤。嘗試在racnode1上使用

Addnode "CLUSTER_NEW_NODES={ racnode4}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={ racnode4-vip}"命令來強制增加cluster節點,然而不行,直接就彈出了錯誤提示,而且不支持跳過該錯誤。根據彈出的錯誤提示,出錯的原因可能有3個,分別是

  • Racnode4不可訪問
  • 節點之間不具備對等用戶
  • 無法訪問所有節點的臨時目錄

而結合上圖1的信息,可知前兩個可能的原因都是通過了檢查的,那麽出錯的原因應該是出在第3項上。

在windows中,訪問其它節點的目錄(臨時目錄也是目錄),肯定是通過共享目錄的方式。查看了%TEMP%與%TMP%兩個環境變量的值,都指向C:盤上的一個路徑。另外,直接使用\\racnode4\c$\temp的方式是可以直接訪問到臨時目錄的,所以,應該也不存在無法訪問其它節點臨時目錄的情況,那導致錯誤的根因到底是什麽呢?

讓我們再回到錯誤信息上,"無法從節點racnode4檢索exectask的版本",這句話有一個名詞——"exectask"我不知道是什麽所在。在百度搜索引擎中輸入exectask根本查詢不到有價值的信息,它既然有版本屬性,很可能是一個工具或應用程序。

與臨時目錄有關,也與exectask工具或程序有關。我突然想到:會不會這個程序就在臨時目錄中呢?打開racnode4的臨時目錄一搜,果然在CVU_12.1.0.2.0_Administrator目錄中有一個名稱為exectask的可執行程序,試著雙擊該可執行程序,報錯了:

技術分享圖片

圖 2

Racnode4缺少msvcr100.dll,那已經部署了cluster+RAC的racnode1有沒有呢?通過查看racnode1的臨時目錄下的CVU_12.1.0.2.0_Administrator,發現與racnode4相比,多了msvcp100.dll和msvcr100.dll兩個動態鏈接庫。

接著,我以msvcr100為搜索內容對racnode1和racnode4的C:盤範圍進行了全盤搜索,結果發現racnode1的c:\windows\system32目錄下存在msvcr100.dll,而racnode4不存在。抱著試一試的心態,將racnode1節點c:\windows\system32目錄下的msvcr100.dll、msvcp100.dll拷貝到racnode4同路徑下,再次執行Addnode命令,竟然通過了,如下圖:

技術分享圖片

問題的根因竟然是racnode4節點缺少msvcr100.dll、msvcp100.dll等動態鏈接庫造成的。那麽我不禁要問了,相同的操作系統,為什麽racnode4上沒有這些動態鏈接庫?這些dll文件的主要作用是什麽呢?

msvcp、msvcr、vcomp100.dll屬於VC++2010版運行庫,它在微軟的任何原版系統是默認不會安裝的,當然被人修改過的系統鏡像可能包含該運行庫。所以對於原版系統來說,當缺少該類dll時,重裝並不能解決問題,需要下載相應的dll或直接安裝Visual Studio 2010即可。可能是由於racnode4等節點在安裝操作系統時,與racnode1所使用的系統鏡像不一樣,導致了它在操作系統層面缺失了相關dll。而exectask應用程序又恰好需要用到這些dll,這導致了在執行addnode時的報錯。

“無法從節點xx檢索exectask的版本” 原因分析