有时您必须修复Prod上其他服务器上不存在的数据。这不仅是由于错误,还可能是由于客户端发送的文件中的数据导入不正确,或者是由于有人入侵您的系统而导致的问题。还是由于错误的数据输入引起的问题。如果数据库很大或时间紧迫,则您可能没有时间还原最新的备份并修复dev。
您的第一道防线(这是任何企业数据库都无法缺少的!)是审计表。您可以使用它们来备份错误的数据更改。此外,您可以编写脚本以将数据返回到之前的状态,并在需要还原审核的数据之前很长时间在其他服务器上对其进行测试。这样唯一的风险就是您确定了要还原的正确记录。
接下来,所有用于更改生产数据的脚本应包括以下内容:
它们应处于显式事务中并具有TRY Catch块。
他们应该具有测试模式,可以在看到更改后将其回滚。在进行更改之前,您应该有一个选择陈述,在更改之后应该有一个陈述,以确保更改正确。该脚本应确保显示已处理的行数。我们在模板中预先设置了一些内容,以确保完成所有工作。更改模板也有助于节省编写修补程序的时间。
如果要更改或更新大量数据,请考虑编写脚本以批量运行,并为每个批次提交。修复一百万条记录时,您不想锁定整个系统。如果要修复的数据量很大,请确保dba或用于性能调整的人员在运行之前检查脚本,并在可能的情况下在非工作时间运行。
接下来,对所有在生产中进行任何更改的脚本进行代码审查,并置于源代码控制中。所有这些-无一例外。
最后,开发人员不应运行这些脚本。它们应由dbas或配置管理组运行。如果您都没有,那么只有技术领先或更高水平的人才有权在产品上运行产品。生产产品的人越少,发现问题就越容易。编写脚本时,应使其简单运行,不突出显示部分并一次运行一个步骤。当人们忘记突出显示where子句时,突出显示的内容经常使他们感到麻烦。