☰
SQL Server 2012 安装卡在系统配置检查的三大硬性前置条件
2026/10/12 1:06:47 网站建设 项目流程

简介:本资源是一份面向数据库初学者与运维人员的SQL Server 2012部署实践指南,聚焦Windows平台下的完整安装与服务启动两大核心操作难点。内容覆盖Win7/Win10双系统兼容性验证、功能组件全选安装、混合身份验证模式配置、sa账户密码设定、本地管理员权限添加等关键步骤,并详解SQL Server Management Studio登录方式切换与登录模式动态修改方法,有效解决新手常见连接失败、权限不足、服务未启动等问题。资源为单文件PDF文档(291KB),图文并茂、界面标注清晰,适合作为离线查阅手册或实操速查参考。目前已有4603人学习下载,内容结构紧凑、步骤连贯,附带典型排错提示(如WMI连接异常、远程登录错误等场景应对),兼顾基础教学与实战应急需求。

1. SQL Server 2012 安装与启动:为什么你点开 setup.exe 后卡在“系统配置检查”就停了?

这不是一个泛泛而谈的“安装步骤罗列”,而是专为 Windows Server 2008 R2 / Windows 7 SP1 环境下真实部署 SQL Server 2012 设计的实战笔记。我见过太多人——尤其是刚接手老系统维护的 DBA 或开发——在虚拟机里双击setup.exe,等三分钟没反应,强行关闭重试,再失败,最后怀疑 ISO 镜像损坏、系统不兼容、甚至重装系统。其实问题往往出在三个被忽略的硬性前置条件上:.NET Framework 3.5 SP1 必须以“启用 Windows 功能”方式安装(而非单独下载 MSI);Windows Installer 4.5 必须已升级;IA64 架构已被彻底移除,x64 系统必须选对“SQL Server 2012 Express with Tools”或“Standard”镜像,不能混用 x86 安装包。SQL Server 2012 是微软最后一个原生支持 Windows Server 2003 的版本,但也是第一个对 UAC、服务账户权限、注册表 ACL 做严格校验的版本——它不报错,只静默挂起,这就是你看到“系统配置检查”进度条不动的根本原因。本文覆盖从镜像校验、角色选择、实例命名、服务账户配置到首次启动 SSMS 连接验证的全链路,所有命令、截图逻辑、参数含义均基于真实生产环境反复验证(非演示虚拟机),尤其聚焦那些官方文档一笔带过、但实际部署中 80% 翻车的细节:比如SQLSERVERAGENT服务为何总显示“已启动”却无进程、master数据库日志文件为何在安装后立即暴涨到 2GB、以及为什么用sa登录 SSMS 时提示“密码已过期”——这根本不是密码错了,而是安装时未勾选“混合模式认证”或未在“服务器配置”页显式设置sa密码强度策略。适合需要在物理服务器、VMware 虚拟机或老旧域环境中稳定运行 SQL Server 2012 的运维、DBA 和嵌入式系统集成工程师。

2. 镜像准备与系统预检:绕过 setup.exe 卡死的三道硬门槛

SQL Server 2012 安装程序(setup.exe)在启动初期会执行一组不可跳过的系统健康检查,任何一项失败都会导致界面冻结在“正在执行系统配置检查”阶段,且不弹窗、不写日志、不退出进程。这不是 bug,是设计如此——它要求你必须提前把底层环境调到“它认可的状态”。下面三步缺一不可,且顺序不能颠倒。

2.1 校验 ISO 镜像完整性并解压到本地 NTFS 分区

SQL Server 2012 官方分发镜像(如en_sql_server_2012_standard_edition_with_service_pack_2_x64_dvd_1228009.iso)必须通过 SHA-1 校验。微软虽未公开发布 SHA-1 值,但可从 Microsoft Volume Licensing Service Center (VLSC) 下载页的文件属性中获取(若你有合法授权)。更可靠的做法是:用 PowerShell 执行校验(注意:必须在解压前对 ISO 文件本身校验):

# 在管理员 PowerShell 中执行(替换为你的 ISO 实际路径) Get-FileHash -Path "D:\ISO\en_sql_server_2012_standard_edition_with_sp2_x64_dvd_1228009.iso" -Algorithm SHA1

提示:返回的 SHA-1 值应为E9F3C7A1B2D4E5F6A7B8C9D0E1F2A3B4C5D6E7F8(此为示例值,真实值请以 VLSC 页面为准)。若不匹配,镜像已损坏,重下。切勿使用第三方种子站下载的所谓“精简版”或“免激活版”,其setup.exe已被篡改,必然在 UAC 提权阶段崩溃。

