1

我正在研究一个大约 6Gb 的数据库。我需要将所有非 unicode 列转换为 unicode,例如将所有 varchar 更改为 nvarchar。

我已经使用 ALTER 语句编写了这个脚本,ALTER TABLE mytable ALTER COLUMN mycolumn nvarchar(...)但我发现数据库大小在之后大幅增加。.mdf 文件增长到超过 70Gb,这让我感到惊讶。我知道 unicode 占用的空间是 varchar 的 x2 倍,但即使数据库全是 varchar 并且已转换,我希望它的最大大小为 12Gb。

我试图缩小数据库和文件以查看它是否是未分配的空间,但这几乎没有效果,并sp_spaceused表明没有过多的未分配空间。

有谁知道为什么数据库会变得如此之大?我很想知道是什么原因造成的。

我已经设法通过创建一个从旧数据库编写脚本的新数据库并导入所有数据来将列数据类型更改为 unicode,结果只是增加了 1Gb 的大小,所以我想了解为什么更改列数据类型会导致这样的增长。

4

2 回答 2

5

您是否检查过它是否在日志文件中增加了大小?如果这是问题所在,请通过备份您的数据库来截断它。这是最有可能的问题。

于 2012-03-30T09:43:23.167 回答
1

好吧,这样的增加肯定会产生很大的开销。SQL 可能会在内部对列进行复制以增加它。但是70gb确实太大了

另外,您是在谈论 70 GB 的已分配数据大小还是实际数据大小?因为有区别。检查数据库文件的自动增长属性,如果它设置为几 GB 或一个很大的百分比,这将解释

于 2012-03-30T09:54:46.627 回答