更改表以更改导致非常大的数据库文件的数据类型

时间:2012-03-30 09:31:44

标签: sql-server database data-conversion

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

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

我试图缩小数据库和文件以查看它是否是未分配的空间,但这没有什么影响,sp_spaceused表示没有过多的未分配空间。

有谁知道为什么数据库会变得如此之大?我非常希望了解会导致这种情况的原因。

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

好吧,这样的增加会产生很大的开销。 SQL可能在内部执行列的副本以增加它。但70gb确实太大了

另外,您是在谈论70 gb的分配数据还是实际数据? 因为有区别检查数据库文件的自动增长属性,如果设置为几GB或非常大的百分比,则可以解释