我正在尝试删除 150 GB 表(46 亿条记录)的 varchar(100) 列。此列中的所有数据均为空。我在数据库中有 30GB 以上的空间。
当我尝试删除该列时,它显示“数据库 XY 中没有更多空间”。为什么这样的动作需要这么大的空间?
ALTER TABLE 语句在覆盖原始表之前需要临时存储更改的版本。我猜您要更改的表至少占总存储大小的 1/3
这可能由于多种原因而发生。您的数据库中的一个 AMP 可能已满,即使对表进行较小的更改也会导致该错误。
尝试运行以下 SQL 检查空间
select VProc, CurrentPerm, MaxPerm
from dbc.DiskSpace
where DatabaseName='XY';
此外,您应该检查一下您的主索引在这个非常大的表中位于哪一列。如果表未正确倾斜,则在尝试更改表或对其运行查询时也可能遇到空间问题。
对于其他建议,我找到了一篇不错的文章,关于当“数据库中没有更多空间”错误发生时您可能想要调查的事情 - Teradata SQL 教程。一些建议包括: