管理外部程序的流程

本部分包含:

  • 关于外部程序
  • 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

posted @ 2018-05-16 15:39  ZeroTiny  阅读(315)  评论(0编辑  收藏  举报