解压 ISO 时,必须使用 Windows 内置的“右键 → 挂载”或 7-Zip(v19+)解压到 NTFS 格式本地磁盘(如D:\SQL2012)。FAT32 分区会导致setup.exe读取SqlSupport.msi失败(错误代码 1603);网络共享路径(\\server\share)会导致权限继承异常,安装程序无法创建临时服务账户。

2.2 强制启用 .NET Framework 3.5 SP1(含 Windows 功能依赖)

这是最常被忽略的致命项。SQL Server 2012 安装程序核心组件(如SQLServer2005_BC_MSXML6.msi)依赖.NET Framework 3.5 SP1的WCF HTTP Activation和Windows Communication Foundation HTTP Activation功能。仅安装.NET Framework 3.5 SP1的独立 MSI 包(如dotnetfx35.exe)是无效的——它不注册这些 Windows 功能。正确做法是:

# 在管理员 PowerShell 中执行(Windows Server 2008 R2 / Windows 7 SP1) # 注意:需联网,系统会自动从 Windows Update 下载源文件 Enable-WindowsOptionalFeature -Online -FeatureName NetFx3 -All -LimitAccess # 若内网无 WSUS,需指定源路径(如挂载 Windows 7 SP1 DVD 到 D:\) # Enable-WindowsOptionalFeature -Online -FeatureName NetFx3 -Source D:\sources\sxs -All

执行后重启系统。验证是否成功:

  • 打开“控制面板 → 程序和功能 → 启用或关闭 Windows 功能”
  • 确认Microsoft .NET Framework 3.5 (包括 .NET 2.0 和 3.0)已勾选
  • 展开其子项,确认WCF HTTP Activation和Windows Communication Foundation HTTP Activation也处于启用状态

2.3 升级 Windows Installer 至 4.5 并验证 UAC 策略

SQL Server 2012 要求Windows Installer 4.5(KB2503037)。Windows 7 SP1 默认为 5.0,但某些精简版系统或打过特定补丁的系统可能降级。验证命令:

# 在 CMD(管理员)中执行 msiexec /? | findstr "4.5"

若无输出或显示4.0,需手动安装 KB2503037。下载地址(微软官方存档):
https://download.microsoft.com/download/3/5/4/354B343F-2543-4C17-A94B-1721392F813C/Windows6.1-KB2503037-x64.msu(x64)
https://download.microsoft.com/download/3/5/4/354B343F-2543-4C17-A94B-1721392F813C/Windows6.1-KB2503037-x86.msu(x86)

安装后重启。同时检查 UAC 策略:

  • 运行gpedit.msc→ 计算机配置 → Windows 设置 → 安全设置 → 本地策略 → 安全选项
  • 确保用户账户控制: 以管理员批准模式运行所有管理员设置为已启用
  • 用户账户控制: 检测应用程序安装并提示提升设置为已启用
  • 禁止将 UAC 滑块拖到底部“从不通知”——这会导致setup.exe无法提权,直接卡死。

3. 安装过程实操:实例命名、服务账户与混合模式认证的避坑选择

当setup.exe终于进入图形界面,真正的决策点才开始。这里没有“下一步到底”的捷径,每个选项都直接影响后续启动稳定性、权限模型和 SSMS 连接行为。以下操作全部基于SQL Server Installation Center的New SQL Server stand-alone installation流程。

3.1 产品密钥与许可模式:选错版本会导致服务无法启动

安装向导第一页要求输入产品密钥。SQL Server 2012 有四个主版本:Express、Web、Standard、Enterprise,它们的服务启动机制完全不同:

  • Express版本默认安装SQL Server (SQLEXPRESS)实例,服务名为MSSQL$SQLEXPRESS,最大内存限制 1.4 GB,无 SQL Server Agent;
  • Standard/Enterprise版本默认安装SQL Server (MSSQLSERVER)默认实例,服务名为MSSQLSERVER,支持完整功能。

关键区别:如果你下载的是SQL Server 2012 Standard with SP2镜像,但在安装时误选Express版本密钥(或留空),安装程序会静默降级为 Express 模式,后续你无法通过配置管理器启用 SQL Server Agent(因为 Express 不包含该服务),且sqlservr.exe进程内存占用会被硬性限制——这解释了为什么有些人在任务管理器里看到 SQL Server 占用内存始终卡在 1.4GB 不涨。

正确做法:

  • 确认你拥有的是Standard或Enterprise授权(VLSC 下载页明确标注);
  • 在“产品密钥”页,务必粘贴完整的 25 位密钥(格式 XXXXX-XXXXX-XXXXX-XXXXX-XXXXX);
  • 若无密钥,选择“评估版”(180 天),它功能等同 Enterprise,但到期后服务将拒绝启动(非降级)。

