SQL Server 2012实施与管理实战指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 单机版本的数据库安装和打补丁

单机版本上的数据库安装和打补丁比较简单,不过还是有几个地方是要稍微注意一下的。

1.2.1 安装注意事项

在安装时,一定要先考虑好使用什么样的字符集和排序规则(Collation)。

字符集(Code Page)决定了系统将使用什么样的编码表解释用户存在单字节字符类型(char、varchar等)里面的数据。而排序规则(Sort Order)决定了系统将使用什么样的排序规则(是字典序,还是字符编码序,是否区分大小写等)。对于我们中国的客户,尤其要注意,安装SQL Server的时候,必须选择中文字符集,并定好你想要的排序顺序。如果选择了英文字符集,那你是不能在char、varchar这样的数据类型字段里存中文的。存进去的数据首先会不对(因为系统选择了错误的编码表),其次读出来也会是乱码。为了以后一劳永逸,千万要在安装时选择正确的Collation。

一旦服务器级别的字符集和排序规则确定,以后要想更改则必须重建系统数据库。这跟重新安装数据库服务差不多。如果需要更改服务器级别的排序规则,步骤如下:

① 把所有的数据库备份,并且同时备份所有数据库的登录、作业。

② 把所有的用户数据库卸载(Detach)。

③ 通过下面的命令让SQL使用指定的排序规则重建系统数据库。其中/qb指定我们用安静模式进行重建,也就是重建期间不会有提示出现。

start/wait setup.exe/qb INSTANCENAME=InstanceName REINSTALL=SQL_Engine REBUILDDATABASE
=1 SAPWD=test SQLCOLLATION=CollationName

步骤本身虽然并不是很麻烦,但重建系统数据库后,原先master和msdb里的所有内容都会丢失。用户需要重新创建登录账户和作业,并重新Attach用户数据库,改动还是蛮大的。对一套现有的SQL Server改Collation是一件伤筋动骨的事情。

不建议在域控制器上装SQL Server

从安全和性能方面考虑,在域控制器上装数据库是不建议的,虽然在域控制器上装单机版本不会报错。另外,由于在域控制器上没有Local Service和Network Service账号,所以如果一定要装,数据库服务的启动账号建议使用域账号。

1.2.2 用SlipStream方式进行安装

SQL Server 2008及以上版本,数据库服务的安装支持SlipStream(集成安装)方式。使用集成安装方式,我们可以同时安装服务封包(Service Pack)和累计更新(Cumulative Update)。以SQL Server 2008英文版为例,假定要安装SQL Server 2008 CU2 for SP3,下面是使用集成安装方式的步骤:

① 下载SQL Server 2008 SP3和SQL Sever 2008 CU2 for SP3。

② 把CU2 for SP3解压缩到D:\SQL2008Install\CU2目录下。

SQLServer2008-KB2633143-x64.exe /X:D:\SQL2008Install\CU2

③ 把SP3解压缩到D:\SQL2008Install\SP3目录下。

SQLServer2008SP3-KB2546951-x64-ENU.exe /X:D:\SQL2008Install\SP3

④ 运行CU2 for SP3这个安装包下面的sqlsupport.msi,其位置如下:

D:\SQL2008Install\CU2\x64\setup\1033\sqlsupport.msi

⑤ 到SQL Server 2008 RTM安装介质下面,打开命令行窗口,执行如下命令:

Setup.exe /PCUSource=D:\SQL2008Install\SP3 /CUSource=D:\SQL2008Install\CU2

要注意的一点是PCUSource或CUSource指定的路径不能有空格。安装开始,输入参数后,在正式安装前有一个小结。这里我们可以再次确认我们是用集成安装的:Action: Install (Slipstream),并且标识有PCU Source路径和CU Source路径,如图1-8所示。

图1-8 正式安装前的提示,由于采用集成安装,所以有SlipStream标识

1.2.3 用Product Update方式进行安装

从SQL Server 2012开始,SlipStream方式不再被推荐,这个功能被Product Update所替代。SQL Server 2012在安装的时候,会通过Microsoft Update、Windows Server Update Services (WSUS)或本地的文件夹去寻找最新的更新,如图1-9所示。找到更新后,用户可以选择是否包括安装更新。当然,使用Microsoft Update有一个要求,服务器是要能够连外网的。如果不能连外网,则只能在本地文件夹里寻找更新。

图1-9 SQL Server 2012安装程序有一个Scan for Product Updates步骤

下面的命令行参数提示安装程序在C:\MyUpdates本地文件夹寻找更新:

Setup.exe /Action=Install /UpdateEnabled=TRUE /UpdateSource="C:\MyUpdates"

我们也可以通过在ConfigurationFile.ini配置文件里指定。下面是配置文件的一个例子。在这里,同时也指定了要安装更新及更新所在的路径。

; Microsoft SQL Server 2012 Configuration file
[OPTIONS]
; Specifies a Setup work flow, like INSTALL, UNINSTALL, or UPGRADE. This is a required
parameter.
ACTION="Install"
;Specifies whether SQL Server Setup should discover and include product updates.The valid
values are True and False or 1 and 0. By default SQL Server Setup will include updates
that are found.
UpdateEnabled=TRUE
; Specifies the location where SQL Server Setup will obtain product updates. The valid
values are "MU" to search Microsoft Update, a valid folder path, a relative path such
as .\MyUpdates or a UNC share. By default SQL Server Setup will search Microsoft Update
or a Windows Update service through the Window Server Update Services.
UpdateSource=.\Updates

然后用下面的命令,进行安装:

Setup.exe /ConfigurationFile= ConfigurationFile.ini

1.2.4 常见安装问题

在单机上进行数据库安装,有可能会碰到一些比较常见的安装报错。有些错误信息会在安装过程中提示,另一些错误则需要查看安装日志才能得到。下面是一些常见的错误及相应的解决办法。

