Oracle12c credential
原创作者 :
如人饮水冷暖自知

殷谦的《天廷秘传》中有这样一段话:太阳星系及仙女星系乃银河星系之卫,太阳星系於银河星系之左,其所水、木、火、金、土等五大星球分形连气,填卫地球。此故谓五行元气,元气乃阴阳交替,互为生克。五行生克:木乃始;水乃终;土乃中。故而木生火,火生土,土生金,金生水,水生木;水克火,火克金,金克木,木克土,土克水。六合之内,万千世界千变万化,千姿百态;五星相生相克,轮回循环,万物生灵负阴抱阳,生生不息。
生生不息是生命的延续,也是人类文明逐步发展的奠基,自从Oracle 10gR1开始引入自动任务作业DBMS_SCHEDULE功能以来,不仅代替了传统的DBMS_JOB而且每个版本都对其进行了增强。在Oracle12C中,自动任务作业得到了进一步升华,生生不息,一直延续着易用性和可扩展性的技术实现。


1.DBMS_CREDENTIAL包提供了一个接口,用于验证和模拟EXTPROC调出函数,以及来自调度程序的外部作业、远程作业和文件监视程序,这个API本身并不难稍后我们会详细解读各个子程序包,为了深究技术,我们来聊聊这个所谓的验证和模拟EXTRROC究竟什么意思。
2.首先我们明确oracle的External Procedures概念,以及如何Loading External Procedures
2.1外部过程与调用者不在相同的进程和地址空间中运行。Oracle为它们创建单独的进程,以安全的方式进行操作。为此,使用Oracle Net Services特性就是其中一种EXTPROC延伸扩展,例如监听配置信息:

注意:
listener.ora中,是oracle为调用外部程序默认配置的监听,它的名字通常是ExtProc或PLSExtProc,但一般不会使用它,可以直接从listener.ora中将这项移除,因为对ExtProc已经有多种攻击手段了,在不使用外部程序时,oracle也是建议删除的,PLSExtPro实际就是pl/sql external procdure,简单说就是我们通过PL/SQL调用c java等语言的过程。
3.又例如trsnames.ora文件中对于外部程序访问的信息:

4.例如BS2000环境中的DLL是包含称为外部过程的函数的modlib。在加载EXTPROC时,这些函数被动态绑定到程序中。
例如下面的语法:CREATE LIBRARY my_c_library AS '$myuserid.my-modlib';
5.又例如在 Oracle 中,ST_Geometry 的 SQL 函数使用通过 Oracle 外部过程代理(即 extproc)访问的共享库。Oracle 需要访问物理库文件,才能从 SQL 客户端执行 ST_Geometry 函数,这是oracle空间数据库的连接办法。
6.又例如oracle oci接口,基于原生“C”语言的 Oracle 数据库接口,它可以提供 Oracle 数据库的全部功能。OCI 为构建各种语言专用接口
(如 Oracle JDBC-OCI、ODP.Net、Oracle 预编译器、Oracle ODBC 和 Oracle C++ Call Interface (OCCI)驱动程序等等。
7.简单的说EXTPROC就是外部程序调用,oracle通过监听方式允许外部程序访问到oracle数据库,为什么这个EXTPROC我们介绍了老半天,一会大家就了解了,我们言归正传。



1.CREATE_CREDENTIAL语法规则:

注意:
1.credential驻留在特定的模式中,任何具有CREATE CREDENTIAL or CREATE ANY CREDENTIAL的用户都可以创建credential。要在自己的模式之外的模式中创建credential,您必须拥有create credential或CREATE ANY CREDENTIAL权限。
2.用户名区分大小写。它不能包含双引号或空格。
3.尝试使用现有credential名称创建credential将返回错误。要更改现有credential,我们必须首先使用DROP_CREDENTIAL过程删除现有credential。试图删除现有凭据。
2.范例:
2.1创建credential:

2.2数据字典验证:

3.DISABLE_CREDENTIAL语法规则:

4.DROP_CREDENTIAL Procedure
5.ENABLE_CREDENTIAL Procedure
6.UPDATE_CREDENTIAL Procedure
注意:
第4 5 6就不细致介绍了,非常的简单,根据credential_name做具体操作即可,同时可以关注oracle
官网:
https://docs.oracle.com/database/121/ARPLS/d_credential.htm#ARPLS73739



1.满足如下权限即可



实
战
实战案例1:
背景:
我们通常在标准shell脚本中调度expdp作业。但是也可以使用dbms_scheduler实用程序实现同样的目的。下面是调度expdp作业的步骤。
在这里,我们将计划数据库的完整expdp备份,该备份将在每天11:30运行,这里我分享给大家两种方式,不是服务端的expdp方式,一种是封装的package方式,一种是利用CREDENTIAL任务实现的方式
1.利用DATAPUMP方式源码如下:








2.利用credential调度expdp parfile的方法如下:
2.1首先准备一个parfile文件,代码如下:

2.2创建credential

2.3开启scheduler任务作业:

2.4监控具体的job作业:

注意:
1.EXTERNAL_SCRIPT的JOB_TYPE类似于可执行作业,只是它允许动态构建脚本并将其作为JOB_ACTION运行,就像它是一个现有的shell脚本一样。它还可以通过在JOB_ACTION参数中指定脚本的完整文件系统路径来运行现有脚本。
2.在Windows服务器上,脚本使用exe可执行文件运行。在UNIX/Linux服务器上,脚本使用sh运行。

实
战
实战案例2:
1.使用shell脚本创建作业


实
战
实战案例3:
1.sqlplus脚本


实
战
实战案例4:


实
战
实战案例5:
1.BACKUP_SCRIPT的JOB_TYPE将指定的作业作为RMAN脚本运行,而不需要手动向操作系统shell运行RMAN。JOB_ACTION可以指定内联备份脚本,也可以指定数据库服务器文件系统上备份脚本的完整路径。


实
战
实战案例6:
1.这对于在作业运行期间诊断问题非常有用,特别是在动态创建的脚本作业中。它们可以让我们不必使用DBMS_SCHEDULER。GET_FILE过程从外部作业返回。

总结:
1.DBMS_SCHEDULER包中与CREDENTIAL相关的子程序已经被弃用,并被新的DBMS_CREDENTIAL 包所替代。从使用的角度来看,它们感觉很相似。
2.通过DBMS_CREDENTIAL包我们可以很轻松的执行EXTPROC作业,包括shell脚本,rman备份脚本,sqlplus脚本,expdp/impdp等作业脚本。













