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

1.1 数据库安装过程介绍

1.1.1 setup.exe执行过程

SQL Server通过执行setup.exe调用安装向导来进行数据库安装或升级。setup.exe是用native代码写的,不依赖于其他组件,在任何平台上都能运行。以SQL Server 2012为例,这个可执行文件主要做以下几件事情:

① 检测在本服务器上是否有已安装过的setup.exe文件缓存。如果有,而且缓存的setup.exe版本高于或等于正在执行的setup.exe,那么会切换到本机上的setup.exe执行。这样做的目的是为了能够支持Slipstream(集成)安装(在安装时可以同时安装服务封包(Service Pack)和累计更新(Cumulative Update))。

② 检测本机上的.net framework 2.0或3.5是否已经安装。

③ 安装程序启动ScenarioEngine.exe对全局规则(global rule)进行检查,如图1-1所示。

图1-1 安装程序对全局规则进行检查

④ 通过全局规则(global rule)检查后,ScenarioEngine.exe会扫描是否有最新的补丁,如图1-2所示。如果不想检查,可以选择“Skip Scan”,并继续进行安装。

图1-2 安装程序搜索是否有最新的补丁

⑤ 随后,ScenarioEngine.exe会对Setup files组件执行安装,如图1-3所示。

图1-3 安装程序对Setup files组件进行安装

⑥ ScenarioEngine.exe执行真正的用户请求操作,如图1-4所示。

图1-4 ScenarioEngine.exe执行真正的用户请求操作

ScenarioEngine.exe是用C#写的,它根据用户输入信息产生工作流,并根据工作流信息执行安装。跟具体的SQL安装(ScenarioEngine.exe)日志不同,setup.exe的安装日志存放在%temp%目录下的sqlsetup*.log文件中。

一般来讲,运行setup.exe这一阶段安装出错的可能性非常小。下面来讨论一下在执行工作流所产生的日志,也就是通常所说的SQL Server安装日志。执行工作流所产生的安装日志会比较多,我们在1.1.2节会介绍它们的位置,以及其中重要的几个安装日志文件。

1.1.2 重要的数据库的安装日志文件

SQL Server在安装或升级的过程中会生成日志。不同版本的SQL Server其安装日志的位置稍有不同。SQL Server 2005安装日志目录是:%programFiles%\Microsoft SQL Server\90\Setup Bootstrap\Log。在Log目录下有两个子目录Files和Hotfix。其中Files子目录包含安装日志,Hotfix子目录包含服务封包和累计更新日志,如图1-5所示。

图1-5 SQL Server 2005的安装日志路径

SQL Server 2008和SQL Server 2008 R2对安装或服务封包或累计更新不再区分,而是以时间为子目录统一放在如下目录:%programFiles%\Microsoft SQL Server\100\Setup Bootstrap\Log。SQL Server 2012也是以时间为子目录放在%programFiles%\Microsoft SQL Server\110\Setup Bootstrap\Log下,如图1-6所示。

图1-6 SQL Server 2012的安装日志路径

子目录的时间以<YYYYMMDD_HHMMSS>格式(如20120419_222544)表明我们的安装或升级是在2012年4月19日晚上10点25分44秒开始的。

以时间为单位的子目录下有很多日志文件,如图1-7所示。

图1-7 具体的安装日志文件

下面对其中重要的日志文件进行介绍。

Summary_<机器名>_<YYYYMMDD_HHMMSS>.txt

该文件是安装小结,读者看安装日志的时候,建议首先看这个文件。下面是这个小结的一个例子:有部分删除,并加有部分注释。

Overall summary:
  Final result:                 Passed but reboot required, see logs for details
  Exit code (Decimal):          3010
  Start time:                   2012-04-19 22:28:44
  End time:                     2012-04-19 23:07:09
  Requested action:             Install

== 上面的小结表明安装成功,但是安装后,需要重新启动机器,安装是从2012-04-19晚上10:28分开始,23:07分结束。我们的操作是Install(安装)。这里开始的时间比文件夹的时间要晚一些。

