Oracle RESTful数据服务配置 - 保持extproc活着

时间:2015-05-27 11:35:59

标签: oracle

我们正在使用带有.Net存储过程的Oracle数据库。为此,Oracle TNS配置中有一个“EXTPROC”条目,用于处理.Net过程的请求。

当我尝试直接从数据库通过SQLDeveloper访问这样的过程时,会创建extproc进程(如果尚未存在),然后保持活动状态,这是按预期工作的,因为它在Windows注册表中以这种方式配置。 / p>

但是,当我通过ORDS,Oracle RESTful Data Services路由呼叫时,它会生成一个新的extproc实例进程(对于每个请求),并在提供请求后关闭extproc进程。 这使得调试变得非常困难(因为我无法通过远程调试器连接到进程)并且也是一个很大的性能损失,甚至将简单的请求持续时间从50ms增加到4秒。

它在11g数据库上按预期工作,现在它在12c上运行。

ORDS 2.10中是否存在已知问题或我尚未看到的可以解决此问题的配置?

1 个答案:

答案 0 :(得分:2)

ORACLE REST数据服务是无状态的(与HTTP协议一样),这意味着每个HTTP请求都从池中检索数据库连接,执行请求,并在完成后返回与池的连接。

这有利于可伸缩性,许多客户端可以共享有限的连接池,每个客户端仅在相应HTTP请求的持续时间内保持连接,在每个HTTP请求结束时重置连接。 20个连接池可以提供成百上千的HTTP请求。

SQL Developer是有状态的,当您在SQL Developer中创建连接时,SQL Developer将保持连接,直到您关闭连接或数据库将您踢出。如果为了争论你的数据库一次只能接受20个连接,那么如果20个人正在使用SQL Developer而21个人试图连接,那么他们就不走运了。

请注意,重要的是ORDS在完成后重置'每个连接并将其返回到池中。如果没有这样做,那么跨请求就会出现信息泄漏,一个请求可能会看到属于先前状态的状态,这可能会导致错误或构成安全漏洞。

我猜测(我从未尝试过外部存储过程),这种会话状态的重置会影响EXTPROC状态,并导致为每个ORDS请求创建进程。

除了在PL / SQL中重新实现该过程之外,我没有看到解决方法。