我们有一个专门用来运行单元测试的Oracle数据库服务器。有没有一种方法可以专门针对这种目的调优Oracle?因为数据经常被丢弃(因为它只是测试数据)。我想知道是否有一种方法可以将Oracle数据库放在内存中并在不使用TCP/IP协议栈的情况下进行连接,或许可以加快这些测试的速度。
有什么建议吗?
发布于 2009-12-17 03:39:17
答案可能是肯定的,但是在测试期间将数据库环境从生产配置更改为集成配置会带来测试将产生错误结果的风险。
发布于 2009-12-17 05:37:10
如果挂起是数据库清理/重置阶段,并且您使用的是Enterprise Edition,那么将FLASHBACK DATABASE视为(可能)将数据库重置到固定点的更快方法。
在最坏的情况下,您不需要浪费时间构建清理/重置脚本。
发布于 2009-12-17 04:36:12
TCP/IP堆栈不太可能增加您的开销。但是,您可以在与测试用例相同的服务器上运行Oracle实例,并通过ORACLE_SID进行访问(我相信它使用操作系统级别的进程间通信)。
但是,在研究对Oracle的更改之前,我要查看一下在您的持续集成服务器上运行了哪些测试。如果您还没有这样做,这意味着将集成测试(需要后端)与单元测试(不需要)分开,并在不同的时间表上运行它们。几乎没有理由为每个更改运行全套集成测试。
接下来:您是否正在使用任何类型的对象关系映射器来访问数据库?如果是,并且您不依赖于任何特定的Oracle怪癖,那么您可以用内存中的数据库替换Oracle (您没有说明您使用的是什么语言,所以这可能是也可能不是)。
最后,考虑使用Oracle导入/导出工具为每次集成测试运行完全重建数据库。这可能比尝试删除您创建的任何行更快,也更稳定(这假设您的集成测试从预先填充的数据开始;如果不是,只删除并重新构建模式)。
https://stackoverflow.com/questions/1917053
复制相似问题