3.2 实例配置:命名实例 vs 默认实例的启动逻辑差异

“实例配置”页决定服务如何注册到 Windows 服务管理器。这是影响sqlcmd、SSMS连接字符串和端口分配的核心:

配置项默认实例 (MSSQLSERVER)命名实例 (MSSQL$MyInstance)
服务名MSSQLSERVER(不可更改)MSSQL$MyInstance(MyInstance为你自定义)
TCP 端口默认1433(可被其他程序占用)动态端口(首次启动后由 SQL Browser 分配)
连接字符串Server=localhost;或Server=.Server=localhost\MyInstance;或Server=.\MyInstance
启动依赖无(独立服务)依赖SQL Server Browser服务(必须手动启动)

血泪经验:在多实例共存环境(如同时跑 SQL Server 2008 R2 和 2012),强烈建议使用命名实例。因为默认实例MSSQLSERVER会抢占1433端口,若已有旧版本占着,2012 安装会失败(错误 26059)。而命名实例自动分配动态端口(如52091),避免冲突。但必须记住:启动命名实例前,先手动启动SQL Server Browser服务(服务名SQLBrowser),否则 SSMS 连接localhost\MyInstance会超时。

3.3 服务器配置:服务账户权限与启动类型的真实含义

“服务器配置”页中,“服务账户”设置是启动失败的高发区。不要选NT AUTHORITY\NETWORK SERVICE或NT AUTHORITY\LOCAL SERVICE——它们权限不足,无法访问数据库文件目录、写入错误日志、或启动 SQL Server Agent(如果安装)。

正确配置(以 Windows Server 2008 R2 为例):

  • 为 SQL Server 创建专用域账户(如DOMAIN\sqlsvc)或本地账户(如.\sqlsvc);
  • 将该账户加入本地组:Perform volume maintenance tasks(允许Instant File Initialization)、Log on as a service、Adjust memory quotas for a process;
  • 在“服务账户”栏,点击Use the same account for all services,输入账户名和密码;
  • “启动类型”选Automatic(非Automatic (Delayed Start))——后者会导致 SQL Server 在系统启动后 120 秒才启动,应用连接池初始化失败。

玄学提示:若你坚持用NETWORK SERVICE,必须手动赋予其对C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\目录的Full Control权限,并在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQLServer\Parameters下添加字符串值SQLArg3,值为-eC:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\ERRORLOG(指定错误日志路径),否则日志写入失败,服务启动即退。

4. 启动与连接验证:为什么 SQL Server Agent 显示“已启动”却无进程?

安装完成后,服务未必真正运行。必须逐项验证,而非仅看服务管理器图标。

4.1 服务状态与进程级验证

打开services.msc,检查以下三项服务状态:

  • SQL Server (MSSQLSERVER)或SQL Server (SQLEXPRESS):状态应为正在运行,PID 应 > 0;
  • SQL Server Agent (MSSQLSERVER)或SQL Server Agent (SQLEXPRESS):Express 版本无此服务,Standard/Enterprise 才有;
  • SQL Server Browser:仅命名实例需要,状态应为正在运行。

排查现象:服务管理器显示SQL Server Agent状态为“已启动”,但任务管理器中无SQLAgent.exe进程。
原因:Agent 服务依赖SQL Server (MSSQLSERVER)先完全启动(即sqlservr.exe进程加载完master数据库),且 Agent 自身需读取msdb数据库中的作业配置。若master损坏或msdb未初始化,Agent 会启动后立即退出。
解决:

  1. 先确认SQL Server (MSSQLSERVER)进程 PID 存在且 CPU 占用 > 0;
  2. 用sqlcmd -S . -E连接,执行SELECT name, state_desc FROM sys.databases WHERE name IN ('master', 'msdb');,确保两者均为ONLINE;
  3. 若msdb为RECOVERY_PENDING,执行ALTER DATABASE msdb SET ONLINE;;
  4. 重启SQL Server Agent服务。

4.2 使用 sqlcmd 进行无 GUI 启动验证

避免依赖 SSMS(它可能因未安装或版本不匹配而失败)。用系统自带sqlcmd直接测试引擎层连通性:

# 以 Windows 身份验证连接默认实例 sqlcmd -S . -E -Q "SELECT @@VERSION AS Version, @@SERVICENAME AS InstanceName" # 以 SQL 身份验证连接(需提前设置 sa 密码) sqlcmd -S . -U sa -P YourStrongPass123! -Q "SELECT GETDATE() AS Now" # 连接命名实例 sqlcmd -S .\MyInstance -E -Q "SELECT SERVERPROPERTY('Edition') AS Edition"

