2

我希望这不是题外话,但我有一个真正的问题,我可以使用一些建议。

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

4

1 回答 1

1

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

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

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

升级前:

ALTER DATABASE MyDatabase SET RECOVERY SIMPLE;

升级后:

ALTER DATABASE MyDatabase SET RECOVERY FULL;
于 2014-07-25T22:01:21.363 回答