性能计数器检查失败,导致数据库无法安装,错误信息如下:

“对性能监视器计数器注册表执行系统配置检查失败,有关详细信息,请参阅自述文件或SQL Server联机丛书中的“如何在SQL Server 2012中为安装程序增加计数器注册表项值”

这通常是因为操作系统为英文版本,而要安装的SQL Server却是中文版本,在配置性能计数器的时候,在注册表找不到合适的语言ID,所以报错。解决办法比较简单,我们只需要把操作系统的区域和语言设置为中文,再次重新安装就不会有这个问题出现了。

安装在某阶段出现hang现象

对于这类问题可能很难快速入手。这时,我们可以上网求助,看别人是否也碰到过同样的问题。稍微搜索一下,用关键字“SQL Server”setup hang就能发现这个问题通常是由于.net framework 2.0的一个Bug所导致的。在有超过32个CPU的系统上安装64位的SQL Server时,这个Bug有可能会被触发。具体对这个产品问题的介绍,可参考下面的两个微软知识库文档。

http://support.microsoft.com/kb/2251397

http://support.microsoft.com/kb/2276255

产生这个问题主要是由于系统上有超过32个CPU,要想规避这个问题,则需在Windows Server 2008或2008 R2环境下用如下办法:

① 运行msconfig,打开系统配置。

② 切换到Boot这个tab页,选择高级选项。

③ 把CPU的个数改为1,然后重新启动服务器,如图1-10所示。

图1-10 CPU个数设定

④ 安装好SQL Server以后,再次打开系统配置,去掉“Number of processors”这个选项的勾选。

或者我们可以用如下命令提示安装程序绑定前16个CPU(用CPU affinity),这样也能避免此类问题。

Start /affinity ffff setup.exe

当然,安装时出现hang的现象也不全是由于以上的原因,只是在超过32个CPU的环境下.net framework 2.0 bug所导致的可能性居多。如果不是这个原因,那么我们需要联系微软技术支持,进一步分析原因。

另外,如果CPU个数为奇数,或CPU核(Core)的个数不是2的指数,也会碰到数据库服务安装不成功的例子。具体可参考文章http://support.microsoft.com/kb/954835。比较快速的解决办法是在安装前把Number of Processor改为1,这样基本能避免安装出现hang这个问题。安装完以后,我们再把Number of Processor改回。

安装时,无法启动数据库服务

在对数据库进行安装的时候,安装程序会去启动数据库服务。如果有数据库服务无法启动,则安装程序也会失败。安装日志报如下错误:

2011-06-08  11:10:47  Slp:  Microsoft.SqlServer.Configuration.SqlEngine.SqlEngineConfig
Exception: Could not find the Database Engine startup handle.

上面的错误其实提示我们数据库无法启动或者启动时出现了问题。查看数据库服务错误日志(SQL Server Error Log),有如下信息:

2011-06-08 11:07:44.69 spid7s      Error: 15209, Severity: 16, State: 1.
2011-06-08 11:07:44.69 spid7s      An error occurred during encryption.

在网上搜索此错误信息,读者会发现这个错误通常是由于启动账号的user profile出问题所导致。快速的解决办法是我们把启动账号的user profile删掉(通过删除文件夹C:\Users\serviceAccount),然后用这个账号登录服务器,user profile会自动重建。重装数据库服务就能成功。当然,数据库服务无法启动的原因各种各样,读者需要具体查看数据库错误日志或操作系统应用程序日志,明确具体原因,然后进行解决。

安装时,报WMI错误

在安装的时候,有可能会碰到如下错误:

The MOF compiler could not connect with the WMI server.  This is either because of a semantic
error such as an incompatibility with the existing WMI repository or an actual error such
as the failure of the WMI server to start.

这个错误看似是WMI的问题,但如果经过wbemtest测试(直接运行wbemtest),WMI是没有问题的,则这个错误通常是由于前面SQL Server失败的安装没有被彻底卸载所导致的。那么我们需要先把前面失败的安装给彻底卸载掉。

在对数据库安装打补丁的时候,由于%windir%\installer目录下的MSI或MSP文件丢失,导致打补丁失败

在安装日志中,其可能的错误信息如下:

SQL  Server  Setup  has  encountered  the  following  error:  The  cached  path  file
"C:\Windows\Installer\1fdb1aec.msp" is missing. The original file for this cached file
is "sql_engine_core_inst.msp",which can be installed from "Hotfix 1702 for SQL Server
2008 R2 (KB 981355) (64-bit)", version 10.50.1702.0.

对于这个错误,在下面的微软知识库文档里曾有描述:http://support.microsoft.com/kb/969052

我们可以使用上述微软知识库文档文章中提及的FindSQLInstalls.vbs脚本查看当前的安装有没有丢失的MSI或MSP文件,然后根据微软知识库文档对%windir%\installer目录下丢失的MSI或MSP文件进行修复。

数据库的安装和升级虽然步骤简单,但是牵涉到很多的其他组件,有操作系统、.NET Framework、用户权限、环境设置等。有一个地方不对,安装就会失败。常见的排查步骤是:

① 检查安装小结日志,大致了解出错在哪一个步骤和哪一个功能。

② 根据安装小结日志,检查具体错误日志,搜索具体的错误信息。

③ 如果错误信息很明显,则做相应的修复。

④ 如果错误信息比较模糊,则可通过互联网搜索看此类错误信息是否有其他人遇到过,以及相应的解决方法。

另外,对于SQL Server安装出错,实在没有办法的情况下,重新安装操作系统也是一个不错的选择。毕竟重装操作系统后,基本上是能够在预期的时间内顺利完成SQL Server安装任务的。