Machine Properties:
  Machine name:                 xxxx
  Machine processor count:      4
  OS version:                   Windows Server 2008 R2
  OS service pack:              Service Pack 1
  OS region:                    United States
  OS language:                  English (United States)
  OS architecture:              x64
  Process architecture:         64 Bit
  OS clustered:                 No
  == 上面显示我们的机器环境是Windows Server 2008 R2 SP1英文版,64位操作系统,机器有4个CPU,而且该机器不在群集环境里。
Product features discovered:
  Product          Instance     Feature                         Version
  SQL Server 2008  KATMAI       Database Engine Services        10.0.1600.22
  SQL Server 2008  KATMAI       SQL Server Replication          10.0.1600.22
  SQL Server 2008               Management Tools – Basic       10.0.1600.22
  SQL Server 2008               Management Tools – Complete    10.0.1600.22
  == 在安装前,显示在该服务器上,已经装有的数据库服务
Package properties:
  Description:                  Microsoft SQL Server 2012
  ProductName:                  SQL Server 2012
  Type:                         RTM
  Version:                      11
  SPLevel:                      0
  Installation location:        C:\SQLServer2012\x64\setup\
  Installation edition:         Developer
  == 显示我们要安装的数据库服务版本,以及安装介质路径
User Input Settings:
  ACTION:                       Install
  ADDCURRENTUSERASSQLADMIN:     false
  AGTSVCACCOUNT:                NT Service\SQLAgent$DENALI
  AGTSVCPASSWORD:               *****
  AGTSVCSTARTUPTYPE:            Manual
  ASBACKUPDIR:                  Backup
  ASCOLLATION:                  Latin1_General_CI_AS
  ASCONFIGDIR:                  Config
  ASDATADIR:                    Data
  ASLOGDIR:                     Log
  ASPROVIDERMSOLAP:             1
  ASSERVERMODE:                 MULTIDIMENSIONAL
  ASSVCACCOUNT:                 <empty>
  ASSVCPASSWORD:                <empty>
  ASSVCSTARTUPTYPE:             Automatic
  ASSYSADMINACCOUNTS:           <empty>
  ASTEMPDIR:                    Temp
  BROWSERSVCSTARTUPTYPE:        Automatic
  CLTCTLRNAME:                  <empty>
  CLTRESULTDIR:                 <empty>
  CLTSTARTUPTYPE:           0
  CLTSVCACCOUNT:            <empty>
  CLTSVCPASSWORD:           <empty>
  CLTWORKINGDIR:            <empty>
  COMMFABRICENCRYPTION:     0
  COMMFABRICNETWORKLEVEL:   0
  COMMFABRICPORT:           0
  CONFIGURATIONFILE:        C:\Program Files\Microsoft SQL Server\110\Setup Bootstrap\
