【问题标题】:SQL Server Data Type ChangeSQL Server 数据类型更改
【发布时间】:2017-03-23 12:13:50
【问题描述】:

在 SQL Server 中,我们现在有一个包含 8000 万条记录的表和 3 列数据类型是浮点数。现在我们需要将浮点数据类型列更改为小数列。如何以最少的停机时间继续它?

我们执行了通常的 ALTER 语句来更改数据类型,但日志文件被填满并进入系统内存不足异常。所以请让我更好地解决这个问题。

我们不能使用这种技术,例如:创建 3 个新的临时列并批量更新现有数据并删除现有列并将临时列重命名为实时列。

【问题讨论】:

    标签: sql sql-server-2008 types database-administration


    【解决方案1】:

    我在我的一个项目中做了完全相同的事情。以下是您可以遵循的步骤,其中最少的日志记录、最少的停机时间和最少的复杂性。

    1. 使用具有相同列名的新数据类型创建新表(如果表需要在新表中加载数据后创建任何索引,则不使用索引)但名称不同。例如,现有表是 EMPLOYEE,那么新表名应该是 EMPLOYEE_1。请记住所有约束,例如外键,以及您在加载之前或加载之后可以创建的所有约束,它们不会对性能产生任何影响。但建议不要创建,因为现有表具有重命名表后重命名的约束名称。

    2. 请记住,新数据类型的最大精度等于现有表中可用的最大精度值。

    3. 使用具有快速加载选项的 SSIS 将数据从现有表加载到新表中,这样临时数据库中就不会发生日志记录。

    4. 在停机期间将旧表重命名为 EMPLOYEE_2,并将 EMPLOYEE_1 重命名为 EMPLOYEE。

    5. 更改外键、默认值或任何其他约束的表定义。

    6. 上线并在较短的加载时间内在表上创建索引。

    通过使用这种方法,我们改变了表数据类型,其中我们拥有大约十亿多条记录。使用这种方法,您可以将停机时间降至最低,并且登录到 tempDB,因为 SSIS 快速加载选项不会在数据库中记录任何内容。

    【讨论】:

      【解决方案2】:

      评论太长了。

      其中一种方法可能有效。

      最简单的方法就是放弃。差不多,但请执行以下操作:

      • 将现有列重命名为其他名称(例如,_col
      • 添加执行转换的计算列。

      如果数据不经常修改(因此您只需要读取权限),则创建一个新表。也就是说,将数据复制到具有正确类型的新表中,然后删除原始表并将新表重命名为旧名称。

      您可以通过交换表空间而不是重命名表来做类似的事情。

      【讨论】:

        【解决方案3】:

        另一种方式可能是:

        • 向表中添加一个具有正确数据类型的新列。
        • 将浮点列中的值插入到十进制列,但要在 x 条记录中进行批量操作。
        • 一切完成后,删除浮点列并将十进制列重命名为浮点列名称。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-17
          • 2014-11-11
          • 2016-10-22
          • 2010-10-12
          相关资源
          最近更新 更多