【问题标题】:SQL Server full log issue -- how to update the database?SQL Server 完整日志问题——如何更新数据库?
【发布时间】:2009-11-06 04:51:33
【问题描述】:

我正在使用 SQL Server 2000,并尝试将字段的数据类型从 varchar 更改为 nvarchar,以便它可以处理国际字符。但是,该表中已经有很多数据,当我尝试保存更改时,出现以下错误:

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

这是一次性更新——我该如何解决这个错误?

【问题讨论】:

    标签: sql-server transaction-log


    【解决方案1】:

    您可能需要让日志文件变大(请参阅日志文件上的选项),或者备份并缩小它。 http://support.microsoft.com/kb/272318

    【讨论】:

      【解决方案2】:

      尝试运行每 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
      

      【讨论】:

      • 或者像 KiwiNige 说的那样做。如果您有磁盘空间,请增加此一次性事件的日志并在之后将其重新缩小。就少思考而言,这将是最简单的。但是,如果您的磁盘空间有问题,批处理循环插入将为您工作。
      【解决方案3】:

      乍一看,我看到了两种方式:

      1. 只需备份事务日志。类似于 BACKUP LOG dbanme TO DISK='c:\dblog.bak'
      2. 使您的数据库进入简单恢复模式(例如,在企业管理器中:数据库 -> 选项 -> 恢复模式,选择简单)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-21
        • 2011-10-19
        • 2015-03-05
        • 2014-10-17
        • 2014-09-04
        • 2023-03-26
        • 2012-07-10
        • 1970-01-01
        相关资源
        最近更新 更多