00 22 * * 6 /proprd/oracle/dbawork/utils/bin/DbAnalyze -d PROPRD1 -f DbAnalyze_PROPRD1_1.cfg 2>&1 1> /tmp/DbAnalyze1.log
您可以看到,以下作业:
- 运行一个名为 /proprd/oracle/dbawork/utils/bin/DbAnalyze -d PROPRD1 -f DbAnalyze_PROPRD1_1.cfg 的程序。
- 在每周六午夜零点 22 分运行
- 将输出写入文件 /tmp/DbAnalyze1.log
现在,为将该作业转换为一个 Scheduler 工作,您将使用下列代码段: 1 BEGIN
2 DBMS_SCHEDULER.create_job
3 (job_name => 'Dbanalyze',
4 repeat_interval => 'FREQ=WEEKLY; BYDAY=SAT BYHOUR=0 BYMINUTE=22',
5 job_type => 'EXECUTABLE',
6 job_action => '/proprd/oracle/dbawork/utils/bin/DbAnalyze -d
PROPRD1 -f DbAnalyze_PROPRD1_1.cfg',
7 enabled => TRUE,
8 comments => 'Anlyze'
9 );
10 END;
该过程的参数具有自我说明性;日历语法与英语几乎相同。(有关 Scheduler 的更多详细信息,请参阅此 OTN 文章或我撰写的图书 Oracle PL/SQLfor DBA (O'Reilly Media,2005)
既然功能强大的 cron 可供使用,为什么还要为 Scheduler 而费心呢?实际上,原因是多方面的:
- 仅当数据库可用时 Scheduler 才运行作业,这是支持以数据库为中心的作业的一大特性。您不必为检查数据库是否打开而担心。
- 各个 OS 之间的 Scheduler 语法是一致的。如果要移植,只需将代码移动到新的服务器上即可,并且只需执行一个非常简单的导出导入操作便可以启用您的计划作业。
- 与对象一样,Scheduler 作业归用户所有,这使您可以实现更好级别的权限(例如,由不同的用户执行一项作业),这一点与 cron不同,后者通常是由单个 Oracle 软件拥有者帐户使用的。
- 最值得称道的是,由于您不必在任何位置设置口令,因此并不存在意外泄露口令的风险。由于口令未存储在任何位置,因此即使 SYS 用户也无法知道用户的口令。此功能使 Scheduler 这一工具对于安全地管理 DBA(或常规用户的)的工作极具吸引力。
- 此外,您不必担心所做的更改,如用户口令更改。
可能的影响 无,只要作业与数据库相关。有一点可以肯定的是,即使当数据库不可用时,某些作业也必须运行 - 例如,将警报日志移动到不同的位置或检查数据库是否启动并正在运行的作业。这些作业应位于数据库的外部以及 cron 的内部。
操作计划
- 标识 cron 中的数据库作业。
- 确定即使在数据库关闭时仍应运行的工作(例如:每天将监听器日志移动到其他位置的作业)
- 对于其余的作业,创建 Scheduler 作业,这些作业最初通过在 CREATE_JOB 过程中声明 ENABLED=FALSE 而被禁用。
- 使用 dbms_scheduler.run_job() 过程测试作业的执行情况。
- 如果成功,则关闭 cron 作业并使用 dbms_scheduler.enable() 过程启用 Scheduler 作业。
3.4 锁定对象
背景 程序包、过程、函数、类型主体以及对象方法等编程对象包含企业的业务逻辑。对它们所做的任何改动都可能会影响总体处理逻辑,并且根据其配置情况,对生产系统的影响可能是灾难性的。
许多企业通过实施一个安全的更改-控制过程来解决此问题。在此过程中,更改首先经过讨论和审批(理想情况下在至少两个人之间进行),然后才能实施。所面临的难题是让系统自动运行,这实际上也是许多辖区和行业中的要求。 策略 这个安全的更改-控制过程可以按照以下方式运行:
- 应用程序超级拥有者(如果需要,可以是 DBA)将要更改的程序“解锁”
- 应用程序拥有者更改程序主体
- 超级拥有者锁定程序
(编辑:aniston)
|