管理外部程序的流程
本部分包含:
- 关于外部程序
- DBA任务来启用外部过程调用
关于外部程序
外部程序是用C,C ++,Java或其他语言编写的程序,编译并存储在数据库之外,然后由用户会话调用。例如,PL / SQL程序单元可以调用执行特殊用途处理所需的一个或多个C例程。
这些可调用的例程存储在动态链接库(DLL)中,或者在Java类方法的情况下存储在libunit中,并且使用基本语言进行注册。 Oracle数据库提供了一个特殊用途界面,即调用规范(调用规范),使用户可以用其他语言调用外部过程。
当用户会话调用外部过程时,数据库会启动数据库主机上的外部过程代理。代理的默认名称是extproc。每个会话都有自己的专用代理。当会话终止时,数据库终止其代理。
用户应用程序将外部过程代理传递给DLL或libunit的名称,外部过程的名称以及任何相关参数。然后,外部过程代理加载DLL或libunit,运行外部过程,并将外部过程返回的任何值传回应用程序。
Oracle数据库高级应用程序开发人员指南“中有关外部过程的信息
DBA任务来启用外部过程调用
启用外部过程调用可能涉及以下DBA任务:
- 配置侦听器以启动extproc代理
默认情况下,数据库启动extproc进程。在以下情况下,您必须更改此默认配置,以便侦听器启动extproc进程:
。你想使用多线程的extproc代理
。数据库在Windows上以共享服务器模式运行
。LIBRARY规范中的AGENT子句或PROCEDURE或FUNCTION规范中的AGENT IN子句将外部过程重定向到不同的extproc代理
有关更改默认配置的说明,请参见“Oracle数据库高级应用程序开发人员指南”的“使用多种编程语言开发应用程序”一章中标题为“设置环境”的小节。 - 管理库或授予与管理库有关的特权
数据库要求通过名为库的模式对象访问DLL。出于安全目的,默认情况下,只有具有DBA角色的用户才能创建和管理库。因此,您可能会被要求:
。使用CREATE LIBRARY语句来创建开发人员需要的库对象。
。将以下权限授予开发人员:CREATE LIBRARY,CREATE ANY LIBRARY,ALTER ANTER LIBRARY,EXECUTE ANY LIBRARY,and EXECUTE ON library_name。
只能将这些特权明确授予受信任的用户,而不能授予PUBLIC角色。如果您打算创建PL / SQL接口到库,那么只需授予PL / SQL接口的EXECUTE特权。不要在底层库上授予EXECUTE。您必须具有库的EXECUTE对象特权才能创建PL / SQL接口。但是,用户在他们自己的模式中自动拥有此权限。很少需要显式授予库上的EXECUTE对象权限。
Oracle数据库PL / SQL语言参考了解有关CREATE LIBRARY语句的信息
参考资料
https://docs.oracle.com/cd/E11882_01/server.112/e25494/manproc.htm#ADMIN00501