简介
本文列出了在 Microsoft SQL Server 2012 Service Pack 2 (SP2) 中修复的 bug。
便笺
- 此处未记录的其他修复也可能包含在 Service Pack 中。
- 当有更多文章发布时,该列表将会更新。
若要详细了解如何获取 SQL Server 2012 Service Pack,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2755533 如何获取 SQL Server 2012 的最新 Service Pack 注意 有关应从可用下载列表中选择哪个下载的详细信息,检查此处的发行说明。
详细信息
SQL Server 2012 服务包是累积更新,可将 SQL Server 2012 的所有版本和服务级别升级到 SP2。 除了本文列出的修补程序外,此 Service Pack 最多包含 Microsoft SQL Server 2012 SP1 累积更新 9 (CU9) 。
有关可用于 SQL Server 2012 SP1 的累积更新包的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2772858 在 SQL Server 2012 Service Pack 1 发布之后发布的 SQL Server 2012 内部版本
此 Service Pack 中修复的问题
有关 SQL Server 2012 SP2 中修复的 Bug 的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章。
| VSTS 错误号 | 知识库文章编号 | 说明 |
|---|---|---|
| 1374617 | 2028830 | 修复:实施 SQL Server 2008 或 SQL Server 2012 故障转移群集安装时,共享组件安装在错误的位置 |
| 1703014 | 2963382 | 修复:在 SSAS 2012 中运行多维数据集创建 MDX 查询时无法连接到服务器 |
| 2011247 | 2927741 | 修复:对 SSRS 2012 报表使用钻取操作时,图像未在网页中正确显示 |
| 2034994 | 2963383 | 修复:在 SSRS 2012 中使用 HPB 呈现器查看报表时截断文本 |
| 1769469 | 2963384 | 修复:当 SQL Server 2012 中 tempdb 数据库的日志文件已满时,SQL Server 崩溃 |
| 1973168 | 2963386 | 修复:导出到 Excel 工作表的订阅大于 10 MB 时,SSRS 2012 失败并出现 IsolatedStorageException |
| 1973196 | 2963388 | 修复:SSRS 2012 无法将大于 10 MB 的报表导出为 Excel 格式 |
| 787358 | 2963404 | 修复:回退导致数据库在 SQL Server 2012 中进入可疑模式 |
| 1043717 | 2806979 | 修复:在 SQL Server 2012 中对启用了 RCSI 的数据库中的表运行查询时性能不佳 |
| 1178585 | 2963412 | SQL Server 2012 SP2 中的新 DMF sys.dm_fts_index_keywords_position_by_document |
| 1182241 | 2966520 | 修复:1 月 1 日在 SSRS 2012 中重启 Reporting Services Windows 服务时,不会创建新的日志文件 |
| 1240848 | 2966519 | 修复:SQL Server 2012 中日志备份失败时没有错误消息 |
| 1253861 | 2936004 | 修复:在本地模式下的 Report Viewer 2012 UI 中完成数据源绑定时,Visual Studio 2012 由于访问冲突而崩溃 |
| 1262029 | 2966522 | 修复:文件共享订阅不填充 SSRS 2012 中的说明列 |
| 1481773 | 2966523 | 修复:指定 SSRS 2012 报告时,“名称”下拉列表为空 |
| 1419367 | 2964762 | 修复:在 SSAS 2012 中使用 Discover 命令时,将记录事件 ID 22 或错误 0xC1000016 |
| 2103903 | 2972285 | 修复:在 SQL Server 2012 中使用 SSISDB 作为部署存储时的性能问题 |
| 2021581 | 2965035 | SQL Server 2012 Service Pack 2 中的 SSAS 2012 日志记录功能改进 |
| 203749 | 2952444 | 修复:在 SQL Server 2012 中使用表变量时性能不佳 |
| 2095064 | 2936328 | 修复:针对在 SQL Server 2008 R2 或 SQL Server 2012 中保留了计算列的表运行 CHECKTABLE 或 SQL Server 时发生访问冲突 |
| 1222472 | 2827857 | 修复:DTA 在使用补充字符排序规则的 SQL Server 2012 实例上不起作用 |
| 2124209 | 2939277 | 修复:在 SQL Server 中使用并行查询计划运行包含 UNION 运算符的查询时,出现错误结果 |
以下问题的解决方法也包括在 SQL Server 2012 SP2 中。
| VSTS 错误号 | 说明 |
|---|---|
| 950185 | 改进了处理大型 HTML 报表时错误和警告的消息传递。 |
| 950189 | 改进了在处理具有大量参数的报表时处理错误和警告的信息。 |
| 994470 | 使用块模式一元运算符时出现错误结果。 |
| 1041277 | DPM 在具有 AlwaysOn 辅助数据库的服务器上的完整备份将转换为 copy_only 备份。 |
| 1278767 | 表格实例 perfmon 计数器的值:Memory\VertiPaq <TypeName> KB 始终为 0。 |
| 1355346 | 结束 SCOPE 语句与开始的 SCOPE 语句不匹配。 |
| 1374617 | 修复:实施 SQL Server 2008 故障转移群集安装时,共享组件安装在错误的位置 |
| 1610447 | 未初始化的对象在执行带有条件计算的 DAX 表达式时会导致崩溃,甚至可能导致错误结果。 |
| 1610492 | 使用 PowerPivot v2 11.0.3000.0 时,简单的 DAX 查询返回意外结果。 |
| 2060218 | 当使用无效的 InstanceId 分析 SSRS 配置文件时,出现“ACTIONABLE_HEAP_CORRUPTION”。 |
| 2065570 | 环缓冲区中的 NonYieldProcessTable 记录没有用户和内核进程RING_BUFFER_NONYIELD_PROCESSTABLE时间。 |
| 2075161 | 在 SSRS 2012 的日志中提供平台信息 |
| 1347204 | 修复:将数据插入到具有序列默认值的表中时,会发生 SQL Server 2012 中的跨数据库事务的访问冲突 |
| 1184332 | 如果对模型数据库执行尾部日志备份,模型数据库将在服务器重启期间冻结在还原状态,这将阻止 SQL Server 成功启动。 这是因为在服务器启动期间无法创建 Tempdb 数据库,并收到以下错误消息:“无法打开数据库 '<DatabaseName>'” |
| 1243853 | 还原批量记录数据库的日志备份时会出现错误 3456,其中添加了初始大小大于 64704KB 的新数据文件。 |
| 1404999 | 在具有 LOCK_TIMEOUT 设置的会话中删除数据库快照时,可能会发生超时错误,然后是断言错误。 |
| 1190211 | 使用 InstallShield 安装 SQL Server 最终处于挂起状态。 有关更多信息,请转到 此知识库文章。 |
| 1386073 | 安装 SQL Server 2012 SP2 后,当 SQL Server 从配置管理器或服务控制管理器停止时,会在发出关机后立即向 SQL Server 记录一条信息消息。 在早期版本中,我们是在内部服务(如 .NET Framework、Service Broker)停止后发出此消息。 |
针对社区提交的连接项目的修复
| 连接 Bug ID | 说明 |
|---|---|
| 714689 | 当您针对多个服务器实施企业管理框架,并且针对列表中的一个服务器发生错误时,评估结果会多次写入输出 xml 文件。 |
| 735543 | 当数据库的备份在同一实例上还原为不同的数据库时,数据库将进入还原模式。 |
| 736509 | 无法调试调用 SSMS) 中sp_executesql SQL Server Management Studio (存储过程。 按 F11 时,会收到“对象引用未设置为对象实例”错误消息。 |
| 740181 | SSMS 不能完全管理 SQL Server Express 中的 Full-Text。 |
| 745566 | SQL Server SMO 忽略 SQL Server 2012 和 SQL Server 2014 中的默认约束。 |
| 764197 | SSMS 处理编号存储过程不一致。 |
| 769121 | “列'<列名称>'不属于表摘要。 复制具有相同名称但位于不同架构中的表时,出现 (System.Data) “错误消息。 |
| 773710 | 还原到包含全文索引的数据库快照后,除非重新启动SQL Server、分离然后附加数据库,或者使数据库脱机后再使数据库联机,否则无法创建任何ft_catalogs。 |
| 774317 | SSMS 偶尔会在关闭时崩溃,从而导致其自动重启 |
| 785064 | 在 Business Intelligence Development Studio (BIDS) 中使用客户管道组件时出现“'null' 的值对'stream' 无效”错误消息。 |
| 785151 | 在启用“显示实际查询计划”执行查询时,将返回 Null 的结果,并收到以下错误消息: 错误:消息 50000,级别 16,状态 10,过程测试,第 34 行字符串或二进制数据将被截断。 |
| 791929 | 将数据插入到具有触发器的分区视图时出现“系统断言检查失败”错误消息。 |
| 797967 | 创建脚本在 SSMS 中编写列级权限脚本时会复制语句。 |
| 799430 | 尝试刷新任务栏上的 SSMS 窗口图标时,SSMS 可能会崩溃。 |
| 804901 | 在部署到 SSIS 目录数据库 (SSISDB) 期间,部署新版本的大型项目会遇到超时。 此外,你还会收到以下错误消息: 无法部署项目。 有关详细信息,请查询operation_messages视图以获取操作标识符“219”。 (Microsoft SQL Server,错误:27203) 无法部署项目。 修复问题,稍后重试。:Timeout expired. 操作完成前超时时间已过,或服务器没有响应。 该声明已终止。 |
| 805659 | “SQL 语句的某些部分嵌套得太深。 解析或执行存储过程时出现重写查询或将其拆分为更小的查询“错误消息。 |
SQL Server 2012 SP2 的亮点
以下是 SQL Server 2012 Service Pack 2 ((又称 SP2) )中的一些更改的要点:
AlwaysOn
可支持性:
- 消息 35285 按预期显示为信息性消息,而不是错误。
功能:
- 备份COPY_ONLY SQL 编写器支持: Data Protection Manager (DPM) 具有 AlwaysOn 辅助数据库的服务器上的完整备份将转换为 COPY_ONLY 备份。
Analysis Services (又称 SSAS)
添加对本地多维数据集创建方案的支持:
- 使用 SQL Server 2012 Analysis Services (SSAS 2012) SP2 时,可以创建一个连接到在关闭 SQL 浏览器的静态非默认端口上运行的 SSAS 的本地多维数据集。 此新功能由 msmdsrv.ini 中的新配置设置控制:“ConfigurationSettings\LocalCubeServerPortInConnectionString”。要启用此功能,请将值设置为 1。 如果将 SSAS 2012 配置为故障转移群集或在默认端口上运行,则此设置将无效。
添加更多日志记录:
- 此 Service Pack 向 SSAS 日志文件添加了更多信息,以帮助改进故障排除。 其中包括 SSAS 版本、计算机名称、netbios 名称、CPU 数、RAM 大小、IP、端口、协议类型、死锁、锁定超时以及一些其他信息。
Integration Services (又称 SSIS)
SSISDB 死锁和清理性能改进
简介
SSISDB 数据库中同时调用存储过程时出现死锁SSISDB.catalog.create_execution
- 已修复 SSISDB 并发和死锁问题。 但是,这并不能解决所有问题。 当前的解决方法是将作业错开几秒钟。 但不得使用此解决方法。
- 在 SSISDB 维护作业上性能较低
修补程序可用于 SSISDB 维护作业。
体系结构
以前的模型:
- 每个事务都会创建一个证书和对称密钥,这些证书和对称密钥也必须在维护或清理任务中进行存储和处理。
新模型:
- 在目录属性表SERVER_OPERATION_ENCRYPTION_LEVEL中引入新行,默认值为 PER_EXECUTION 为了保持向后兼容性,可以将值更改为PER_PROJECT为每个项目创建一个密钥或证书对。 从 PER_EXECUTION 更改为 PER_PROJECT 之前,需要进行全面清理。 为全面清理引入了两个新的存储过程。
更改摘要:
在 SSISDB 属性表中引入新行 SERVER_OPERATION_ENCRYPTION_LEVEL:
- 只有两个值有效 (1 和 2) 。
- Value“1”:默认值。 根据执行级别使用对称密钥和证书进行加密。 安全性高,但可能存在性能或死锁问题。
- 值“2”:根据项目级别使用对称密钥和证书进行加密。 安全性降低,解决性能或死锁问题。
引入两个新的存储过程 (SP) Cleanup_server_logs 和 cleanup_server_execution_keys
SP 设计用于将加密级别从“1”更改为“2”。可以先运行Cleanup_server_logs可以很快完成以使 SSISDB 处于良好状态。 SSISDB 数据库已准备好更改为加密级别。
Cleanup_server_keys所需的时间比Cleanup_server_logs长。 但是,它在加密级别更改为“2”后运行,并在非高峰时间定期运行。
Cleanup_server_logs:仅清理所有操作日志。
Cleanup_server_execution_keys:清理用于保护敏感执行参数的对称密钥和证书。
@cleanup\_flag (1、2) ) 中的 int (
- cleanup_flag = 1:删除执行级别 对称密钥和证书
- cleanup_flag = 2:删除项目级别对称密钥和证书 (仅在删除此特定项目且与此项目相关的所有操作日志已清理) 时才会删除它们。
@delete\_batch\_size int = 1000
- 密钥或证书的数量 此存储过程的一次调用中将丢弃。
在 internal.cleanup_server_retention_window 中,将delete_batch_size从 10 更改为 1000。
关系引擎
可选支持表变量行计数以改进查询计划:
如果将表变量与 SQL Server 中的其他表联接,则可能会由于查询计划选择效率低下而导致性能下降,因为 SQL Server 在编译查询计划时不支持统计信息或跟踪表变量中的行数。
在 SQL Server 2012 SP2 中,引入了一个新的跟踪标志,允许查询优化器使用有关插入表变量的行数的信息,以便选择更有效的查询计划。 启用跟踪标志 2453 以激活此行为。
注意:
- 在某些情况下,启用跟踪标志 2453 可能会导致性能下降,因为需要进行额外的编译来考虑执行期间插入表变量的实际行数。 通常,如果表变量具有大量与其他表联接的行,或者有多个行并在嵌套循环联接运算符的外侧使用,并且在内部处理大量行的计划,则会从此跟踪标志中受益。
- 通过使用 OPTION (RECOMPILE) 查询提示,可以在其他版本的 SQL Server 上实现类似的行为。 但是,查询提示需要检测和修改由于表变量驱动的大量工作而导致计划选择不佳的所有查询,同时启用跟踪标志 2453 可能会影响现有工作负载。
改进了并行查询执行计划的性能故障排除
- DMV sys.dm_exec_requests 现在可返回并行查询执行计划的准确cpu_time值。 统计信息 IO 诊断现在报告并行查询执行计划的准确逻辑读取。
改进了哈希溢出诊断
- 如果哈希联接或哈希聚合运算符在查询执行期间将数据溢出到 tempdb 数据库,则现在会为统计信息 IO 诊断报告相应的 I/O。
改进了全文索引诊断
- 在某些情况下,可能很难理解如何返回某些全文查询的结果。 全文搜索子系统与外部断字符和停止列表交互,由于这种交互,文档中关键字的位置信息可能与实际文本中观察到的信息不同。 这在进行 “短语” 或 “NEAR” 搜索时高度相关,因为单词之间的增量在内部计算中使用来查找匹配的文档。
- 在 SQL Server 2012 SP2 中,添加了一个新的动态管理功能 (DMF) ,以提供对文档中索引的关键字定位信息的访问。 新的 DMF 与现有的 DMF sys.dm_fts_index_keywords_by_document类似,并具有以下语法:sys。 dm_fts_index_keywords_position_by_document
(
DB_ID (“database_name”) ,OBJECT_ID (“table_name”)
) - 它不是出现次数,而是返回有关每次出现及其在索引文档中的位置的信息。
- 此信息可用于查看文本和内部索引之间的映射,这将显示搜索短语的增量差异(如果有)。 这有助于理解短语搜索的结果。
复制
可支持性
事务复制:
详细消息添加到历史记录表的统计信息以及代理日志中的更详细消息:
- 向统计信息> xml 输出添加了<文本消息,以在 logreader 和分发器代理中定义不同的状态。
- 为分发服务器和日志读取器参数化命令添加了文章级别统计信息。
- 在分销商代理中向输出文件添加了跳过的命令数。
- 增加了在分销商代理中更改架构所花费的时间。
LogReader:捕获用户转储时,日志记录将添加到 .TXT 文件中。
对等:更新了插入、更新和删除过程,以向冲突消息提供以下详细信息:
- Table Name
- 主键列名和值
- 当前版本
- 预版本
- 后版本
合并复制:
- 当合并代理的输出详细级别设置为 4 时添加在日志文件中的跟踪标志 101 的输出。
功能性
事务复制:
- 对等复制现支持使用 Update 或 对文本列进行部分更新。编写语义。
合并复制:
- 清理存储过程已重新设计,以避免冗余数据上传。
Reporting Services (又称 SSRS)
包含处理错误和警告的日志记录消息,以防止对 CSS、大型 HTML 报表的常见调用。
概述:
- 检测报表设计以确定报表设计是否会成为一个大型 HTML 报表,并可能导致性能问题。 这应该可以通过检查交互式页面高度和宽度设置轻松检测到。
用户方案:
在 Report Builder 中创建报表。 在 InteractiveSize 属性中输入值“0”。 你将收到一个弹出窗口,其中包含有关潜在性能影响的以下消息警告:
注意
将交互式纵横比设置为 0 垫子会对性能产生影响。
存储引擎
性能增强
Service Pack 2 中的多项性能增强功能,如以下文章所述:
- 当 SQL Server 2012 中的数据库锁定活动增加时出现性能问题
- 在 SQL Server 2012 中的外来页处理期间,NUMA 环境中会出现性能问题
- Performance decreases after an ALTER INDEX…ONLINE 操作在 SQL Server 2012 中中止
DMV 增强功能
- sys.dm_db_session_space_usage反映每个会话的用户对象在 tempdb 数据库中占用的空间量。 当删除的行数超过 1024 页时,将延迟对这些页的取消分配。 在 SQL Server 2012 Service Pack 2 中,DMV 还将延迟分配单位的空间使用情况纳入名为 user_objects_deferred_dealloc_page_count 的新列中。
- 如果 SQL Server 安装在故障转移群集上,sys.dm_server_services现在将在cluster_nodename列中正确指定节点名称。
环形缓冲区增强功能
应用程序域RING_BUFFER_CLRAPPDOMAIN的环缓冲区在 DoomReason> 字段中<包含应用程序域被卸载的原因:
- 1 = 由 DDL 操作(例如丢弃程序集)卸载。
- 2 = 由安全相关操作(例如更改权限)卸载。
- 3 = 由于内存压力处理而未加载。
- 4 = 由于初始化失败而未加载。
相应的扩展事件app_domain_ring_buffer_recorded在事件数据字段中包含卸载doom_reason原因。
在资源监视器监视的状态中检测到变化时,RING_BUFFER_RESOURCE_MONITOR 有条目。 此外,对于系统和进程资源通知,池通知也可在 IndicatorsPool/IndicatorsPool><> 节点中使用<。
Resource_monitor_ring_buffer_recorded扩展事件在 pool_indicators 数据字段中包括池范围的通知。
RING_BUFFER_NONYIELD_PROCESSTABLE包括进程名称以及记录环缓冲区条目时系统中运行的最多 8192 个线程的其他信息。
备份和还原增强功能
从 Service Pack 2 开始,不再允许使用 norecovery 选项备份模型的尾部日志。
错误日志中的备份和还原完成消息包括持续时间和吞吐量信息:
- 备份数据库在 0.026 秒内成功处理了 298 页 (89.261 MB/秒) 。
- RESTORE DATABASE 在 0.016 秒内成功处理了 298 页 (145.050 MB/秒) 。
扩展事件
在 SQL Server 2012 Service Pack 2 中添加或修改了以下扩展事件:
内存分配:
- 扩展事件page_allocated和page_freed可用于查看 SQL Server 内存的顶级使用者。 从 Service Pack 2 开始,这些扩展事件还报告在查询执行期间分配和释放的保留内存。
鬼清理:
当表或索引中的记录被删除时,这种删除操作绝不会从页面中物理删除记录,它只会将它们标记为已删除或重影。 这是一种性能优化,允许更快地完成删除操作。 然后,一个称为“幽灵清理任务”的后台任务会物理删除所有已删除的记录。 Service Pack 2 中添加了多个扩展事件,以提供对此任务各个阶段的见解:
- ghost_cleanup_task_start
- ghost_cleanup_task_suspend
- ghost_cleanup_task_packet_enqueue
- ghost_cleanup_task_process_packet
- ghost_cleanup_task_process_pages_for_db_packet
参考资料
有关如何确定当前 SQL Server 版本的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
321185 如何确定 SQL Server 及其组件的版本和版本