将Ofbiz的数据库改为Oracle,运行时出现 ORA-01843: 无效的月份 错误 的原因及解决方法

原创 2007年10月16日 00:02:00

本人在安装ofbiz的过程中将数据库改为Oracle 在运行结果出现错误:

org.ofbiz.entity.GenericDataSourceException: Generic Entity Exception

occured in updateByCondition (SQL Exception while executing the

following:UPDATE OFBIZ.JOB_SANDBOX SET RUN_BY_INSTANCE_ID = ?, STATUS_ID = ?

WHERE ((RUN_TIME <= '2005-08-20 19:34:52.0' AND START_DATE_TIME IS NULL AND

CANCEL_DATE_TIME IS NULL AND RUN_BY_INSTANCE_ID IS NULL) AND (POOL_ID IS

NULL OR POOL_ID = 'pool')) (ORA-01843: not a valid month

经过很长时间的搜索和尝试终于找到了解决方法:

以sys用户登陆并创建Trigger:

create or replace TRIGGER ON_CONNECT AFTER LOGON ON DATABASE
DECLARE
guser varchar2(30);
begin
SELECT sys_context('USERENV','SESSION_USER') into guser FROM dual;
if (guser='ofbiz' or guser='OFBIZ') THEN
EXECUTE IMMEDIATE 'alter session set nls_timestamp_format = ''YYYY-MM-DD HH24:MI:SS.FF''';
end if;
end;

注意对登陆用户名的判断必须大小写都要考虑.

而且要确定登陆的用户不能有dba等系统管理的的权限,因为有dba等系统管理的权限的用户对AFTER LOGON ON DATABASE类型的触发器不起作用(很多初学者会图省事直接附给用户(ofbiz)dba的权限).详细原因见下面的说明:

登陆触发器AFTER LOGON ON DATABASE对具有DBA权限的不起作用:
现在假设已经创建了一个SCOTT模式,下面来看看如何保护该模式。在Oracle 10g这个版本之前,在创建SCOTT模式后,一般都可以通过“tiger”这个众所周知的密码进行访问,而且账号也不会被锁定。
假设需要做的是在维护SCOTT模式中数据的同时,仍然需要阻止用户登录这个账号。在Oracle 9i及其之后的版本中,可以通过锁定账号实现这一目的;这里,则是利用一些其他的措施对这个方法进行一定的扩展。首先,建立数据库登录触发器以阻止某些用户登录SCOTT模式:
sec_mgr@KNOX10g
> CREATE OR REPLACE TRIGGER logon_check
2 AFTER LOGON ON DATABASE
3 BEGIN
4 IF (SYS_CONTEXT ('USERENV', 'SESSION_USER') = 'SCOTT')
5 THEN
6 raise_application_error (-20001,
7 'Unauthorized Login');
8 END IF;
9 END;
10 /
Trigger created.
当试图连接SCOTT模式时,会产生如下结果:
sec_mgr@KNOX10g
> conn scott/tiger
ERROR:
ORA-00604: error occurred at recursive SQL level 1
ORA-20001: Unauthorized Login
ORA-06512: at line 4
Warning: You are no longer connected to ORACLE.
在利用登录触发器这个方法时,需要补充说明两点:首先,虽然登录触发器有助于增加一定的安全性,但登录触发器会拒绝每一位试图登录的用户,从而会增加登录数据库的连接时间。在上述的例子中,可能不会感觉到连接时间的增加,但是,如果触发器代码需要查询表或者进行内部调用,那么时间的增加将会非常明显,从而使这个措施成为不可承受的解决办法。
当数据库登录触发器最初在Oracle 8i发布时,触发器会抛出异常从而阻止用户的登录,一般情况下,抛出的异常既非用户可以干预的,又不能合适地对其进行处理,所产生的结果就是所有的用户都不能登录数据库。而惟一能使用户重新登录数据库的方法是利用SYSDBA(外部的)建立连接,然后撤销或禁用登录触发器。
为了防止出现这种非故意的不能登录的情况,在Oracle 9i数据库中作了改变:即使登录触发器抛出了异常,也不能阻止拥有ADMINISTER DATABASE TRIGGER系统权限的用户登录。这个权限被授予了DBA角色,所以任何拥有DBA角色的用户都可以绕过登录触发器。可以利用以下查询代码来决定谁可以避免登录触发器抛出异常,而查询的结果将会列出被授予上述权限的用户和角色:
SELECT grantee
FROM dba_sys_privs
WHERE PRIVILEGE = 'ADMINISTER DATABASE TRIGGER';
GRANTEE
------------------------------
DBA
SYS
XDB
MDSYS
WKSYS
CTXSYS
IMP_FULL_DATABASE

PLSQL中改日期时报错ORA-01843无效的月份

造成ORA-01843 无效的月份的一些原因 1)当我们在一个中文环境的客户端使用如下sql语句 INSERT INTO "temptable" ( DELIVER_DATE ) VALUES ...
  • yansong_8686
  • yansong_8686
  • 2013年04月23日 17:34
  • 2604

造成ORA-01843 无效的月份 的一些原因

转自:http://www.cnblogs.com/rootq/archive/2009/05/16/1458090.html 1) 当我们在一个中文环境的客户端使用如下sql语句 INSERT ...
  • fzxy002763
  • fzxy002763
  • 2013年08月21日 19:36
  • 1070

造成ORA-01843 无效的月份 的一些原因

1) 当我们在一个中文环境的客户端使用如下sql语句INSERT INTO "temptable" ( DELIVER_DATE ) VALUES (TO_DATE('27-Jun-2007 15:5...
  • zhangchen124
  • zhangchen124
  • 2017年02月20日 22:22
  • 205

android将library发布至jcenter的趟坑之路

最近接手了一个sdk的任务,虽然原有任务已经比较多了,哈哈哈。一般sdk让别人用可以打成jar包,但是如果是有资源文件的就不行了,就可能需要打成aar包让别人依赖了,但是这有个不好的地方每次自己的sd...
  • submit66
  • submit66
  • 2017年04月09日 22:41
  • 1936

JBPM引擎设计(1)

1、命令模式在Jbpm的使用,有助于管理各命令的执行,也方便方便接口处理,如下: protected int getJobCount() { return processEngine.exe...
  • wodestudy
  • wodestudy
  • 2014年02月21日 00:14
  • 1596

.net应用监控类库Metrics.NET之Meters

Meters用来记录事件发生的频率,引用《Java library documentation》: Meters通过几种不同的方式来测量事件的发生频率。平均频率是事件频率的平均值。这对细节通常是...
  • wangshiwei1105
  • wangshiwei1105
  • 2018年01月15日 00:33
  • 47

oracle 11g导出遇到的问题总结

最近,单位刚升级了数据库,由oracle 10g升级到11.2.0.3
  • u011622050
  • u011622050
  • 2014年05月27日 13:05
  • 1889

【WINDOWS环境 React Native学习】React Native移植原生Android项目及其各种奇葩Bug解决

【WINDOWS环境 React Native学习】React Native移植原生Android项目及其各种奇葩Bug解决,你有多少坑?...
  • eric_niezhangyu
  • eric_niezhangyu
  • 2016年07月08日 15:53
  • 3284

Proguard混淆Android项目所遇问题及总结

Proguard混淆Android项目所遇问题及总结 最近一个老项目需要添加混淆, 因此又对混淆有了更深入的了解. 在此过程中遇到了一下问题, 记录如下:  1. 编译打包错误 a. 类重复, 错...
  • voo00oov
  • voo00oov
  • 2015年11月19日 17:39
  • 9478

java+Spring+mybatis 查询sql报错:无效的序列号!

java+Spring+mybatis+lucens+达梦数据库。应该能判断和数据库和lucen没关系。 问题:like '%"#{title}"%'  解决方法:like '%'||#{...
  • lishufenggreat
  • lishufenggreat
  • 2015年03月24日 16:00
  • 1575
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:将Ofbiz的数据库改为Oracle,运行时出现 ORA-01843: 无效的月份 错误 的原因及解决方法
举报原因:
原因补充:

(最多只允许输入30个字)