sql server批处理数据库改变,批量数据库更改 - 最好和最安全的方式

时间:2012-09-28 14:44:25

标签: sql sql-server sql-server-2008 tsql

我们有一个由5名开发人员组成的小型开发团队,他们致力于基于Web的大型企业级asp.net/c#系统。

我们做了很多数据库更新,包括存储过程创建和更改,以及新表创建,列创建,记录插入,记录更新等等。

今天,所有开发人员都将所有更改脚本放在一个大的sql更改脚本文件中,该文件在我们的测试和生产环境中运行。因此,这个单个文件包含存储的proc更改和记录插入,更新等等。文件最终可能会非常冗长,因为我们可能每1至2个月只进行一次测试或生产发布。

我目前面临的问题是:

偶尔在这个大型“批量更改脚本”中的任何给定位置都会出现脚本错误。例如,插入失败或者可能是对于proc的更改失败。

发生这种情况时,很难说出哪些更改成功以及数据库失败了什么。

有时即使一个alter失败,实例代码也会继续在整个脚本中执行,有时它会停止执行而没有进一步运行。

所以我今天最终手动检查过程和记录,看看实际上有什么用处,实际上没做什么,这有点辛苦。

我希望我可以将整个更改脚本汇总到一个大事务中,这样如果发生任何问题,我可以回滚每一个更改,但是在sql server中这样的批处理脚本似乎不可能。 / p>

所以,然后我尝试在运行脚本之前备份数据库,这样如果发生错误,我可以简单地恢复数据库,修复问题,然后重新运行修复的脚本。但是,为了恢复数据库,我必须关闭我们的数据库镜像,所以这也不是完全理想的。

所以我的问题是,在生产数据库上运行批处理脚本最安全的方法是什么?

是否有某种方法可以将整个脚本包装在我可以回滚的事务中,而我没有看到?

我们可能更好地跟踪和运行单独的脚本文件,这样如果1个文件失败,我们可以将它推迟到失败的目录中查看并继续运行所有其他文件吗?

寻求建议和专业知识。

谢谢你的时间。 马特

1 个答案:

答案 0 :(得分:2)

首先应在QC数据库上运行批处理脚本,以便在生产之前获取任何错误。

质量控制数据库应与生产相同或尽可能接近相同。

每个脚本都应该捕获错误并使用print语句报告脚本的名称以及错误的位置,然后如果在应用于生产时发生错误,则至少具有脚本的名称和位置脚本中的错误。

如果您的QC数据库相同或非常接近,则制作错误应该非常少见。