我的数据仓库中有一个非常大的数据库,我们在其中实施了分区来管理维护和备份。某个时间的记录最终会每月迁移一次到只读文件组。
有时,我们的 ETL 过程会尝试更新已迁移到存档的旧记录,但我们预计这些会失败。但是,我至少有两个最近的示例,其中测试中的记录即使在我们的测试环境(查询sys.partition_functions和sys.partition_range_values)中似乎位于只读文件组的分区中也会更新。
生产中的相同记录在尝试更新记录时会导致预期的失败。到目前为止,我们已经两次发现更新在生产中失败但在测试中成功(从来没有相反)。
相关环境事实:
更新 2016-08-19
以某种方式在一夜之间更新了新记录。确认它在只读文件组中。发现我可以更新同时插入的记录(即也在只读文件组的同一分区上)。我在同一分区上识别了一条记录,并且能够多次更新该记录。尝试更新夜间更新的记录会导致预期的失败。
更新 2016-08-11
在只读分区上的测试中的夜间处理期间继续发生更新。尝试从进程更新相同的记录失败。在以之前更新记录的用户身份登录时尝试更新相同的记录失败。我也无法通过更新夜间流程尚未触及的类似记录来复制该问题。
更新 2016-08-04
今天发现它不仅限于单个表,因为我发现在使用相同分区方案的不同表上又发生了相同的行为。
更新 2016-08-03
运行该脚本这个MSDN脚本证实了我使用肯德拉小的分区助手的意见时得到ph.FilegroupDetail和ph.ObjectDetail从该演示。有问题的记录位于分区 #2(有问题的记录的分区列值为 2015-03-18)
Filegroup Low Boundary UpperBoundary
Archive (RO) NULL 1900-01-01
Archive (RO) 1900-01-01 2015-04-01
ActiveFG (RW) 2015-04-01 2015-07-01
ActiveFG (RW) 2015-07-01 2015-10-01
ActiveFG (RW) 2015-10-01 2015-01-01
ActiveFG (RW) 2016-01-01 2016-04-01
ActiveFG (RW) 2016-04-01 2016-07-01
ActiveFG (RW) 2016-07-01 2016-10-01
ActiveFG (RW) 2016-10-01 2017-01-01 …Run Code Online (Sandbox Code Playgroud)