最近我有个客户碰到一个很奇怪的问题。他安装SQL server 2008 SP2的时候, SP2的安装程序无法找到SQL server。界面如下:
正常的界面应该是这样的:
你可以从上图看到, 上面列出了我机器上的SQL 实例SQLEXPRESS。 那么客户的机器上为什么就不能列出呢?
我首先考虑是不是下载的SP2版本不对?仔细核查了下,客户的SQL server 是x64版本的,而下载的SP2也是64bit的版本。所以补丁没有问题。
接着我又检查SQL server 的版本,是不是已经打过补丁了呢?查看Errorlog:
2011-06-10 00:00:09.09 spid89 Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64)
Jul 9 2008 14:17:44
Copyright (c) 1988-2008 Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )
恩,是10.0.1600.22, 是RTM版本,确实没有打过任何补丁。
那么会不会是SQL server 的注册表有问题,导致SP2找不到SQL server实例呢?
我使用ProcessMonitor 这个工具来分析SP2 setup程序访问过的注册列表,也没有发现特别的问题。我甚至导出下面SQL server 相关的注册表:
a) HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
b) HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer
c) HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server
我仔细把上面的注册表和正常的机器的注册表对比了下,也没有发现问题。注册表好好的。
那么问题究竟出在哪里呢。为什么客户的SP2就是找不到SQLServver的实例呢?
看来需要对SP2的安装过程来个彻底研究。
大体的SP2安装流程是这样的:
1) 首先运行Setup.exe。 它检查.NET和 MSI 运行环境是否符合条件。这是因为SP2是.NET程序,需要.NET和MSI的支持。
2) 接着setup100.exe 运行。它主要用来运行预先定义的一些rules。比如OS的版本是否对,WMI服务是否能够访问等等。有很多这样的rules,比如如下的截图:
3) 再次运行setup100.exe, 执行SP2的预先定义的action.比如 InitializeMsiExtension,RunDiscoveryAction,ValidateFeatureSettings 等。执行完毕SP2旧安装好了。
根据我们的case,是SP2无法找到SQL实例。DisCovery动作是列出机器上所有的SQL server 产品。那么应该在RunDiscoveryAction 这个动作里面找不到SQL server。 Discovery动作有日志么,如有则它在哪里呢?
很幸运,这个动作的结果在%programfiles%\Microsoft SQL Server\100\Setup Bootstrap\Log\<YYYYMMDD_HHMM>\Datastore\Datastore_Discovery.xml里面。这是个XML文件。我们具体来比较这个文件和正常情况下的区别。找到了!!下面的installedstate 和FeatureState正常情况下值是3或者5,而不是1:
这些值是啥含义呢:
1--> 表示产品处在“建议”状态,是不正常的状态。
3--> 表示产品已安装在本地。
5--> 缺省状态。表示产品已安装。
那么问题现在就变简单了。为什么状态是1呢?能够改变它么?SP2是如何得到这个FeatureState的呢?经过调试跟踪setup100.exe 终于发现它是调用MsiQueryFeatureStateEx()函数得到的。 经过仔细衡量风险我直接写了个程序调用MsiConfigureFeature()把FeatureState 改为3然后再安装,嘿,一切很好。SP2成功安装。
分享到:
相关推荐
SQLServer2008R2SP2-KB2630458-x64-CHS
SQL Server 2016 SP2 补丁 SQLServer2016SP2-KB4052908-x64-CHS
从 SQL Server 的旧版本升级到 SQL Server 2008 SP3 的过程体验得到了改进。另外,我们增强了安装体验的性能和可靠性。 在 SQL Server Integration Services 日志中,现在能看到在数据流中发送的总行数。 在...
SQL SERVER 2008 R2群集SP2补丁升级(WINDOWS 2003)操作手册SQL SERVER 2008 R2群集SP2补丁升级(WINDOWS 2003)操作手册SQL SERVER 2008 R2群集SP2补丁升级(WINDOWS 2003)操作手册
SQLServer2008R2SP2-KB2630458-x64-CHS.exe
Windows Server 2003 Sp2 下无法安装SQL Server 2008 Management Studio Express问题
sql server 2008 安装教程sql server 2008 安装教程sql server 2008 安装教程sql server 2008 安装教程sql server 2008 安装教程
用友审计软件所使用的SQL2008R2精简安装版本,安装实例名为AudSQL2008,sa密码为sql2008
此链接库针对使用机器码 API (ODBC、OLE DB 和 ADO) 的应用程序提供运行时间支持,以连接到 Microsoft SQL Server 2000、2005 或 2008。SQL Server Native Client 应该用来建立新的应用程序,或者加强需要利用新 SQL...
SQL-Server-2008-数据库还原到SQL-Server-2012.doc
在SQLServer2008上面成功附件SQLServer2005的方法
sql server desktop engine 数据库引擎sql server desktop engine 数据库引擎sql server desktop engine 数据库引擎
sql server2008R2简装版本 1、打开安装包,点击setup.exe 2、选择左侧列表中的“安装 3、点击“全新安装或向现有安装添加功能”。 4、检测完成点击确定。 5、选择版本和密钥,然后下一步。(因为有版权要求,在这不...
sqlserver 引擎 深入了解sqlserver的一些内部细节问题
SQL SERVER 2008, 一键卸载工具。一键卸载,傻瓜自动化。
1、如果是从SQL2008升级到SQL2008R2那么只能选择左侧“安装”对应右侧“从SQL SERVER 2000,SQL 2005或SQL 2008升级”这个选项来升级。 大家也注意到有一个“维护”但是这个选项是“从SQL 2008其他例如EXPRESS版本...
jdk1.5使用---》sqljdbc.jar jdk1.6使用--》sqljdbc4.jar
SQL Server 2008R2 SP1 KB2528583 补丁 数据库 windows 数据库
英文版SQL server2008R2数据库安装包
《SQL Server 2008宝典》全面介绍了SQL Server 2008各方面的知识,全书由6部分组成:第1部分为数据库的基础篇,介绍了数据库的类型、概念、对象、SQL语言等;第2部分为SQLServer 2008的准备篇,介绍了SQL Server ...