Sql Server问题

时间:2013-10-25 11:32:06

标签: sql-server-2008

我希望这不是偏离主题的,但我有一个真正的问题,我会使用一些建议。

我有一个应用程序在启动时升级自己的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

1 个答案:

答案 0 :(得分:1)

在升级之前,请确保将SQL Server数据库的恢复模型设置为“简单”。转到SSMS,右键单击数据库,选择属性,然后单击“选项”页面。记录“恢复模式”值。将恢复模型设置为“简单”,如果它还没有(我假设它已设置为FULL)。

然后运行升级。升级后,您可以将值恢复到原来的状态。

或者,您可以使用以下内容编写脚本:

升级前:

ALTER DATABASE MyDatabase SET RECOVERY SIMPLE;

升级后:

ALTER DATABASE MyDatabase SET RECOVERY FULL;