Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 源代码控制数据库驱动的应用程序是否需要从转储开始?_Sql_Database_Version Control_Continuous Integration_Continuous Deployment - Fatal编程技术网

Sql 源代码控制数据库驱动的应用程序是否需要从转储开始?

Sql 源代码控制数据库驱动的应用程序是否需要从转储开始?,sql,database,version-control,continuous-integration,continuous-deployment,Sql,Database,Version Control,Continuous Integration,Continuous Deployment,与完全基于脚本或数据库增量工具相比,使用转储文件作为数据和模式迁移的基础有哪些优点和缺点 上下文是应用程序正在生产中,并且只有一个生产数据库。应用程序和数据库模式正在积极开发中。关键用户数据存在于生产数据库中,必须在部署新版本或修复程序时向前滚动 正在讨论的解决办法是: 转储文件基础- 从参考点转储文件开始 数据库alter脚本已签入源代码管理 部署需要加载转储文件,然后运行alter脚本 模式+迁移 整个模式和某些非用户配置数据在SCM中存储为DDL和DML 针对最新版本架构的迁移脚本存储在S

与完全基于脚本或数据库增量工具相比,使用转储文件作为数据和模式迁移的基础有哪些优点和缺点

上下文是应用程序正在生产中,并且只有一个生产数据库。应用程序和数据库模式正在积极开发中。关键用户数据存在于生产数据库中,必须在部署新版本或修复程序时向前滚动

正在讨论的解决办法是:

转储文件基础-

  • 从参考点转储文件开始
  • 数据库alter脚本已签入源代码管理
  • 部署需要加载转储文件,然后运行alter脚本
  • 模式+迁移

  • 整个模式和某些非用户配置数据在SCM中存储为DDL和DML
  • 针对最新版本架构的迁移脚本存储在SCM中
  • 部署需要加载模式,然后迁移数据。三,
  • 我的直觉是,使用二进制格式作为基础是不好的,但我需要能够说服其他人(如果确实是这样的话),他们认为这是必要的


    我重新制定了这个问题,以便更容易回答

    以下是原问题:

    我正在与一个团队一起开发一个数据库驱动的企业应用程序 并希望改进我们的流程。目前,有很多 手动更新所有层上的数据库。目标是 具有一致且及时更新数据库的自动化过程 一种自动化的方式,(符合原子提交和 更接近连续交付),这将带来大量 优势

    我认为模式(和某些数据)是应用程序所必需的 配置)应在源代码管理中表示,并在 此外,任何必要的脚本都可以从中转换和加载用户数据 当前生产数据库。我读到这是不可取的 在源代码管理中有一个转储文件(.dmp),直觉上,我同意 强烈地。然而,我不是每个人都同意这个项目。 相反的论点是,在现实中,这是不可能的,或者至少是不可能的 如果不从转储文件开始,则“最少”太难了。我起床了 我的数据库知识有限,无法真正讨论 有意义地。。。我更多的是一个开发人员,而不是一个数据库专家。 另一种建议是保留alter脚本来更改 转储到最新架构

    有人能帮我了解每种方法的利弊吗 好一点?基于转储的方法是必要的、好主意还是可行的 这不是个好主意,为什么

    可能相关的一点背景:应用程序处于 因此,每个新版本都必须将数据作为 部署过程,以及集成和UAT的明显原因 这应该是真实的数据。但是,此应用程序不是“已发货”且 由客户安装,一次只有一个生产实例 给定时间,内部维护。我知道会有一些细节 具体到我的项目,所以答案将必须解决的一般问题 案例


    我参与的大多数项目都有用于模式创建和初始数据插入的显式SQL脚本。(使用alter语句和数据迁移升级脚本)

    此外,还可以使用Liquibase之类的工具来管理数据库更改


    很多不好的东西都是由新安装和升级的不同脚本引起的。我在2000年初为Oracle电子商务套件工作,以我的经验,adpatch工具消除了这种致命的变化

    在Oracle收购我的雇主后,我非常讨厌的一项关键技术是坚持所有脚本都可以完全无错误地重新运行,并且可以完全无错误地运行。一旦我们的补丁质量达到了标准,我意识到这完全是个天才

    我学到的另一项关键技术是使用强大的数据库比较/验证脚本


    如果您的模式状态良好,您的数据集将最容易自行维护。

    发布升级时,您的关键问题之一是“您必须从多少不同的版本升级”。如果所有现有系统(始终)处于同一修订级别,则有一组选项;如果你在不同的层次上有不同的生产系统,那么你需要处理一组更复杂的问题。在我们的情况下,在给定的时间内只有一个生产系统,因此,生产数据库实例包含必须迁移到新实例或变异为新模式的最新数据。这种奢侈……肯定会让生活更轻松。您可能还需要一个独立于开发系统的测试系统,这样您就可以在开发机器(您已经进行了N次迁移)和生产机器(您可能不想因为迁移失败而脱机)之外的机器上验证任何迁移操作。而且,如果你扩展,最终会有多个系统。但是现在,您可以享受一个相对(强调相对)简单的过程。是的,使其自动化的一个真正重要的好处是,除了测试代码之外,您还可以测试部署,此外还可以减少生产和UAT以及其他测试实例之间的差异。但问题是如何处理数据迁移,每次从转储开始是否不好以及为什么。我的问题的一个问题是,在现实中它会纠缠多个问题。数据迁移通常是如何工作的?它是对实时数据库的更新、针对某个转储文件或备份的更新,还是跨两个实例的导入?我正试图将我们的项目转向自动层部署和连续交付