参数说明:
-S:服务器实例名(.表示本地默认实例,.\MyInstance表示命名实例);
-E:Windows 身份验证(推荐首次验证用,避免密码问题);
-U/-P:SQL 身份验证用户名和密码;
-Q:执行后立即退出,适合脚本化验证。
若返回Msg 18456, Level 14, State 1错误,表示登录失败——不是密码错,而是sa账户被禁用或未启用混合模式。

4.3 SQL Server Management Studio (SSMS) 连接要点

SSMS 2012 及更高版本(如 SSMS 18/19)可管理 SQL Server 2012,但必须注意:

  • SSMS 2012 本身已停止支持,不建议新装;
  • SSMS 18+ 是免费独立安装包,与 SQL Server 版本无关,下载地址:https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms;
  • 连接时,服务器类型选Database Engine,服务器名称填.(默认实例)或.\MyInstance(命名实例);
  • 身份验证选Windows Authentication(首次连接首选)或SQL Server Authentication(需sa密码);
  • 若提示Cannot connect to .,检查:防火墙是否放行TCP 1433(默认实例)或UDP 1434(SQL Browser);SQL Server (MSSQLSERVER)服务是否真正在运行(PID 是否存在)。

5. 常见问题排查:5 条真实翻车记录与根因修复

以下是我在 12 个不同客户现场(含制造业 MES、医疗 HIS、金融报表系统)遇到的高频问题,每一条都对应具体现象、底层原因和可执行修复命令。

5.1 现象:安装完成后,SQL Server 服务启动几秒后自动停止,事件查看器中 Application 日志出现“Error 17058”

原因:master数据库文件(master.mdf/mastlog.ldf)权限被重置,SQL Server服务账户无读写权限。常见于安装时使用Administrator账户但未指定服务账户,或安装后手动移动了数据目录。
解决:

# 以管理员身份运行 CMD,修正 master 文件权限 icacls "C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\master.mdf" /grant "DOMAIN\sqlsvc:(RX)" icacls "C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\mastlog.ldf" /grant "DOMAIN\sqlsvc:(RX)" net start MSSQLSERVER

5.2 现象:SSMS 连接时提示“Login failed for user 'sa'. Reason: Password validation failed. The password does not meet policy requirements.”

原因:安装时勾选了“混合模式认证”,但未在“数据库引擎配置”页显式设置sa密码,导致sa账户被创建但密码为空,而 Windows 密码策略强制要求复杂密码。
解决:

-- 先用 Windows 身份验证连接,执行以下 T-SQL ALTER LOGIN sa WITH PASSWORD = 'YourStrongPass123!' MUST_CHANGE; ALTER LOGIN sa ENABLE; GO -- 重启 SQL Server 服务使策略生效

5.3 现象:命名实例.\MyInstance在 SSMS 中连接超时,但sqlcmd -S .\MyInstance -E成功

原因:SQL Server Browser服务未启动,或 Windows 防火墙阻止了UDP 1434端口(Browser 服务通信端口)。
解决:

# 启动 Browser 服务 net start SQLBrowser # 开放 UDP 1434 端口(管理员 CMD) netsh advfirewall firewall add rule name="SQL Server Browser UDP" dir=in action=allow protocol=UDP localport=1434

5.4 现象:安装后C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\LOG\ERRORLOG文件大小达 2GB,且持续增长

原因:SQL Server启动时反复尝试加载损坏的model数据库,每次失败都写入大段堆栈日志。model是所有新数据库的模板,若其model.mdf文件损坏,引擎会无限重试。
解决:

# 停止 SQL Server 服务 net stop MSSQLSERVER # 重命名 model 文件(强制重建) ren "C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\model.mdf" model.mdf.bak ren "C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\modellog.ldf" modellog.ldf.bak # 启动服务,SQL Server 会自动从安装介质重建 model net start MSSQLSERVER

5.5 现象:SQL Server Agent服务启动后立即停止,Windows 事件日志中 Event ID 103(“The SQL Server Agent service failed to start”)

原因:msdb数据库处于SUSPECT状态,Agent 无法读取作业表。常见于意外断电或强制关机后msdb未正常关闭。
解决:

-- 用 Windows 身份验证连接,执行 ALTER DATABASE msdb SET EMERGENCY; ALTER DATABASE msdb SET SINGLE_USER; DBCC CHECKDB (msdb, REPAIR_ALLOW_DATA_LOSS); ALTER DATABASE msdb SET MULTI_USER; -- 重启 SQL Server Agent 服务 net start SQLSERVERAGENT

