您在团队中使用哪些工具来开发 Oracle 存储过程:
- 自动“锁定”您正在使用的当前程序,以便团队中的其他人在您完成之前无法对其进行更改。
- 自动将您在存储过程、Oracle 数据库中所做的更改发送到 Subversion、CVS、... 存储库
谢谢!
您在团队中使用哪些工具来开发 Oracle 存储过程:
谢谢!
我不确定原始发布者是否仍在监视此问题,但无论如何我都会问这个问题。
原始帖子要求能够:
自动“锁定”您正在使用的当前程序,以便团队中的其他人在您完成之前无法对其进行更改。
也许这里的问题是开发范式之一,而不是产品无法“锁定”存储过程。每当我听到“我想锁定它,这样其他人就不会更改它”时,我会立即感觉到人们正在共享一个模式,并且每个人都在同一个空间中开发。
如果是这样,为什么不简单地让每个人都有自己的模式和数据模型的副本?我的意思是认真的人,创建另一个模式不会“花费”任何东西。这样,每个开发人员都可以进行更改,直到他们脸色发青,而不会影响其他任何人。
我过去(在小型团队中)使用的另一个技巧是让每个开发人员由于大小而无法拥有自己的数据副本,那就是拥有一个包含所有表和代码的主模式,公共同义词指向这一切。然后,如果开发人员想要处理存储过程,他只需在他的模式中创建它。这样一来,Oracle 名称解析首先找到一个而不是主模式中的副本,从而允许他们在不影响其他任何人的情况下测试他们的代码。这确实有它的缺点,但这是一个非常具体的案例,我们可以与它们一起生活。显然,我永远不会在生产中实现这样的东西。
至于第二个要求:
自动将您在存储过程、Oracle 数据库中所做的更改发送到 Subversion、CVS、... 存储库
我会惊讶地发现那里有足够聪明的工具来做到这一点(也许是一个机会:)。它必须连接到您的数据库,查询数据字典(USER_SOURCE)并提取相关文本。对于几乎普遍基于文件的源代码控制系统来说,这是一项艰巨的任务。
Oracle 的新 SQL Developer 内置了版本控制。
这是产品的链接。
http://www.oracle.com/technology/products/database/sql_developer/files/what_is_sqldev.html
将 PL/SQL 视为普通代码:将其存储在文件中,并使用您的修订控制工具和内部程序管理这些文件。
如果您还没有修订控制工具,请写下您的要求并选择一个。很多人似乎使用Subversion,与TortoiseSVN作为 Windows 上的客户端相关联(我这样做)。
问题是:按照推荐使用您的工具,并相应地调整您的程序。例如,Subversion 默认使用复制-修改-合并模型,而不是您似乎喜欢的锁定-修改-解锁模型。
就我而言,我喜欢使用 TortoiseSVN,如上所述。和这个工具一样:
无论您选择什么,我都建议您阅读这篇关于数据库版本控制的文章(和相关文章) 。
一个相对简单(如果有点过时)的解决方案可能是使用“锁定”而不是“合并”模式的版本控制系统...... Subversion 或 CVS 通常使用“合并”模式(尽管我相信可以制作 Subversion “锁定”文件?)
“锁定”模式的版本控制系统当然也有自己的弊端......
我能想到在 Oracle 中做的唯一方法可能是 BEFORE CREATE TRIGGER 的一些方法,也许是引用一个表来查找可以在其中运行包的人。虽然听起来有点讨厌?
使用Source Control for Oracle,您可以获得很多您正在寻找的东西。
存储过程(以及包、函数、表等)可以使用界面手动锁定,而不是自动锁定,但这确实可以防止其他人进行更改。
然后可以将用于创建对象的新 SQL 签入 SVN 或 TFS(遗憾的是不支持 CVS)。
该工具不是免费的,但有 28 天的免费试用期。
使用Oracle SQL Developer 1.5,您可以轻松地创建和管理与 CVS 或 Subversion 的连接。要创建 CVS 连接(例如),请单击Versioning -> CVS -> Check out Module。您将运行一个向导来创建连接(主机、用户名等),然后您可以正常检查您的程序/功能。
Toad中还提供了与 CVS 的集成。
您可能还想查看 Aqua Data Studio。他们也内置了 SVN,是一个很棒的存储过程编辑器。
在搜索了一个工具来处理 Oracle 对象的版本控制但没有运气之后,我们创建了以下(不完美但合适)的解决方案:
这是第 1 步最重要的查询:
SELECT object_type, object_name,
dbms_metadata.get_ddl(object_type, object_name) object_ddl FROM user_objects
WHERE OBJECT_TYPE in ('INDEX', 'TRIGGER', 'TABLE', 'VIEW', 'PACKAGE',
'FUNCTION', 'PROCEDURE', 'SYNONYM', 'TYPE')
ORDER BY OBJECT_TYPE, OBJECT_NAME
每个对象一个文件的方法有助于识别更改。如果我向表中添加一个字段TTTT
(当然不是真实的表名),那么只会TABLE_TTTT.SQL
修改文件。
第 1 步和第 3 步都是缓慢的过程。(几千个文件需要几分钟)
Toad 也可以在不需要 CVS/SVN 的情况下执行此操作。