客户有一套部署在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时的报错。