因此,一个很大的问题刚刚出现了我们正在使用的一些数据库。出于某种原因,人们的数据库已经发展到一个荒谬的文件大小,没有任何数据表的变化。虽然我不知道是什么原因突然造成这种情况,但我现在更关心清除其使用的磁盘空间。我运行了sp_spaceused,并且追踪了2个表中的1个(这取决于数据库)的罪魁祸首。对于每个数据库,其中一个表分配超过半个GB到预留空间,而数据只有50 MB。它显示index_size在〜113 MB。该表没有聚簇索引,并且具有大约15列,除了长度为255的nvarchar类型的2列(表中通常为null或空)外,所有长度都相对较小。SQL Server 2000,表分配太多空间
我试过运行DBCC shrinkdatabase和截断表,但它没有做任何事情。我已经研究了这一点,其他一些人也遇到了这个问题,但是如果shrinkdatabase没有解决这个问题,那么他们也找不到解决方案。
让我知道是否还有其他人需要了解表或数据库设置。我不知道还有什么可以尝试的,这对我们来说是一个重大问题,因为人们的数据库突然占据了他们以前的空间的10倍。
编辑: 试图运行DBCC DBREINDEX并试图更改为通过Enterprise Manager聚簇索引后,我得到一个错误消息说:
无法为数据库“DB”分配新页。文件组PRIMARY中不再有可用的页面。可以通过删除对象,添加其他文件或允许文件增长来创建空间。
我试过从这个表中删除行,它对表的大小没有影响。正如预期的那样,日志文件增加,但这是对表格大小的唯一改变。
我将如何去重建表或更改为聚集索引?在这个过程中丢失数据是否有风险? – gdawgrancid
正如我所说的,您需要共享关于您的表和现有索引的更多细节,以便获得准确的语法,以及有关列,查询以及如何添加数据的详细信息,如果您希望在上下文中指导您应该放置集群的位置指数。为了将聚集索引添加到堆中,语法就是'CREATE [UNIQUE] CLUSTERED INDEX x ON dbo.y(z);'但是您可能希望主键被聚集,所以语法将会是不同。没有数据丢失的风险,但通常没有任何明确的风险。备份在修改数据库时始终是您最好的朋友。 –
经过一番修改并且必须更改数据库的最大文件大小后,我才能够获得表上的聚集索引,然后DBCC dbshrink在运行几次后就能够缩小大小。我仍然对这件事情有些问题,但我开始认为它与SQL Server 2000的限制或错误有关 – gdawgrancid