我希望这不是偏离主题的,但我有一个真正的问题,我会使用一些建议。
我有一个应用程序在启动时升级自己的Sql Server数据库(从以前的版本)。通常这很好用,但新版本必须改变几个nvarchar列宽。
在表格中包含大量数据的实时数据库中,这需要很长时间。似乎有两个问题 - 一个是Sql Server似乎正在处理数据(可能会重写它),即使实际上没有被更改,另一个是事务日志吞噬了大量的空间。
有没有办法绕过这个问题?它只是一个简单的Alter Table ... Alter Column命令,将nvarchar(x)改为nvarchar(x + n),没有任何花哨,但它引起了一个'问题',并且在该领域非常不满意。如果有一种方法可以在不处理现有数据的情况下更改列宽,并以某种方式抑制事务日志,那么这将非常方便。
这似乎不是Oracle数据库的问题。
示例命令:
IF EXISTS (SELECT 1 FROM information_schema.COLUMNS WHERE table_name='ResourceBookings' AND column_name = ('ResourceBookerKey1') AND character_maximum_length <= 50)
ALTER TABLE [ResourceBookings] ALTER COLUMN [ResourceBookerKey1] NVARCHAR(80) NULL
如您所见,只有在需要增加列宽时才会更改表格
TIA
答案 0 :(得分:1)
在升级之前,请确保将SQL Server数据库的恢复模型设置为“简单”。转到SSMS,右键单击数据库,选择属性,然后单击“选项”页面。记录“恢复模式”值。将恢复模型设置为“简单”,如果它还没有(我假设它已设置为FULL)。
然后运行升级。升级后,您可以将值恢复到原来的状态。
或者,您可以使用以下内容编写脚本:
升级前:
ALTER DATABASE MyDatabase SET RECOVERY SIMPLE;
升级后:
ALTER DATABASE MyDatabase SET RECOVERY FULL;