Log\20120419_222608\ConfigurationFile.ini
  CTLRSTARTUPTYPE:          0
  CTLRSVCACCOUNT:           <empty>
  CTLRSVCPASSWORD:          <empty>
  CTLRUSERS:                <empty>
  ENABLERANU:               false
  ENU:                      true
  ERRORREPORTING:           false
  FEATURES:                 SQLENGINE, REPLICATION,DQ, SSMS, ADV_SSMS
  FILESTREAMLEVEL:          0
  FILESTREAMSHARENAME:      <empty>
  FTSVCACCOUNT:             NT Service\MSSQLFDLauncher$DENALI
  FTSVCPASSWORD:            <empty>
  HELP:                     false
  INDICATEPROGRESS:         false
  INSTALLSHAREDDIR:         C:\Program Files\Microsoft SQL Server\
  INSTALLSHAREDWOWDIR:      C:\Program Files (x86)\Microsoft SQL Server\
  INSTALLSQLDATADIR:        <empty>
  INSTANCEDIR:              C:\Program Files\Microsoft SQL Server\
  INSTANCEID:               DENALI
  INSTANCENAME:             DENALI
  ISSVCACCOUNT:             NT AUTHORITY\Network Service
  ISSVCPASSWORD:            <empty>
  ISSVCSTARTUPTYPE:         Automatic
  MATRIXCMBRICKCOMMPORT:    0
  MATRIXCMSERVERNAME:       <empty>
  MATRIXNAME:               <empty>
  NPENABLED:                0
  PID:                      *****
  QUIET:                    false
  QUIETSIMPLE:              false
  ROLE:                     <empty>
  RSINSTALLMODE:            DefaultNativeMode
  RSSHPINSTALLMODE:         DefaultSharePointMode
  RSSVCACCOUNT:             <empty>
  RSSVCPASSWORD:            <empty>
  RSSVCSTARTUPTYPE:         Automatic
  SAPWD:                    *****
  SECURITYMODE:             SQL
  SQLBACKUPDIR:             <empty>
  SQLCOLLATION:             SQL_Latin1_General_CP1_CI_AS
  SQLSVCACCOUNT:            NT Service\MSSQL$DENALI
  SQLSVCPASSWORD:           <empty>
  SQLSVCSTARTUPTYPE:        Automatic
  SQLSYSADMINACCOUNTS:      xxxx\Administrator
  SQLTEMPDBDIR:             <empty>
  SQLTEMPDBLOGDIR:          <empty>
  SQLUSERDBDIR:             <empty>
  SQLUSERDBLOGDIR:          <empty>
  SQMREPORTING:             false
  TCPENABLED:               0
  UIMODE:                   Normal
  UpdateEnabled:            true
  UpdateSource:             MU
  X86:                      false
  == 显示安装的输入参数,通过UI界面获得
  Configuration file:       C:\Program  Files\Microsoft  SQL  Server\110\Setup  Bootstrap\
Log\20120419_222608\ConfigurationFile.ini
== 在再次安装的时候,不再需要输入这么多参数了,可以利用这个配置文件,以静默方式安装。
Detailed results:
  Feature:                      Management Tools - Complete
  Status:                       Passed
  Feature:                      Management Tools - Basic
  Status:                       Passed
  Feature:                      Database Engine Services
  Status:                       Passed
  Feature:                      Data Quality Services
  Status:                       Passed
  Feature:                      SQL Server Replication
  Status:                       Passed
  Feature:                      SQL Browser
  Status:                       Passed
  Feature:                      SQL Writer
  Status:                       Passed
  Feature:                      SQL Client Connectivity
  Status:                       Passed
  Feature:                      SQL Client Connectivity SDK
  Status:                       Passed
  == 显示每个功能的安装状况

如果某个功能安装不成功,则会显示信息告诉我们大致的错误信息,以及从哪个日志能更具体的看到错误信息。如对于下面安装失败的例子,其小结告诉我们Database Engine服务安装出错,群集中资源不能正常上线,要看具体的日志需要进一步查看Detail.txt。

Detailed results:
  Feature:                      Database Engine Services
  Status:                       Failed: see logs for details
  MSI status:                   Passed
  Configuration status:         Failed: see details below
  Configuration error code:     0x1C2074D8@1216@1
  Configuration error description: The cluster resource 'SQL Server (xxxx)' could not be
brought online.  Error: The resource failed to come online due to the failure of one or
more provider resources. (Exception from HRESULT: 0x80071736)
  Configuration log:            C:\Program Files\Microsoft SQL Server\110\Setup Bootstrap\
Log\20120303_102921\Detail.txt

在父目录也就是LOG目录下也会保存一份Summary.txt。其内容跟最近日期的安装小结是一样的。

Detail.txt

这是详细日志。由于是详细日志,所以里面记载的日志非常之多且详细,从头到尾把这个日志读下来是不太现实的,不过读者可以用关键字“Error:”或“Exception”来迅速定位到出错的地方。如针对前面提到的群集资源状态不正确的错误,其具体的Detail.txt相应日志如下:

