- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在寻找有关数据库脚本修改的最佳实践的见解,这些修改与软件系统的其他代码更改一起进行。
我曾经在一家公司工作,该公司坚持每次推出都要准备好回滚,以防出现问题。这听起来很合理,但在我看来,通过脚本部署的数据库修改的回滚代码与推出脚本一样有可能失败。
对于托管代码,版本控制使这变得非常简单,但对于数据库架构,回滚更改并不那么容易 - 特别是如果数据在推出过程中发生更改。
我目前的做法是通过在后期开发期间针对测试数据库运行来测试推出代码,然后针对该测试数据库运行应用程序。在此之后,我备份实时数据库,并继续推出。
我还没有遇到问题,但我想知道其他商店如何管理数据库更改,以及从任何错误中恢复的策略是什么。
最佳答案
我们所有的数据库脚本都针对类似于我们的实时数据库的数据库进行了几个测试阶段。这样我们就可以相当确定修改脚本将按预期工作。
对于回滚,存储过程、 View 、函数、触发器,所有编程的东西都很容易回滚,只需应用对象的先前版本即可。
正如您提到的,具有挑战性的部分出现在从表中更新/删除记录,甚至向表中添加新列时。你是对的,在这种情况下,回滚很可能会失败。
我们所做的是,如果我们有一个不能轻易回滚的更改,但它是一个敏感/关键部分...我们有一组回滚脚本,这些脚本也经过相同的测试环境。我们运行更新脚本,验证它是否按预期工作,然后运行回滚脚本,并验证它是否像修改前一样工作。
作为预防措施,我们所做的另一件事是在更新之前创建数据库快照 (SQL Server 2005)。这样,如果出现任何意外问题,我们可以使用快照来恢复更新期间可能丢失的任何数据。
因此,最安全的做法是针对尽可能接近您的实时系统的数据库进行测试,并测试您的回滚脚本......以防万一这两个都失败了,准备好快照以备不时之需。
关于sql - 数据库修改脚本 - 推出/回滚最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5952692/
我有一个传统上作为 MSI 文件提供的产品。它由我们的各种客户通过某种形式的 SMS 推送部署到数千个桌面。我们用来创建这些安装程序的软件正在使用中,我们正在寻找替换它。由于我们支持许多操作系统,我们
我们有一个使用 Gradle/Android Studio 构建的 Android 应用程序,并使用 JaCoCo 为我们的单元测试生成代码覆盖率报告;这很好用。我们也有兴趣能够为手动测试生成覆盖率报
我正在寻找有关数据库脚本修改的最佳实践的见解,这些修改与软件系统的其他代码更改一起进行。 我曾经在一家公司工作,该公司坚持每次推出都要准备好回滚,以防出现问题。这听起来很合理,但在我看来,通过脚本部署
我使用下面的代码通过 Intent 启动 Twitter,但它不起作用。我的手机上安装了 twitter 应用程序。 Intent shareIntent = new Intent(android.c
我用 1Password存储我的密码,以及 fluid.app创建一些特定于站点的应用程序/浏览器 虽然 1Password与 Chrome、Safari 和其他浏览器很好地集成,它不能很好地与 Fl
我如何启动 google maps transit get directions,以便当我按坐标或地点名称输入源和目的地时,google maps 会建议公交(公交路线)方向。这是骑自行车的代码,但我
我已经为 Android 应用程序开发了一个 SDK。我们有很多客户在应用程序中使用这个 SDK。现在我已经更新了我的 SDK。我正在寻找一种方法可以在应用程序中反射(reflect)这些更改,而无需
我有一个带 child 的 flex 容器,每个 child 都有一些内容(没有固定宽度的),并且在一个 child 上我使用 flex-grow: 1;将其填充到剩余的可用空间。 有时,正在成长的
我们即将推出使用 java web start 构建的客户端服务器应用程序。我们的主服务器位于欧洲的一个国家,第一天就会有许多用户从世界各地下载我们的客户端。由于客户端应用程序相当大(MB),因此我们
我已经尝试了很多组合,而这个是最接近我需要的组合。 我需要的是一个图像 (img1),上面有另一个(较小的)图像 (img2),当我翻转 img1 时,我希望它淡入(并在滚出时淡出),而 img2 保
北京时间 1 月 21 日晚间消息,知情人士今日称,苹果公司的首款 VR/AR(虚拟现实 / 增强现实)头显将是一款昂贵的小众产品,有望于 2022 年推出。这款产品主要为了将来更主流的 “AR
搜索 Apple Pay/Passkit/Wallet 文档,我发现代码示例很少,文档也很差。我们尝试提供我们已配置的支付通行证,而不仅仅是使用 openPaymentSetup() 启动钱包。 根据
我需要这个用于 API11 之前的项目。 我正在寻找一种从右侧添加 View 的方法,这将导致当前全屏 View 向左移出,以便在屏幕中显示新 View 。 新 View 大约是屏幕宽度的 1/3,这
Electron v1.8.2 Spectron v3.8.0 添加光谱测试,但即使是非常基本的测试也会失败。 尝试运行: const { Application } = require('spect
这是我最简单的问题。让我试着把它弄清楚。 我有一个 div,在本例中称为 "testdiv",它附加了一个类名 "menulink"。 div 中有一个链接。当我滚动链接时,我希望 div 类更改为
我想将 li 元素排列在任意数量的列中。 Yellow Block Red Block Green
我试图将 child 推到 parent 的盒子外面,但是,似乎 parent 只是在长度上扩展并获得一个滚动条,所以 child 留在里面,并且在 parent 外面不可见。 .parent {
Google Play 游戏服务:SIGN_IN 状态:ERROR_NOT_AUTHORIZED,推出 Beta 版时。还有这个:- W Auth : [GetToken] GetToken f
我正在尝试使用 Jetpack Compose,但我对 Row 的行为感到困惑。我在图标按钮旁边有一个文本,我希望图标按钮锚定在最小宽度为 48dp 的一侧,并在其周围环绕文本。像这样: 但是文本没有
我从第四行的字符 1 中收到上述错误...不知道是什么抛出了它?我确信这是我看不到的简单事情...... out = out + "Select Box Information The name of
我是一名优秀的程序员,十分优秀!