Quartz 2.2.2:org.quartz.impl.jdbcjobstore.LockException:无法获取数据库行锁:ORA-00942:表或视图不存在

时间:2019-06-16 08:14:45

标签: oracle quartz-scheduler oracle-adf quartz

我正在使用Quartz Scheduler 2.2.2。

我已经在Oracle数据库中创建了一个名为“ SCHEDULER_DEV”的模式。

  

通过SCHEDULER_DEV默认身份创建用户SCHEDULER_DEV   桌面用户临时桌面空间配额不受用户限制

我在下面为此模式提供了赠款-创建/更改会话,创建表,视图,序列,同义词,类型和过程。

在qrtz_locks表中,我添加了2个条目:

  

插入QRTZ_LOCKS(SCHED_NAME,LOCK_NAME)   VALUES('QuartzScheduler','STATE_ACCESS');

     

插入QRTZ_LOCKS(SCHED_NAME,LOCK_NAME)   VALUES('QuartzScheduler','TRIGGER_ACCESS');

我的web.xml配置如下:

*>

    <listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class>
</listener>
<context-param>
    <param-name>config-file</param-name>
    <param-value>quartz.properties</param-value>
</context-param>
<context-param>
    <param-name>shutdown-on-unload</param-name>
    <param-value>true</param-value>
</context-param>
<context-param>
    <param-name>wait-on-shutdown</param-name>
    <param-value>true</param-value>
</context-param>
<context-param>
    <param-name>start-on-load</param-name>
    <param-value>true</param-value>
</context-param>
<context-param>
    <param-name>start-delay-seconds</param-name>
    <param-value>10</param-value>
</context-param>*

*

我的crystal.properties文件包括以下内容以及其他键值对:

  

org.quartz.scheduler.instanceName = QuartzScheduler   org.quartz.jobStore.dataSource = SchedulerDS   org.quartz.jobStore.tablePrefix = SCHEDULER_DEV.QRTZ_   org.quartz.dataSource.SchedulerDS.jndiURL = jdbc / schedulerds   org.quartz.dataSource.SchedulerDS.java.naming.factory.initial = weblogic.jndi.WLInitialContextFactory

运行页面时,出现以下错误:

  

          

    

org.quartz.impl.jdbcjobstore.LockException:无法获取数据库行锁:ORA-00942:表或视图不存在[请参见嵌套     异常:java.sql.SQLSyntaxErrorException:ORA-00942:表或视图     不存在]     org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:157)       在     org.quartz.impl.jdbcjobstore.DBSemaphore.obtainLock(DBSemaphore.java:113)       在     org.quartz.impl.jdbcjobstore.JobStoreSupport.doCheckin(JobStoreSupport.java:3270)       在     org.quartz.impl.jdbcjobstore.JobStoreSupport $ ClusterManager.manage(JobStoreSupport.java:3870)       在     org.quartz.impl.jdbcjobstore.JobStoreSupport $ ClusterManager.run(JobStoreSupport.java:3907)

  

2 个答案:

答案 0 :(得分:0)

我的客人问题是您的配置在这里: org.quartz.jobStore.tablePrefix = SCHEDULER_DEV.QRTZ _

尝试更改为:org.quartz.jobStore.tablePrefix = QRTZ_并告诉我是否可行。

P / s:如果您使用其他Oracle模式,请检查您是否对石英表的SCHEDULER_DEV具有授予权限(选择,更新,插入,删除)。

答案 1 :(得分:0)

我也遇到了这个问题,我可以将您指向该类并将调试器放入类 StdRowLockSemaphore 和

     ps = conn.prepareStatement(expandedSQL);
     ps.setString(1, lockName);

我认为如果您检查锁名称和 SQL,您将能够找出它正在访问哪个表,在我的情况下,我有这些属性 (org.quartz.jobStore.tablePrefix=QRTZ2_)效果是因为我们想用 2+ 的版本来识别它们