ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 解决PL/SQL Developer下ORA-01843 not a valid month错误

解决PL/SQL Developer下ORA-01843 not a valid month错误

原创 Linux操作系统 作者:lnwxzyp 时间:2011-07-28 15:43:08 0 删除 编辑
        由于前一段时间犯了一个错误,对一个达到99%的表空间没有提出预警,造成生产事务一度中断,因此受到口头警告,后来想了一下还是决定把所有表空间的信息记录到一个表里面,然后对表进行检查,监控超过90%以上占用率并且日增长环比较高的表空间,这个脚本完成之后,一直是在fedora下进行记录,然后这段时间据说要改用插件认证的方式来访问内网,而插件认证必须得要windows的系统,不得已,为了保证在换成windows后不至于手足无措决定提前适应windows的环境,于是就把脚本都迁移到了win7,在win7上用virtualbox创建了一个 虚拟机OEL5.5然后安装oracle10g打了10205的补丁,可是在实际操作过程当中,由于虚拟机里面的oracle日期格式 nls_date_format是 DD-MON-RR,而win7的oracle client由于是中文环境,同时使用PL/SQL Developer来作为编辑、执行语句的工具,一执行插入语句就会报无效的月份
INSERT INTO TABLESPACE_MONITOR VALUES ('192.168.1.139','ibss','27-JUL-11','TBS_IDX_B3',0,0,'0.00%','Permanent','OFFLINE');
27-JUL-11
重点就是这里,这个当然还是日期格式的问题造成的,于是在PL/SQL Developer里面修改了NLS Options,修改date选项为 DD-MON-RR可以执行语句还是报无效的月份,于是执行语句查看结果
SQL> select sysdate from dual; 
SYSDATE
-----------
28-7O2-RR 4:03:12 PM
发现结果还是有问题,继续修改,改为DD-MMM-RR 这个是PL/SQL Developer里面oracle默认的格式不知道为何是MMM,姑且不管,改好后再来看
SQL> select sysdate from dual; 
SYSDATE
-----------
28-Jul-11 4:05:36 PM
然后再次执行,依然是同样的错,将NLS Options下的time选项改为空白,继续执行
SQL> select sysdate from dual; 
SYSDATE
-----------
28-Jul-11
看到格式跟我的一致了,心想这下总该对了吧,继续执行还是报错,然后将语句更换成中文月份
INSERT INTO TABLESPACE_MONITOR VALUES ('192.168.1.139','ibss','27-7月 -11','TBS_IDX_B3',0,0,'0.00%','Permanent','OFFLINE');

结果就提示已插入1行,看来问题很明了,是PL/SQL Developer采用的nls_lang的问题,可是在那里改呢?由于还要做检查,只好先用sqlplus来插入语句了,结果sqlplus也是同样的错误,于是打开注册表将oracle的NLS_LANG给修改了一下
找到HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient10g_home1下的NLS_LANG键值,(首先备份一下,修改注册表做备份是一个好习惯,不然出了什么问题,后悔可就来不及了)原有的键值为“SIMPLIFIED CHINESE_CHINA.ZHS16GBK” 然后改为“AMERICAN_AMERICA.ZHS16GBK” 然后在用sqlplus登陆虚拟机下的数据库,这里使用了简单连接
sqlplus scott/tiger@192.168.56.101:1521/demo
然后执行插入语句就没有问题了。
        日常的工作完成之后,再回过头来解决PL/SQL Developer的问题,毕竟还是它用起来方便一些啊。继续看PL/SQL Developer=>tool=>Preference=>Appearance里面发现有一个language选项,但下拉框显示的却是除了none,并无其他选项。经过一番摸索总算找到了解决办法,找到HKEY_CURRENT_USER\Software\Allround Automations\PL/SQL Developer\Preferences\ 然后新建一个String Value然后命名为language,然后输入值“AMERICAN”然后重新打开一个PL/SQL 执行刚开的语句,发现OK没有再报错了,换成 28-7月- 11的话就开始报错了。 记录一下,今天收获不错。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12216142/viewspace-703347/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-04-25

  • 博文量
    129
  • 访问量
    683424