为什么使用Oracle版本控制?

为什么使用Oracle版本控制?,oracle,version-control,Oracle,Version Control,在工作中,我们使用Oracle(12c客户端)存储大部分数据,我使用SQL Developer连接到数据库环境 问题: 由于某种原因(太懒了,无法创建新表,所以它们会添加新列并更改数据类型或长度)修改表时会出现问题。作为回报,这将打破桌子上的其他人谁实际利用它的真正目的 更新: 我们有DEV、TST、UAT和PRD环境。在我们推广到珠三角之前,我们测试并批准了脚本。当我们想要返回到一个现有的表进行更改,但该表由于不同的原因已经被修改时,问题就出现在DEV中 问题1: 版本控制只是针对存储过程,还

在工作中,我们使用Oracle(12c客户端)存储大部分数据,我使用SQL Developer连接到数据库环境

问题: 由于某种原因(太懒了,无法创建新表,所以它们会添加新列并更改数据类型或长度)修改表时会出现问题。作为回报,这将打破桌子上的其他人谁实际利用它的真正目的

更新: 我们有DEV、TST、UAT和PRD环境。在我们推广到珠三角之前,我们测试并批准了脚本。当我们想要返回到一个现有的表进行更改,但该表由于不同的原因已经被修改时,问题就出现在DEV中

问题1:
版本控制只是针对存储过程,还是可以跟踪表结构、函数、触发器、序列、同义词等的更改?

正如Bob Jarvis指出的,您需要的不仅仅是问题的解决方案。您需要为所有开发人员实施策略和实践。我工作过的地方的一些想法:

  • 每个开发人员都有一台安装了数据库副本的VM机器。他们可以在it上做任何他们喜欢的事情,但必须提供脚本以将更改转移到生产环境中。这些脚本将应用于测试实例,并在投入生产之前再次应用于QA实例
  • subversion在所有操作系统上都能正常工作,而Turtoise在windows上也能正常工作。将脚本提交到存储库工作得很好,这与SQL developer集成在一起,可以通过Toad完成
  • 您有权限问题。太多人有权更改表。删除这些权限并集中在一两个人身上。更改以脚本的形式通过它们传递,并且可以在那里应用监督。开发人员可以有自己的模式进行测试,也可以有一个带有副本的VM进行开发
  • 运行此脚本以查看谁可以更改表

    从DBA\u选项卡\u PRIVS中选择* 其中PRIVILEGE='ALTER'

关键在于关注点的分离。开发人员应该能够访问一个模式,在那里他们可以做他们需要的事情。公司需要知道谁做了什么,何时何地


如果您有多个开发人员处理对开发环境的多个更改,那么您需要协调和通信以及源代码控制。每周召开一次讨论重叠区域的会议或一条提示性的聊天信息只是一起工作的一些方式。

我认为最有效的方法是建立一个开发人员数据库,所有开发人员在其中管理他们自己的模式集

脚本构建提供了测试数据加载,允许任何开发人员创建自己的工作模式。然后他在那里工作,测试他的更改,然后通过脚本将他的更改提交给源代码管理。DEV数据库不需要很大,只需要足够的测试用例就可以进行单元测试

编写所有更改的脚本,以便将其签入版本控制系统,并与其他更改合并。我们的目标是建立一个系统,devA在其中签入changeA,然后在与主干合并时,devB在构建schemaA时获得changeA

如果主项目模式使用公共同义词,那么这种方法需要小心。当你前进时,你需要考虑这一点。

我还建议每次签入更改时,都应该签入一个附带的退出脚本

这种方法的优点是开发人员可以管理自己的模式。使用脚本化的方法,他们并不都需要DBA知识,也不需要管理数据库。将所有这些都放在一个数据库中可以更容易地管理和控制资源

我在有50多名开发人员的团队中使用过这种方法,效果非常好

这种方法还为开发人员签入脚本和自动创建部署包铺平了道路


为了使开发测试部署回退周期更易于管理,我们可以做很多事情。

您所在的公司需要实施变更管理战略。不考虑下游后果而随意做出的改变会导致灾难。你可以从自己的立场提出问题,但你需要得到管理层的认可,以确保实施和强制执行,因为这确实是一个管理问题。祝你好运。你是说在这种情况下使用版本控制是毫无意义的?版本控制是解决方案的一部分,但主要的一点是控制安装更改的过程。但是版本控制本身并没有特别的帮助。也许很高兴知道,角落隔间里的怪人弗雷德做了一个改变,造成了重大的负面影响,但如果你不能阻止他们安装他们的改变,你得到了什么?弗雷德的经理需要A)被告知正在发生的事情,B)必须签署变更,C)对结果负责的流程更可能是需要的。我相信权限与此有关,但目前我们有开发人员、TST、UAT,和PRD数据库环境,我们通过测试/批准脚本来促进我们在PRD的更改。问题在于开发人员。表、序列等将被创建、全面测试,然后升级。如果我们需要回去进行更改,我们可以在DEV中进行更改、测试和升级。问题是,当我想回去做一个改变时,其他的改变已经发生了。因此,我需要版本控制之类的东西,当且仅当它跟踪对表、序列等所做的更改时。或者是否有一种方法只允许某些人修改某些表?@NightOwlPrgmr了解我关于权限的观点。是的,您可以设置授权和角色,以便只有某些人可以修改表,请参见我的edit@NightOwlPrgmr您可能认为您只需要“跟踪对表、序列所做的更改”,但实际上您需要跟踪所有内容。数据库是一个时间点结构:代码、结构和数据都会改变beh