我们有一个SQL Server 2008数据库,其中包含超过14亿条记录的表。由于坐标系调整,我们必须将坐标列的数据类型从decimal(18, 2)
扩展到decimal(18, 3)
。更改SQL Server中列的数据类型
我们已经尝试了多件事情,但在执行约14小时后,所有事情都会导致异常(事务日志已满)。
这是我们尝试的事情:
ALTER TABLE
ALTER TABLE Adress ALTER COLUMN Coordinate decimal(18, 3) NULL
设计师
- 取消选中
Tools > Options > Designer > Prevent saving changes that require table re-creation
列
- 打开的设计
- 更改数据类型为
decimal(18, 3)
Right-click > Generate Change Script...
- 取消选中
这是什么脚本,是创建一个新表的新数据类型,旧的数据复制到新表,删除旧表并重命名新表。
不幸的是,两次尝试都会在执行14小时后导致事务日志完全异常。
我认为,通过ALTER TABLE... ALTER COLUMN...
改变数据类型只是改变元数据,应该在(毫秒)秒内完成?
- 你知道我可以尝试的其他方法吗?
- 为什么我的尝试(特别是#1)需要那么多时间?
在此先感谢
** **的一些变化到表可以执行,因为元数据只是变化。绝不是*全部*变化,并且您正在执行的操作确实需要更新每一行。所以,我想你需要更多的日志空间。 –
尝试''选择CONVERT(二进制(8),CONVERT(十进制(18,3),1.5)),CONVERT(二进制(8),CONVERT(十进制(18,2),1.5))'',你会看到*代表*是完全不同的。 –
A.表使用的空间有多大(磁盘使用情况报告)? B.您的实验有多少磁盘空间?如果B> A,那么可以考虑从头开始创建新表并将数据分发给它(这可以分批完成,从而最大限度地减少事务日志的使用)。作为副作用的好处,您将获得更紧凑和更少碎片化的数据组织。如果还未使用,还应该使用压缩 – Jan