我需要帮助编写TSQL脚本来修改两列的数据类型。
我们正在更改两列:
我主要担心的是脚本的生产部署......
公共网站积极使用该表,每小时可获得数千次点击。因此,我们需要脚本快速运行,而不会影响前端的服务。此外,如果发生错误,我们需要能够自动回滚事务。
幸运的是,该表只包含大约25行,所以我猜测更新会很快。
此数据库是SQL Server 2005。
(仅供参考 - 由于第三方工具与SQL Server的xml和uniqueidentifier类型不兼容,因此需要更改类型。我们已经测试了dev中的更改,并且更改没有任何功能问题。)
答案 0 :(得分:6)
正如David所说,在生产数据库中执行脚本而不进行备份或停止站点不是最好的想法,如果你想只在一个表中做更改,行数减少就可以准备一个脚本:
这将以一个名为原始表但具有所需新结构的表结束,此外,您还使用备份名称维护原始表,因此如果要回滚更改,可以创建脚本简单地删除新表并重命名原始表。
如果表有外键,脚本会更复杂一些,但仍然没有太多工作。
答案 1 :(得分:2)
因此,我们需要脚本来 快速运行,不影响服务 在前端。
这只是一个意见,但它是基于经验:这是一个坏主意。最好有一个简短的(预先宣布的,如果可能的话)计划停机时间而不是承担风险。
唯一的例外是,如果您真的不在乎这些表中的数据是否已损坏,并且您可能会长时间停机。
在这种情况下,根据您正在进行的更改类型以及您已经执行的测试,听起来风险非常小,因为您已经测试了更改并且您应该能够执行此操作安全,但没有任何保证。
首先,如果出现问题,您需要有一个后备计划。 MINIMAL合理计划的简短版本包括:
在网站上线时尝试进行此类更新是非常不明智的。如果出现问题,你可能会长时间宕机。
GOOD计划还会让您首先针对数据库副本和网站副本(测试/暂存环境)对此进行测试,然后采取上述步骤进行实时服务器更新。 你已经这样做了。感谢你!
有更好的方法可以进行这样的更新,但在大多数情况下,安全停机时间的权衡是明智的。
答案 2 :(得分:1)
如果您绝对需要在现场直播,那么您可能会考虑这个:
1)使用新的数据类型和复制的数据构建表的脱机版本。 2)在离线表上构建所有必需的键和索引。 3)在交易中交换表格。 00你可以将旧表重命名为其他东西作为紧急备份。
sp_help 'sp_rename'
但是在类似环境的环境中测试所有这些。并确保您的备份是最新的。并在你最不忙的时候这样做。