首页 > Linux操作系统 > Linux操作系统 > ora-00604错误解决
今天早上一到公司,就遇到这个问题。刚开始没有头绪,搞的一头雾水,最后在经过itpub上yueyangflash的指点,问题终于解决。
一、故障现象
1. 10.87.56.221服务器装的是oracle 9i的客户端。连接数据库的时候报错:
SQL> conn test/test@test
ERROR:
ORA-00604: error occurred at recursive SQL level 1
ORA-02248: invalid option for ALTER SESSION
而其他客户端连接同样的库,就没有问题。
如果用SYS用户连,就报说连到空闲实例,而不报00604错误。
二、问题分析
1. 怀疑是glogin.sql文件被修改,或者环境变量设置出问题。
2. 在metalink上解释说:
Applies to:
Oracle Server - Enterprise Edition - Version: 9.2.0.1 to 10.2.0.4
This problem can occur on any platform.
Symptoms
On certain Windows client :
connection using sqlplus giving the following error :
ORA-00604: error occurred at recursive SQL level 1
ORA-02248: invalid option for ALTER SESSION
Cause
environment variable NLS_* was set between two quotas .
For example :
NLS_DATE_FORMAT= 'YYYY/MM/DD' this should be YYYY/MM/DD
D:\oracle\product\10.2.0\db_1\BIN>set NLS_DATE_FORMAT= 'YYYY/MM/DD'
D:\oracle\product\10.2.0\db_1\BIN>sqlplus system/sys
SQL*Plus: Release 10.2.0.4.0 - Production on Tue Sep 23 13:17:12 2008
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
ERROR:
ORA-00604: error occurred at recursive SQL level 1
ORA-02248: invalid option for ALTER SESSION
Solution
set the environment variable without any quotas
三、解决问题
1. 检查客户端的坏境变量,发现NLS_DATE_FORMAT变量确实设置的有问题。变量值中间多了个冒号“:”
NLS_DATE_FORMAT=YYYY/MM/DD:HH24:MI:SS。
2. 改变设置
去掉冒号,问题解决。变量NLS_DATE_FORMAT的值不能加引号或其他东西,直接为: YYYY/MM/DD HH24:MI:SS即可。
四、 总结
1. 原因是有个同事觉得查询时间字段时,每次都需要添加to_data()函数,所以想通过设置环境变量来省事,没想到变量没设对,还引起了一个小小的故障。
2. 客户端添加NLS_DATE_FORMAT变量查询时间字段时确实很方便,不过所有涉及到oracle数据库的变量,一定要小心,否则可能造成很严重的后果。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/751371/viewspace-617144/ ,如需转载,请注明出处,否则将追究法律责任。