当前位置: 首页 > 科技观察

如何在Oracle中配置和运行外部存储过程

时间:2023-03-16 14:55:26 科技观察

概述Oracle数据库的外部存储过程特性提供了用C语言(或其他可以通过C调用的语言)实现代码逻辑,然后在其中运行的功能通过PLSQL访问数据库。怎么做?首先,需要编译C代码,然后需要从中创建共享库文件(.so)或动态链接库(DLL)(在Windows的情况下)。需要在数据库中创建库对象以从PLSQL代码中引用此共享库文件或DLL。库需要通过调用规范发布,使用特殊语法,例如CREATEORREPLACE语句的IS|ASLANGUAGE子句。换句话说,它只是一个PLSQL包装器(也称为外部过程)单元,它告诉需要调用什么库以及需要运行库中的哪个函数。Oracle数据库提供了一个“extproc”代理来促进Oracle和共享库之间的通信。代理加载库,将任何(如果有)参数传递给库,运行它并将结果返回给调用会话。extproc代理是如何配置的?有几种方法可以配置extproc代理。使用默认配置,每次调用外部存储过程时,Oracle数据库都会创建一个代理。编辑listener.ora和tnsnames.ora以创建覆盖默认配置的侦听器配置。在这种情况下,extproc是在每次调用外部存储过程时由侦听器创建的。使用多线程extproc代理或使用AGENTIN语句定义库时,必须使用监听器创建的代理。Oracle数据库和监听器创建的代理都是独立的代理。也就是说,Oracle数据库和监听器都创建了独立的代理,如果大量使用外部存储过程会影响性能。这可以通过配置多线程代理(MTA)来解决。MTA模式在MTA模式下,您可以指定在任何给定时间点运行的extproc代理程序的最大数量。请求由基于负载的多线程代理获取和服务。可以使用“agtctl”工具配置MTA。