您如何在协作的、受版本控制的环境中处理 Oracle 包?

Posted

技术标签:

【中文标题】您如何在协作的、受版本控制的环境中处理 Oracle 包?【英文标题】:How do you work on Oracle packages in a collaborative, version-controlled environment? 【发布时间】:2010-10-16 21:39:00 【问题描述】:

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

我们遇到了两个问题:

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

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

您会推荐什么策略来解决这个问题?我们正在使用 TFS 进行源代码控制,但尚未将其用于我们的 Oracle 包。

P.S.我看过 this 发帖,但它并没有完全回答我的问题。

【问题讨论】:

【参考方案1】:

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

其他提示(针对 Oracle):

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

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

【讨论】:

【参考方案2】:

请参阅 my answer 关于 Tools to work with stored procedures in Oracle, in a team(我刚刚重新标记)。

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

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

【讨论】:

【参考方案3】:

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

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

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

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

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

您将包保持在合理的大小(根据它们的作用,而不是代码行数或其中的过程数量)。不要有一个包含所有代码的大包。 鼓励开发人员仅在准备好处理代码时才签出代码,并在完成更改和测试后立即重新签入。

【讨论】:

【参考方案4】:

我们使用Oracle Developer Tools for Visual Studio.NET...直接插入 TFS

【讨论】:

10g 版本包含源代码控制集成还是使用 11? 您可以将 odp.net 的 11.x 版本(包括 Oracle Developer Tools for VS)与 Oracle 10 数据库一起使用。 你能提供更多关于它是如何工作的细节吗?我们在 11g 中使用 ODT,但 Oracle 的文档中没有关于如何使其工作的详细信息。谢谢! 在服务器资源管理器中连接到数据库后,右键单击一个对象(例如 proc),单击脚本以...。这会将 proc 放入您的解决方案中,然后您可以将其签入. 链接似乎已失效。这是更新版本oracle.com/technetwork/developer-tools/visual-studio/overview/…【参考方案5】:

我们为每个流使用一个开发数据库,​​并为不同的流使用标签。

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

【讨论】:

我不熟悉您所说的“流”是什么意思。这相当于一个分支吗?所以你是说每个分支都有自己的实例,然后在去 TST 时合并分支,对吗? 是的,这就是我的意思 - 为术语道歉。我们也倾向于在我们让太多人在同一个包上工作之前尝试分解包 - 我很感激这可能并不总是一种选择! :)【参考方案6】:

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

【讨论】:

【参考方案7】:

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

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

你可以考虑Toad Extensions for Visual Studio,虽然它并不便宜,我想可能是 4000 美元。

另一个选项是Oracle Change Management Pack,但相信它需要更昂贵的 Oracle 企业版。

【讨论】:

Oracle 开发者工具让您可以创建一个 Visual Studio Oracle 项目类型,并且您可以在 VS 中与 TFS 同步。【参考方案8】:

您可能对 Gitora www.gitora.com 感兴趣。它有助于使用 Git 管理 Oracle 数据库对象。

这篇关于使用 Oracle 数据库进行协作开发的文章也会有所帮助:http://blog.gitora.com/plsql-how-to-develop-two-features-simultaneously-but-deploy-only-one/

完全披露:我是这篇文章的开发者和作者。

【讨论】:

以上是关于您如何在协作的、受版本控制的环境中处理 Oracle 包?的主要内容,如果未能解决你的问题,请参考以下文章

您如何在版本控制下处理开发人员的个人文件?

3.GitHub的了解

每个程序员必学的10个Git命令

坚果云上的文档可以多人协作吗?

如何在 SiteMinder 受保护的环境中处理 CORS 预检请求?

如何在脱机时以编程方式确定本地文件是不是受 TFS 版本控制