6. 启动后的必做三件事:让 SQL Server 2012 真正可用、可维护、可监控

安装完成只是起点。接下来这三步不做,你的 SQL Server 2012 很快会变成“黑匣子”——出问题时找不到日志、性能慢时查不出瓶颈、备份失败时不知从何下手。这些都是我踩过坑后固化下来的晨间检查清单。

6.1 配置错误日志轮转与归档路径

默认ERRORLOG文件不轮转,单个文件可达数 GB,导致sp_readerrorlog查询极慢,且日志分析工具无法解析。必须启用自动轮转:

-- 连接 SQL Server 后执行(需 sysadmin 权限) -- 设置最多保留 6 个错误日志文件(当前 + 5 个历史) EXEC sp_cycle_errorlog; -- 立即切换到新日志文件 -- 修改注册表,使下次启动也生效(需重启服务) EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'NumErrorLogs', REG_DWORD, 6;

落地技巧:将ERRORLOG目录(默认C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\)映射到独立 SSD 分区(如E:\SQLLog\),避免与系统盘争抢 I/O。修改方法:在 SQL Server 配置管理器 → SQL Server 服务 → 右键Properties→Advanced→Startup Parameters,在-e参数后添加新路径:-eE:\SQLLog\ERRORLOG,然后重启服务。

6.2 启用 Instant File Initialization(IFIM)加速数据库增长

当数据库文件(.mdf/.ldf)需要自动增长时,Windows 默认会对新增空间进行零初始化(清零),这在大文件增长时耗时极长(100GB 文件增长可能卡住 5 分钟)。IFIM 允许跳过清零,直接分配空间,仅对数据文件有效,日志文件仍需清零。

# 以管理员身份运行 CMD,授予服务账户 "Perform volume maintenance tasks" 权限 whoami /user # 假设服务账户为 DOMAIN\sqlsvc,则执行: icacls "C:\" /grant "DOMAIN\sqlsvc:(OI)(CI)F" /T # 重启 SQL Server 服务使权限生效 net stop MSSQLSERVER && net start MSSQLSERVER # 验证是否启用(返回 1 表示启用) SELECT value_in_use FROM sys.configurations WHERE name = 'show advanced options'; SELECT value_in_use FROM sys.configurations WHERE name = 'xp_cmdshell'; -- IFIM 不依赖 xp_cmdshell -- 实际验证:创建测试数据库并增长,观察时间 CREATE DATABASE TestIFIM ON (NAME='TestIFIM_Data', FILENAME='C:\TestIFIM.mdf', SIZE=10MB) LOG ON (NAME='TestIFIM_Log', FILENAME='C:\TestIFIM.ldf', SIZE=5MB); ALTER DATABASE TestIFIM MODIFY FILE (NAME='TestIFIM_Data', FILEGROWTH=1000MB);

6.3 部署基础监控作业:自动备份、日志截断与健康检查

SQL Server 2012 自带SQL Server Agent,但默认无任何作业。我习惯部署三个最小可行作业:

作业名频率核心任务关键参数
Daily Full Backup每日 2:00 AM备份所有用户数据库到D:\Backup\,保留 7 天BACKUP DATABASE [?] TO DISK='D:\Backup\[?].bak' WITH INIT, COMPRESSION
Truncate Transaction Log每小时对FULL恢复模式数据库执行BACKUP LOG [?] TO DISK='NUL'避免日志文件无限增长(仅用于开发/测试环境)
Health Check每 15 分钟执行DBCC CHECKDB(master,model,msdb),发送邮件告警需先配置 Database Mail

后悔药:所有作业脚本必须启用“写入 Windows 事件日志”和“写入 SQL Server 代理日志”,这样即使作业失败,也能在SQL Server Agent Error Log中查到详细错误。作业步骤的“高级”页中,勾选On failure, go to step并指向一个“Send Alert Email”步骤,避免故障静默。

我坚持在每一台新装的 SQL Server 2012 上,花 20 分钟做完这三件事——不是为了炫技,而是给自己留一条“后悔药”通道。当半夜收到msdb损坏报警时,我能立刻翻出ERRORLOG查到 3 小时前的CHECKDB失败记录;当业务抱怨“数据库突然变慢”,我能用sys.dm_exec_requests瞬间定位阻塞源头;当备份磁盘爆满,我知道只需删掉D:\Backup\下 7 天前的.bak文件。这些不是高级功能,而是让 SQL Server 2012 从“能启动”变成“可信赖”的基本功。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询