Microsoft 将 Microsoft SQL Server 2008 Service Pack 3 (SP3)或 Microsoft SQL Server 2008 R2 修补程序分发为一个可下载文件。 由于修补程序是累积的,因此每个新版本都包含以前的 SQL Server 2008 SP3 或 SQL Server 2008 R2 更新版本附带的所有修补程序和所有安全更新。
症状
请考虑以下情况:
-
在 SQL Server 2008 或 SQL Server 2008 R2 中创建表的分区。
-
不要对所有分区启用压缩。
-
尝试将记录插入新的空分区中。
在这种情况下,会发生访问冲突并在 SQL Server 错误日志中记录以下错误:
<Date> <Time> spid## ***Stack Dump being sent to C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\LOG\SQLDump0001.txt<Date> <Time> spid## SqlDumpExceptionHandler: Process 66 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process.<Date> <Time> spid## * BEGIN STACK DUMP:<Date> <Time> spid## * Exception Address = 0000000000C37D22 Module(sqlservr+0000000000137D22)<Date> <Time> spid## * Exception Code = c0000005 EXCEPTION_ACCESS_VIOLATION<Date> <Time> spid## * Access Violation occurred reading address 0000000000000020
注意 此问题也会在 Microsoft SQL Server 2008 R2 中发生。
解决方案
累积更新信息
SQL Server 2008 Service Pack 2
此问题的修补程序首次发布于 SQL Server 2008 Service Pack 2 的累积更新8中。有关此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2648096 SQL Server 2008 的累积更新程序包 8 Service Pack 2注意 由于这些版本是累积的,因此每个新的修复版本都包含以前的 SQL Server 2008 修复版本附带的所有修补程序和所有安全修补程序。 Microsoft 建议你考虑应用包含此修补程序的最新修复版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2402659 发布 SQL Server 2008 Service Pack 2 后发布的 SQL Server 2008 版本 为特定 SQL Server service pack 创建 Microsoft SQL Server 2008 修补程序。 必须将 SQL Server 2008 Service Pack 2 修补程序应用到 SQL Server 2008 Service Pack 2 的安装。 默认情况下,SQL Server service pack 中提供的任何修补程序都包含在下一个 SQL Server service pack 中。
SQL Server 2008 R2
此问题的修补程序首次在累积更新11中发布。有关如何为 SQL Server 2008 R2 获取此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2633145 SQL Server 2008 R2 的累积更新包11 注意 由于这些版本是累积的,因此每个新的修复版本都包含了以前的 SQL Server 2008 R2 修补程序版本附带的所有修补程序和所有安全修补程序。 我们建议你考虑应用包含此修补程序的最新修复版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
981356 发布 SQL Server 2008 R2 后发布的 SQL Server 2008 R2 版本
SQL Server 2008 R2 Service Pack 1
此问题的修补程序首次在 SQL Server 2008 R2 Service Pack 1 的累积更新4中发布。有关如何获取此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2633146 SQL Server 2008 R2 Service Pack 1 的累积更新程序包4注意 由于这些版本是累积的,因此每个新的修复版本都包含了以前的 SQL Server 2008 R2 修补程序版本附带的所有修补程序和所有安全修补程序。 我们建议你考虑应用包含此修补程序的最新修复版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2567616 在发布 SQL Server 2008 R2 Service Pack 1 之后发布的 SQL Server 2008 R2 版本
SQL Server 2008 Service Pack 3
此问题的修补程序首次发布于 SQL Server 2008 Service Pack 3 累积更新包2。有关如何获取此累积更新包的 SQL Server 2008 Service Pack 3 的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2633143 SQL Server 2008 的累积更新包 2 Service Pack 3注意 由于这些版本是累积的,因此每个新的更新版本都包含以前的 SQL Server 2008 Service Pack 3 更新版本附带的所有修补程序和所有安全更新。 我们建议你考虑应用包含此修补程序的最新更新版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2629969 发布 SQL server 2008 Service Pack 3 后发布的 SQL Server 2008 版本
更多信息
若要确认你是否遇到了此知识库文章中所述的问题,请按照以下步骤操作:
-
打开到 SQL Server 的 DAC 连接,然后运行以下查询:
Use <your_db_name>select * from sys.sysrscols rsc where rsc.rsid in ( select sau.container_idfrom sys.system_internals_allocation_units sau join sys.partitions pt on sau.container_id = pt.partition_idand pt.object_id = object_id(<YourPartitionedTable>) and pt.index_id = 1)
注意 在此查询中,<YourPartitionedTable> 是分区表名称的占位符。
-
在查询的输出中,检查 rscolid 列是否包含较大的值。 下面是这样一个较大值的示例:
rsid
rscolid
hbcolid
rcmodified
ti
cid
ordkey m
72057594380091392
0
1
614911578
56
0
第
72057594380091392
11
13
614911578
12967
53265
0
72057594380091392
至
14
614911578
32999
53265
0
72057594380091392
13
岁
614911578
32999
53265
0
72057594380091392
14
utf-16
614911578
59
0
0
72057594380091392
岁
日
614911578
59
0
0
72057594380091392
日
18
614911578
1834
0
0
72057594380091392
67108865
19
614911578
19627
53625
0
72057594380091392
22
23
614911578
56
0
0
72057594380091392
23
全
614911578
10407
53625
0
72057594380091392
全
二十五
614911578
662636
0
0
在此示例中,67108865的值比其他人大得多。 这表示你遇到了本知识库文章中所述的问题。
若要解决此问题,请重新生成受影响的分区。 请与 Microsoft 支持人员联系,了解涉及哪些分区。 或者,你可以使用以下查询重新生成所有分区:
ALTER INDEX <your_table_index>ON <your_table_name>REBUILD Partition = allGO
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。