cod*_*000 18 sql-server-2005 sql-server transaction-log
我有一个名为 SQL Server 2005 的表BRITTNEY_SPEARS_MARRIAGES
,它具有以下列:
MarrigeId tinyint,
HusbandName varchar(500),
MarrigeLength int
Run Code Online (Sandbox Code Playgroud)
现在我有另一张桌子 BRITTNEY_SPEARS_MARRIAGE_STORIES
StoryId int,
MarriageId tinyint,
StoryText nvarchar(max)
Run Code Online (Sandbox Code Playgroud)
问题是我们想将MarrigeId
列int
从 a更新为a tinyint
。我们只是觉得布兰妮在一切都说完和做完之前会有很多婚姻。
现在BRITTNEY_SPEARS_MARRIAGE_STORIES
表中有 1800 万行(嘿,这个女孩有一些问题),所以当我们进行更新时,事务日志填满了,我们的 SQL Server 框就死了。
我们怎样才能解决这个问题?
无论如何,是否可以说“嘿 SQL Server,我将更新此列并使其更大。相信我在此 SQL Server 上。请不要在尝试验证所有内容时填写事务日志?”
没有办法告诉 SQL Server 不要使用事务日志。
您可以做的是将数据库的恢复模式设置为 SIMPLE,这将在需要空间时覆盖旧的日志条目。但是,您不应在生产服务器上执行此操作,因为您将无法执行某些类型的还原,例如时间点还原。
或者,您可以将事务日志文件设置得更大——作为一个不科学的经验法则,我会确保 A) 您的事务日志的可用空间至少比您的表的大小多 1.5 倍或 B)您的事务日志可以自动增长到至少有大约这个可用磁盘空间量的驱动器。
您可以通过备份日志来释放事务日志空间。如果您不关心日志内容,请将文件扔掉。一个快捷方式是BACKUP LOG <Your Database Name> TO DISK = 'NUL:'
。同样,不要在生产服务器上执行此操作,除非您绝对确定您了解其含义。
另一件需要注意的事情(尽管它与您的问题并不完全相关)是确保您要扩展的表上定义了聚集索引。如果没有,该表可能会产生大量的堆碎片,并可能在这样的更改中变得不必要的大。