客戶有一套部署在Window 2008 R2 sp環境下的12.1.0.2 RAC環境,該RAC基於策略管理。由於業務須要,如今須要更換部分設備——踢出兩臺2路的服務器(節點名稱分別爲racnode2,racnode3),而後新加兩臺4路的服務器(節點名稱分別爲racnode4,racnode6)。node
刪除節點,按照官方文檔上的步驟很順利地完成。windows
但在增長節點時,在作增長節點前的一致性檢查時,老是通不過,報錯以下:服務器
圖 1 工具
根據報錯信息,在百度上搜索解決辦法。大多數網友給出的解決辦法是對C:盤符設置共享。Windows 2008出於管理目的,會默認以C$的共享名稱共享C:盤符,既然C:已經共享了,莫非是共享的權限出了問題?在對該共享目錄設置了everyone擁有讀寫權限以後,問題仍然沒能獲得解決。搜索引擎
在找不到解決辦法以後,我打算忽略掉這個錯誤。嘗試在racnode1上使用spa
Addnode "CLUSTER_NEW_NODES={ racnode4}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={ racnode4-vip}"命令來強制增長cluster節點,然而不行,直接就彈出了錯誤提示,並且不支持跳過該錯誤。根據彈出的錯誤提示,出錯的緣由可能有3個,分別是操作系統
-
Racnode4不可訪問
-
節點之間不具有對等用戶
-
沒法訪問全部節點的臨時目錄
而結合上圖1的信息,可知前兩個可能的緣由都是經過了檢查的,那麼出錯的緣由應該是出在第3項上。blog
在windows中,訪問其它節點的目錄(臨時目錄也是目錄),確定是經過共享目錄的方式。查看了%TEMP%與%TMP%兩個環境變量的值,都指向C:盤上的一個路徑。另外,直接使用\\racnode4\c$\temp的方式是能夠直接訪問到臨時目錄的,因此,應該也不存在沒法訪問其它節點臨時目錄的狀況,那致使錯誤的根因究竟是什麼呢?索引
讓咱們再回到錯誤信息上,"沒法從節點racnode4檢索exectask的版本",這句話有一個名詞——"exectask"我不知道是什麼所在。在百度搜索引擎中輸入exectask根本查詢不到有價值的信息,它既然有版本屬性,極可能是一個工具或應用程序。ip
與臨時目錄有關,也與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時的報錯。