Sql server 2005 SQL表分区错误-无法向现有分区表添加新分区

Sql server 2005 SQL表分区错误-无法向现有分区表添加新分区,sql-server-2005,database-design,Sql Server 2005,Database Design,我继承了一个SQL Server,并发现了一个表分区问题。由于不确定的原因,我无法向现有表分区添加新分区 环境: SQL Server 2005企业版, 数据库大小约为400GB, 4GB内存, 仅限32位系统 分区表详细信息: *表跨多个磁盘卷上的13个文件组进行分区 *配分函数的左范围是12个边界点,这些边界点是日期时间值 *边界点按日期季度结构(例如:2009-12-31 23:59:592010-03-31 23:59:592010-06-30 23:59:59) *datetime值是

我继承了一个SQL Server,并发现了一个表分区问题。由于不确定的原因,我无法向现有表分区添加新分区

环境:

SQL Server 2005企业版, 数据库大小约为400GB, 4GB内存, 仅限32位系统

分区表详细信息:

*表跨多个磁盘卷上的13个文件组进行分区

*配分函数的左范围是12个边界点,这些边界点是日期时间值

*边界点按日期季度结构(例如:2009-12-31 23:59:592010-03-31 23:59:592010-06-30 23:59:59)

*datetime值是分区键

*数据根据当前日期每天插入到表中,但是只有最后一个文件组接收数据,因为函数上的最后一个边界点是“2010-06-30 23:59:59”

*表有一个与表对齐的聚集索引,以及3个非唯一的非聚集索引(2个对齐,1个位于不同的文件组上)

*当前表格卷详细信息:

数据空间:75GB+

索引空间:50GB+

行数:2亿+

问题:

当前,最后一个文件组/分区没有最大日期边界点,因此日期“2010-06-30 23:59:59”之后的所有数据都已/仍将插入此分区。幸运的是,事务数据量相当小,但是在两年的时间里,最终的分区已经增长到了令人印象深刻的22GB大小。我不希望拆分或删除此现有分区中的数据。但是,我确实希望添加一个新的文件组,并修改现有的分区函数,以便将来所有的数据都插入到新的文件组中。我想添加一个新的未来日期作为边界点,以便在该日期之后插入的所有数据都进入一个新的文件组/分区

使用的方法:

使用ALTER DATABASE函数-SUCCESS添加了一个新的文件组/文件

更改了分区方案,以便为新创建的文件组分配“下一次使用”-成功。 --用于更改分区方案的脚本--

更改分区方案[分区方案名称] 下次使用(新文件组名称)

修改了配分函数以添加新的边界点-FAIL

--用于向函数添加新边界点的脚本--

改变分区函数分区函数名称() 分割范围('2012-10-01 23:59:59) 去

错误:

使用分割范围技术将新边界点添加到现有分区失败,因为数据库事务日志已满(限制为18GB)。这让我大吃一惊,原因有二:1)我认为使用拆分范围只是一个元数据函数(如果我错了,请纠正我);2):我的新边界点在表中还没有作为日期值存在,所以我假设不会有数据移动

到目前为止我所尝试的:

*我使用一个测试服务器成功地测试了这个方法,但数据集要小得多

*然后,我将生产数据库的完整副本恢复到测试系统上。我添加了第二个无限增长的数据库日志文件,并试图再次更改分区函数。原始数据库事务日志按预期填充,但辅助数据库事务日志增加到60GB!此外,tempdb增长到14GB。由于另一个错误,整个进程再次中止时,新文件组的大小开始增加。这次错误是:

(“无法在具有唯一索引“index_name”的对象“table_name”中插入重复的键行”)

现在有两件事让我完全困惑:

1) :测试错误中提到的索引是非聚集、非唯一索引-为什么会出现重复错误

2) :更重要的是,我正在添加一个新的datetime值作为新的最大边界点,而该值在表中尚不存在。为什么会有数据移动


正如我所说的,我已经用一个小得多的数据集测试了这个方法,它工作得非常好。我不明白为什么它不能用于生产数据集。我是不是错过了一些很明显的东西?非常感谢您的建议。谢谢您的时间。

我认为您需要的是对分区表进行分区,我看到您使用的命令是正确的,我认为您最好尝试“创建方案查询”,在“创建方案查询”中添加新边界,并将新文件组添加到“创建与方案相关的函数查询”中因此,它可以完美地工作,通过这样做,前一个文件组中的数据将被分割

因此,您最好尝试查询的源代码“createscheme和createfunction”。)