当前位置: 首页 > 面试题库 >

我应该如何将DDL更改从一种环境迁移到另一种环境?

叶坚
2023-03-14
问题内容

我使用SQLDeveloper的GUI进行DDL更改。问题是,我需要将那些相同的更改应用于测试环境。我想知道其他人如何处理这个问题。当前,我必须手动编写ALTER语句以使测试环境与开发环境保持一致,但这容易出错(两次执行相同的操作)。在测试环境中没有重要数据的情况下,我通常会把所有东西丢掉,从dev中导出DDL脚本,并在测试中从头开始运行它们。

我知道有一些触发器可以存储每个DDL更改,但这是一个高度共享的环境,如果可能,我想避免这种情况。

也许我应该只手动编写DDL东西,而不要使用GUI?


问题答案:

我已经看到了一种“我不知道如何做”的方法来尝试解决此问题,最后,我认为您只需要维护手动脚本即可。

现在,您不必一定要自己写。在MSSQL中,当您进行更改时,有一个用于生成脚本的小按钮,它将吐出一个SQL脚本来进行您所做的更改。我知道您在谈论Oracle,距我使用他们的GUI已有好几年了,但我只能想象他们具有相同的功能

但是,您无法摆脱手动使用脚本的麻烦。关于现有数据,您将遇到很多问题,例如新列的默认值或如何处理重命名/删除/移动的列的数据。这只是随着时间的推移而无法摆脱的使用数据库模式的分析的一部分。如果您尝试使用完全自动化的解决方案来执行此操作,则迟早会弄乱您的数据。

我建议做的一件事,就是让您的生活更轻松一些,请确保将架构更改与代码更改分开。不同之处在于,对表和列的模式更改必须准确地运行一次,并且永远不要再次运行,因此必须作为单独的更改脚本进行版本控制。但是,代码更改(例如存储的proc,函数甚至视图)可以(并且应该)反复运行,并且可以像其他任何代码文件一样进行版本控制。我看到的最好的方法是在VSS中拥有所有proc
/函数/视图时,我们的构建过程将删除所有过程/函数/视图,并在每次更新期间重新创建它们。这与重建C#/ Java
/任何代码的想法相同,因为它确保所有内容始终都是最新的。



 类似资料:
  • 请执行以下步骤: 1.debug打开; 2.把整个程序打包; 3.传到服务器; 4.数据库备份到服务器; 5.改data/conf/db.php的数据库用户名密码; 6.测试; 7.debug关闭;

  • 问题内容: 我有一个数据库(),其中有数十个数据库,每个数据库都有许多(平均10-20),数据类型设置为。这绝对是致命的性能(其中一些列用于其中,某些表具有100K+行)。我想将所有这些列更改为。自动执行此操作的最佳方法是什么?(我可以使用,也可以创建一个实用程序来通过可访问db的网站执行此操作,以较容易的为准)。 问题答案: 这是一个工作脚本,用于查找所有列并将其转换为: 这是我曾经宽恕过的唯一

  • 问题内容: 我想把头围在Docker上,但是很难弄清楚。我试图在我的小项目(MERN堆栈)中实现它,并且我在思考如何区分开发(可能是登台)和生产环境。 我看到了一个示例,其中他们使用了2个Docker文件和2个docker-compose文件(每个对都包含一个env,因此Dockerfile + docker-compose.yml用于prod,Dockerfile-dev + docker-co

  • 问题内容: 我正在尝试实现一种方案,其中对象的颜色从一种颜色缓慢变为另一种颜色。 我的初始颜色为targetColor,最终颜色为updateColor。changingSpeed变量设置为5。 我必须使用的机制是 使用,,获得了红,绿,蓝三基色 通过targetColor–color = [dr dg db]计算目标颜色的差异 通过将向量的范数除以[dr dg db] T来规范化[dr dg d

  • 问题内容: 我有两种形式,我需要将值从form1.textbox1传递给form2.variable 表格1: `和Form2: 当我在Form2上单击“保存”并打开调试时,我会看到“ ed = 3; en = 5”,但是当我在Form1上单击“打开form2”并打开调试时,我会看到“ Ed = null; En = null;”。并在文本框中显示一个没有值的空白表格。请帮助。 问题答案: 您创建

  • 问题内容: 我想将现有工作从一个视图移动到另一个视图,但是我找不到路。是复制作业并将其从其他视图中删除的唯一方法吗?我想起同样的名字,以我的经验,詹金斯(Jenkins)不能很好地处理工作的重命名。 问题答案: 您只需编辑视图即可(只需点击左侧的“编辑视图”链接)并选中/取消选中复选框即可