我在 Oracle 的多开发人员环境中工作,有一个大包。我们有DEV=>TST=>PRD的促销模式。目前,所有包编辑都是直接在 TOAD 中进行,然后编译到 DEV 包中。

我们遇到两个问题:

  1. 并发变更需要按不同的时间表进行推广。例如,开发人员 A 进行了一项需要明天升级的更改,而开发人员 B 正在同时进行一项在两周内不会升级的更改。当到了促销时间时,我们发现自己手动注释掉尚未促销的内容,然后取消注释......糟糕!

  2. 如果两个开发人员同时进行更改,并且其中一个开发人员进行了编译,则会清除另一开发人员的更改。没有一个很好的合并;相反,最新的编译获胜。

您会建议采取哪些策略来解决这个问题?我们正在使用 TFS 进行源代码控制,但尚未将其用于我们的 Oracle 软件包。

附: 我见过 发帖,但并没有完全回答我的问题。

有帮助吗?

解决方案

其他提示

关键是采用仅从源代码控制系统部署代码的做法。我对 TSF 不熟悉,但它必须实现分支、标签等概念。然后,部署什么的问题就不再是源代码控制系统中的构建和发布标记的范围了。

附加提示(针对 Oracle):

  • 如果将包规范和主体拆分为不同的文件,并为每个文件使用一致的文件模式(例如“.pks”表示软件包规格,“.pkb”表示软件包主体)。如果您使用可以处理文件模式的自动构建过程,那么您可以构建所有规范,然后构建主体。如果您仅部署包主体,这还可以最大限度地减少对象失效。

  • 花时间配置由源代码控制系统的发布或构建状态驱动的自动构建过程。如果您有适量的数据库代码对象,那么能够将代码构建到参考系统中并将其与您的质量保证或生产系统进行比较是值得的。

我的答案 关于 在团队中使用 Oracle 中的存储过程的工具 (我刚刚重新标记)。

底线:不要直接使用 TOAD 修改程序。将源代码存储为文件,您将其存储在源代码管理中,修改然后执行。

另外,我强烈建议每个开发人员使用自己的数据库副本(使用免费的 Oracle Express)。如果您将用于创建数据库的所有脚本存储在源代码管理中,则可以做到这一点。更多见解 可以在这里找到.

为了避免 2 个开发人员同时处理同一个包:

1) 使用您的版本控制系统作为包代码的来源。要处理某个包,开发人员必须首先从版本控制中检出该包;在该开发人员重新签入该包之前,没有其他人可以签出该包。

2) 不要直接在 Toad 或任何其他 IDE 中处理包代码。你有 没有线索 您正在处理的代码是否正确,或者是否已被一位或多位其他开发人员修改。处理从版本控制中签出的脚本中的代码,并将其运行到数据库中以编译包。我更喜欢使用漂亮的文本编辑器 (TextPad) 和 SQL Plus,但您也可以在 Toad 中执行此操作。

3) 完成后,将脚本重新签入版本控制。 不要 将数据库中的代码复制并粘贴到脚本中(再次参见第 2 点)。

这种受控方法的缺点(如果有的话)是一次只有一名开发人员可以处理一个包。只要满足以下条件,这就不应该是一个主要问题:

  • 您将包保持在合理的大小(就它们的用途而言,而不是其中有多少行代码或过程数量)。没有一个大包可以容纳所有代码。
  • 我们鼓励开发人员仅在准备好处理代码时才签出代码,并在完成更改和测试后立即重新签入代码。

我们使用每个流的开发数据库以及不同流的标签来实现这一点。

我们的 Oracle 许可为我们提供了无限的开发/测试实例,但我们是 ISV,您可能有不同的许可选项

您可以使用 VS 的 Oracle 开发人员工具,也可以使用 sql Developer。SQL Developer 与 Subversion 和 CVS 集成,您可以免费下载。看这里: http://www.oracle.com/technology/products/database/sql_developer/files/what_is_sqldev.html

我们将 Toad for Oracle 与 TFS MSSCCI 提供程序一起用于 TFS 2008。我们使用一个 定制工具 从源代码控制中提取数据库签入并将其打包以供发布。

据我所知,Oracle Developer Tools for Visual Studio.Net 没有与 TFS 或其他方式进行任何真正的源代码控制集成。

你可能会考虑 适用于 Visual Studio 的 Toad 扩展 虽然它并不便宜,我想可能是 4000 美元。

另一种选择是 Oracle 变更管理包 但相信它需要昂贵得多的 Oracle 企业版。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top