Oracle 到 H2/hsqldb 等适配器

5
我不可能是唯一面临这个问题的人,因此我正在寻求建议。
我们在 Oracle 上运行应用程序,但我们的集成测试使用 h2 进行快速的内存测试,数据库是在测试开始时从 DDL 脚本构建的。
问题在于,一些 DDL 命令的使用/语法在 Oracle 和 h2/hsqldb 之间有所不同。例如,今天我花了一些时间才意识到,在 Oracle 中,“grant select on ...” 可以在序列上工作,但在 h2 上只能在表上工作。
在之前的一个项目中,我们有一个适配器来删除/翻译这样错误的命令,这意味着我们的测试数据库运行了与我们实现到生产环境中的代码非常不同的代码。虽然一切都经过了非常彻底的验收测试,但这意味着某些问题可能要到开发周期中的相当晚的时候才会被发现。
在我的最新项目中,我感到自己正在走同样的路线 - 所以肯定还有其他人也曾走过这条路。
有什么建议吗?我们使用 java/maven,因此欢迎提供适当的解决方案!

你有机会引入ORM(如Hibernate)来抽象出这些差异吗?我们在测试阶段也有类似的Oracle设置和单元测试阶段的HSQLDB设置,ORM到目前为止运作良好。 - Vikdor
这是一个我之前不熟悉的“集成测试”术语用法。在我的经验中,集成测试是在尽可能模拟生产目标环境的情况下测试新软件的时候。我认为,“为了快速进行内存测试而使用完全不同的数据库”是一种虚假的经济手段。 - Bob Jarvis - Слава Україні
@BobJarvis - 我把这些测试称为集成测试,因为我们中的纯粹主义者(我不是其中之一)不喜欢把这些测试称为单元测试。尽管如此,在构建周期中快速运行并练习数据库的小规模测试非常有用——如果Oracle有一个便宜/免费的内存数据库,我会使用它,但他们没有,所以这就是我们走的路。当然,完整的集成测试(我们称之为系统集成)将使用生产目标数据库。 - Dave Richardson
@DaveRlz 为什么不直接安装Oracle XE并将其挂载到ramfs分区上?这将是您从Oracle获得免费内存数据库的最佳选择。 - Robert Munteanu
1个回答

2

据我所知,目前没有这样的适配器。

无论如何,我想说你不可能通过这样的适配器达到你的目标。首先,Oracle的功能集在任何其他解决方案中都不容易找到(不是说这对Oracle一定是一个优势)。


我同意这些功能是不可比较的,但我没有提到的是,我并不关心任何“高级”功能(例如存储过程、数据库链接、有趣的表结构等),而只关注相对常见的内容,如表定义/约束/索引、数据类型、权限等。 - Dave Richardson
1
@DaveRlz 我认为你最好的选择是找到一个抽象层。例如,对于DDL,您可以使用Liquibase创建与数据库无关的DDL语句。或者使用Hibernate作为ORM。 - Robert Munteanu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接