知识大全 Oracle中通过命令行实现定时操作详解

Posted 数据库

篇首语:农村四月闲人少,勤学苦攻把名扬。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle中通过命令行实现定时操作详解相关的知识,希望对你有一定的参考价值。

Oracle中通过命令行实现定时操作详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Oracle中通过命令行实现定时操作详解 Oracle中通过命令行实现定时操作详解 Oracle基础

  众所周知 一般操作系统会提供定时执行任务的方法 例如 Unix平台上提供了让系统定时执行任务的命令Crontab 但是 对于某些需求 例如 一些对数据库表的操作 最为典型的是证券交易所每日收盘后的结算 它涉及大量的数据库表操作 如果仍然利用操作系统去定时执行 不仅需要大量的编程工作 而且还会出现用户不一致等运行错误 甚至导致程序无法执行

  一 分析问题

  事实上 对于以上需求 我们可以利用数据库本身拥有的功能Job Queue(任务队列管理器)去实现 任务队列管理器允许用户提前调度和安排某一任务 使其能在指定的时间点或时间段内自动执行一次或多次 由于任务在数据库中被执行 所以执行效率很高

  任务队列管理器允许我们定制任务的执行时间 并提供了灵活的处理方式 还可以通过配置 安排任务在系统用户访问量少的时段内执行 极大地提高了工作效率 例如 对于数据库日常的备份 更新 删除和复制等耗时长 重复性强的工作 我们就可以利用任务队列管理器去自动执行以减少工作量

  目前 拥有此项功能的数据库有许多 最有代表性的是SQL Server Oracle 等 但是 要让任务队列管理器工作 还需要我们加以配置才能实现 SQL Server的功能配置是在一个图形化界面(GUI)中实现的 非常简单 利用OEM客户端管理工具 Oracle的配置也可以在一个图形界面中完成 然而大多数的用户更习惯于命令行的方式去操纵数据库 本文介绍如何通过命令行实现这种配置

  二 实现步骤

   .确保Oracle的工作模式允许启动任务队列管理器

  Oracle定时执行 Job Queue 的后台程序是SNP进程 而要启动SNP进程 首先要确保整个系统的模式是可以启动SNP进程的 这需要以DBA的身份去执行如下命令

  svrmgrl> alter system enable restricted session;   或sql> alter system disenable restricted session; 

  利用如上命令更改系统的会话方式为disenable restricted 为SNP的启动创造条件

   .确保Oracle的系统已经配置了任务队列管理器的启动参数

  SNP的启动参数位于Oracle的初始化文件中 该文件放在$ORACLE_HOME/dbs路径下 如果Oracle的SID是myora 的话 则初始化文件就是initmyora ora 在文件中对SNP启动参数的描述部分如下

  job_queue_process=n   job_queue_interval=N 

  第一行定义SNP进程的启动个数为n 系统缺省值为 正常定义范围为 ~ 根据任务的多少 可以配置不同的数值

  第二行定义系统每隔N秒唤醒该进程一次 系统缺省值为 秒 正常范围为 ~ 秒 事实上 该进程执行完当前任务后 就进入睡眠状态 睡眠一段时间后 由系统的总控负责将其唤醒

  如果该文件中没有上面两行 请按照如上配置添加 配置完成后 需要重新启动数据库 使其生效 注意 如果任务要求执行的间隔很短的话 N的配置也要相应地小一点

   .将任务加入到数据库的任务队列中

  调用Oracle的dbms_job包中的存储过程 将任务加入到任务队列中

  dbms_job submit( job out binary_integer   what       in   archar   next_date     in   date   interval     in   varchar   no_parse     in   boolean) 

  其中

  ●job 输出变量 是此任务在任务队列中的编号

  ●what 执行的任务的名称及其输入参数

  ●next_date 任务执行的时间

  ●interval 任务执行的时间间隔 下面详细讨论一下dbms_job submit中的参数interval 严格地讲 interval是指上一次执行结束到下一次开始执行的时间间隔 当interval设置为null时 该job执行结束后 就被从队列中删除 假如我们需要该job周期性地执行 则要用 sysdate+m 表示

  将任务加入到任务队列之前 要确定执行任务的数据库用户 若用户是scott 则需要确保该用户拥有执行包dbms_job的权限 若没有 需要以DBA的身份将权利授予scott用户

  svrmgrl> grant execute on dbms_job to scott; 

   .将要执行的任务写成存储过程或其他的数据库可执行的pl/sql程序段

  例如 我们已经建立了一个存储过程 其名称为my_job 在sql/plus中以scott用户身份登录 执行如下命令

  sql> variable n number;   sql> begin   dbms_job submit(:n my_job; sysdate    sysdate+ / );   mit;   end;   / 

  系统提示执行成功

  Sql> print :n; 

  系统打印此任务的编号 例如结果为

  如上 我们创建了一个每隔 分钟执行一次的任务号为 的任务 可以通过Oracle提供的数据字典user_jobs察看该任务的执行情况

  sql> select job next_date next_sec failures broken from user_jobs; 

  执行结果如下

  job next_date next_sec failures broken / / : : N 

  这表示任务号为 的任务 下一次将在 / / : : 执行 此任务的执行失败记录为 次 注意 当执行job出现错误时 Oracle将其记录在日志里 失败次数每次自动加 当执行失败次数达到 时 Oracle就将该job标志为broken 此后 Oracle不再继续执行它 直到用户调用过程dbms_job broken 重新设置为not broken 或强制调用dbms_job run来重新执行它

cha138/Article/program/Oracle/201311/17096

相关参考

知识大全 PowerBuilder命令行编译详解[1]

PowerBuilder命令行编译详解[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  公司

知识大全 windows XP 系统中通过开始菜单中的“运行”命令一定要输入程序的详细路径么

windowsXP系统中通过开始菜单中的“运行”命令一定要输入程序的详细路径么?还是也可以只输入程序名?  以下文字资料是由(本站网www.cha138.com)小编为大

知识大全 Oracle服务器常用命令行工具一览

Oracle服务器常用命令行工具一览  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ()数据库管

知识大全 详细讲解Oracle服务器的常用命令行

详细讲解Oracle服务器的常用命令行  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!数据库管理相关

知识大全 ASP 中通过OLEDB访问Oracle的代码

ASP中通过OLEDB访问Oracle的代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  系统

知识大全 ASP 中通过OLEDB访问 Oracle 的代码

ASP中通过OLEDB访问Oracle的代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  系统

知识大全 cmd命令行模式

  Oracle数据导入导出imp/exp就相当于oracle数据还原与备份exp命令可以把数据从远程数据库服务器导出到本地的dmp文件imp命令可以把dmp文件从本地导入到远处的数据库服务器中利用这

知识大全 入侵oracle数据库时常用的操作命令整理

  最近遇到一个使用了Oracle数据库的服务器在狂学Oracle+请教高手后终于搞到了网站后台管理界面的所有用户密码我发现Oracle操作起来真是太麻烦为了兄弟们以后少走些弯路我把入侵当中必需的命令

知识大全 Oracle数据库数据操作和控制语言详解

Oracle数据库数据操作和控制语言详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  SQL语

知识大全 Oracle10G关于表操作常用语句详解及随想

Oracle10G关于表操作常用语句详解及随想  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最