2009-11-06 110 views
0

我正在使用SQL Server 2000,并尝试将字段的数据类型从varchar更改为nvarchar,以便它可以处理国际字符。但是,表中已经有很多数据,并且当我尝试保存更改时,出现以下错误:SQL Server完整日志问题 - 如何更新数据库?

无法修改表。 ODBC错误:[Microsoft] [ODBC SQL Server驱动程序] [SQL Server]数据库'AppTest_Apps'的日志文件已满。备份数据库的事务日志以释放一些日志空间。

这是一次性更新 - 如何解决错误?

回答

0

在第一次看,我看到了两个办法:

  1. 只需备份事务日志。喜欢的东西BACKUP LOG dbanme TO DISK = 'C:\ dblog.bak'
  2. 把你的数据库为简单恢复模式(例如,在企业管理器:数据库 - >选项 - >恢复模式,选择简单)
1

尝试运行提交每n个记录的事务循环。因此,可以将当前表从X重命名为Y.可以使用此命令sp_RENAME'[OldTableName]','[NewTableName]'来执行此操作。

用新的数据类型列集重新创建X,然后从Y批量插入到X提交每个循环。通过插入事务批处理,您可以通过提交插入的每n个记录来控制日志增长。

伪代码

Get @max_id from Y int @max_id 
Get min_id from Y into @current_value 
Loop until @current_value <= @max_id 

BEGIN TRAN 
INSERT INTO Y 
FROM X 
WHERE seq_id >= @current_value and less than @batchsize + @current_value 
COMMIT TRAN 
+0

或者不喜欢KiwiNige说。如果您拥有磁盘空间,则会增加此一次事件的日志并在之后重新调整其大小。尽可能减少思考,这将是最简单的。但是,如果您的磁盘空间有问题,批处理循环插入将适用于您。 – Kuberchaun 2009-11-06 05:45:37