记一次configuration wizard运行失败
升级一个有多台服务器的farm, 都安装好了二进制文件之后, 开始运行wizard. 结果手抖了, 在一个application server(服务器B)上运行了了wizard, 而文档上说需要在寄存有central admin站点的服务器(服务器A)上开始的. 于是点了cancel. 噩梦就此展开.
在寄存有管理中心站点的服务器A上运行wizard, 失败. 说是另一台机器B的upgrade正在进行中, 你不能开始升级.
好吧, 到原来的那台上运行wizard, 又报错, 说有另一个upgrade在这台机器上正在运行.
这岂不是没有办法了?
冷静.
升级是通过一个timer job来运行的, 首先可以想到的是看看timer job的情况. 由于管理中心是可以打开的, 我们可以在其中查看timer job的状态.
发现服务器B上有个upgrade的timer job被aborted了.
那么, 我们要做的就是让这个timer job再次运行起来. 怎么办呢?
Command-line-upgrade-running文章里有这样一段描述:
This property is provided as a fail-safe in case the upgrade process is abruptly stopped or if an error occurs during an upgrade process. While unlikely, it is possible to get into a state where the farm thinks that upgrade is running on one computer, but in reality the upgrade process has stop responding. In this unlikely scenario, the administrator could reset the command-line-upgrade-running property so that the upgrade process could be run again.
翻译过来就是说, 如果upgrade的过程被意外地终止了, 那么服务器场就会进入到一个状态: 整个服务器场里的机器都认为已经在一台机器上正在运行着upgrade, 但是实际上这个upgrade的过程已经停止了响应. 这种情况下, 管理员可以设置command-line-upgrade-running 属性, 这样升级过程就能再次运行了.
实际上PSConfig工具会在运行之前检查这个属性的, 如果是yes那么说明有一个upgrade正在运行, 如果是no, 那么upgrade 就可以执行. 所以, 应该运行的命令是stsadm -o setproperty -pn command-line-upgrade-running -pv No
但是, 注意, timer job是有缓存的, 为了重新开始我们需要清除一下timer job的缓存, 我们已经在清除MOSS的Timer Job缓存的方法中介绍过这个步骤.
结束之后, 我们要让timer job 恢复正常, 而立即执行所有管理用的timer job的命令是stsadm -o execadmsvcjobs. 用!
好了, 现在我们就可以强制sharepoint执行upgrade的过程了. 嗯, 保险起见, 还是用命令行吧. psconfig命令行有个选项, 专门对付这种中途停止了的upgrade, 叫做force. 通过指定force, psconfig.exe会停止任何当前正在运行的upgrade动作, 重新开始.
所以, 最后的一招就是psconfig -cmd upgrade -inplace b2b -wait –force
注意, b2b的意思是build to build, 打patch应该用这个, 如果是从03升级到07, 那么应该指定v2v, 也就是version to version.
参考资料:
Command-line-upgrade-running: Stsadm property (Windows SharePoint Services)
http://technet.microsoft.com/en-us/library/cc288357.aspx
Command-line reference for the SharePoint Products and Technologies Configuration Wizard (Office SharePoint Server)