Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Alter table更改导致数据库文件非常大的数据类型_Sql Server_Database_Data Conversion - Fatal编程技术网

Sql server Alter table更改导致数据库文件非常大的数据类型

Sql server Alter table更改导致数据库文件非常大的数据类型,sql-server,database,data-conversion,Sql Server,Database,Data Conversion,我正在开发一个大约6Gb的数据库。我需要将所有非unicode列转换为unicode,例如将所有varchar更改为nvarchar 我使用ALTER语句编写了这个脚本,比如ALTERTABLE mytable ALTER COLUMN mycolumn nvarchar(…),但我发现之后数据库的大小大幅增加。.mdf文件增长到超过70Gb,这让我很惊讶。我知道unicode占用的空间是varchar的x2倍,但即使数据库都是varchar并进行了转换,我也希望它的最大大小是12Gb 我试图缩

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

我使用ALTER语句编写了这个脚本,比如
ALTERTABLE mytable ALTER COLUMN mycolumn nvarchar(…)
,但我发现之后数据库的大小大幅增加。.mdf文件增长到超过70Gb,这让我很惊讶。我知道unicode占用的空间是varchar的x2倍,但即使数据库都是varchar并进行了转换,我也希望它的最大大小是12Gb

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

有人知道为什么数据库会变得这么大吗?我很想知道是什么导致了这一切


通过从旧数据库创建一个新数据库并导入所有数据,我成功地将列数据类型更改为unicode,结果只增加了1Gb的大小,因此我想了解为什么更改列数据类型会导致这样的增长。

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

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

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

另外,您所说的是70 gb的分配数据大小还是实际数据大小?
因为有区别。检查数据库文件的auto growth属性,如果它设置为几GB或非常大的百分比,这将解释

嗯,这样的增加会产生很大的开销。SQL可能正在内部复制列以增加它。但70gb确实太大了

另外,您所说的是70 gb的分配数据大小还是实际数据大小?
因为有区别。检查数据库文件的“自动增长”属性,如果它设置为几GB或非常大的百分比,这将解释

感谢您的回复,不幸的是,不是.mdf文件而不是.ldf文件在变大。检查表是否具有填充因子较低的聚集索引。尝试在一些较大的数据库中创建DBCC DBREINDEX,并查看结果。如果您的nvarchar非常大,并且填充因子很低,那么您可以为表保留大量的空闲空间。这只适用于clusterd索引。你是对的。。。是日志文件!我在恢复数据库时出错,将日志文件放在数据文件应该所在的目录中,并将数据文件放在日志目录中。这就解释了,我混淆了这两个文件。非常感谢您的帮助。感谢您的回复。很遗憾,没有。是.mdf文件而不是.ldf文件变大了。请检查表是否具有填充因子较低的聚集索引。尝试在一些较大的数据库中创建DBCC DBREINDEX,并查看结果。如果您的nvarchar非常大,并且填充因子很低,那么您可以为表保留大量的空闲空间。这只适用于clusterd索引。你是对的。。。是日志文件!我在恢复数据库时出错,将日志文件放在数据文件应该所在的目录中,并将数据文件放在日志目录中。这就解释了,我混淆了这两个文件。非常感谢你的帮助,谢谢迭戈。我检查了一下,但是自动增长是10MB,但是我在数据和日志文件上犯了一个错误,正是这种混乱让我相信是数据文件在增长,而不是日志文件。谢谢迭戈。我检查了一下,但是自动增长是10MB,但是我在数据和日志文件上犯了一个错误,正是这种混乱让我相信是数据文件在增长,而不是日志文件。