2012-03-03 11:22:44 Slp: Configuration action failed for feature SQL_Engine_Core_Inst during timing Startup and scenario Startup.
2012-03-03 11:22:44 Slp: The cluster resource 'SQL Server (xxxx)' could not be#################### brought#######
online.  Error:The resource failed to come online due to the failure of one or more provider resources. (Exception from HRESULT: 0x80071736)
2012-03-03 11:22:44 Slp: Configuration action failed for feature SQL_Engine_Core_Inst
during timing Startup and scenario Startup.
2012-03-03  11:22:44  Slp:  Microsoft.SqlServer.Configuration.Cluster.ClusterException:
The cluster resource 'SQL Server (xxxx)' could not be brought online.  Error: The resource
failed to come online due to the failure of one or more provider resources. (Exception
from HRESULT: 0x80071736) ---> System.Runtime.InteropServices.COMException (0x80071736):
The resource failed to come online due to the failure of one or more provider resources.
(Exception from HRESULT: 0x80071736)
2012-03-03 11:22:44 Slp:  at Microsoft.SqlServer.Interop.MSClusterLib.ClusResourceClass.
Online(Int32 nTimeout)
2012-03-03 11:22:44 Slp:  at Microsoft.SqlServer.Configuration.Cluster.ClusterResource.
Online(Int32 timeout)
2012-03-03 11:22:44 Slp:  --- End of inner exception stack trace ---
2012-03-03 11:22:44 Slp:  at Microsoft.SqlServer.Configuration.Cluster.ClusterResource.
Online(Int32 timeout)
2012-03-03 11:22:44 Slp:  at Microsoft.SqlServer.Configuration.SqlEngine.SQLEngine
ClusterFeature.Cluster(ClusterNetworkName networkName, ClusterResource[] disks, Cluster
Group clusterGroup, String instanceName, String groupSid, String[] nodes)
2012-03-03 11:22:44 Slp:  at Microsoft.SqlServer.Configuration.SqlEngine.SQLServer
FailoverCluster.CreateEngineFailoverCluster(ClusterNetworkName networkName, String instanceName, String groupSid, ClusterGroup clusterGroup, ClusterPhysicalDisk[]
diskResources, String[] nodes)

从日志来看,我们在把群集资源SQL Server(xxxx)上线的时候,其依赖的某一资源不能正常上线,导致SQL Server资源在线超时而处于Failed状态,数据库的整体安装失败。

这时,查看Windows的日志就能发现SQL Server(xxxx)所依赖的数据库网络名资源上线失败,其根本原因是在于域控制器上的权限不足所导致的。我们会在后面的1.4节提到如何解决这个问题。

Cluster network name resource 'SQL Network Name (xxxx)' failed to create its associated
computer object in domain 'server.zzz.com' for the following reason: Unable to update
password for computer account.
The text for the associated error code is: Access is denied.

<Feature>_<Architecture>_<Iteration>.log

SQL Server安装程序进入工作流后,会根据用户选择不同而安装不同的组件,如SQL Server Management Studo组件,其安装源的MSI文件名为sql_ssms.msi。每一个MSI文件在安装时,会分别生成安装日志。其日志文件的命名规范是<Feature>_<Architectgure>_<Iteration>.log。如sql_ssms_Cpu64_1.log是在64位平台上安装SQL Server Management Studio组件所生成的日志。如果某个安装包在安装的时候出现问题,我们应该到安装包对应的日志文件去查看具体原因。

除了这几个重要的日志文件,SQL Server在安装或升级中还会生成其他的一些日志文件。要从这些海量信息中定位到准确的错误信息,读者需要以日志小结为基础,顺藤摸瓜,逐步寻找。根据错误信息采取相应的解决办法。如果错误的提示比较模糊,无法找到应对办法,则可能需要上网查询,看看是否有人也碰到过类似的问题,以及相应的解决方法。

下面我们会介绍各种环境下数据库安装或者打补丁需要注意的事项,以及一些常见的问题。很多问题都是通过阅读安装日志来找出失败原因的。