前段时间,甲方要求将我们的应用系统以及数据库转移到一台新的服务器上。安装软件完成,修改好参数配置,然后测试连接数据库时,突然发生两个ORALCE错误:
ORA-00604: error occurred at recursive SQL level 1
ORA-12705: invalid or unknown NLS parameter value specified
===================
这两个错误很陌生,以前从来没有遇到过,还是两个错误连在一起。那么是不是偶然发生的呢?重启机器看看,但是重新启动机器后,再次连接数据库,还是出现相同的错误。那么是不是数据库连接字符串出错了呢?打开Oracle Enterprise Manager Console,找到系统使用的ORALCE服务参数信息,再和软件配置文件进行对比,没有问题!
到底问题出现在哪里呢?没有办法,只能求助GOOGLE,上网Google了一下,搜出一大堆网页,还真找到了解决方案:
1、检查Oralce客户端和服务端字符集是否一致
数据库服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集。
客户端字符集环境select * from nls_instance_parameter,其来源于v$parameter,
表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表
客户端的字符集要求与服务器一致才能正确显示数据库的非Ascii字符。
字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk
2、如果第一步没有问题,仍然出现以上的错误,设置ASPNET用户有访问Oralce安装目录下BIN目录的权限。
3、再次连接数据库,还是出现相同的错误。可能是Authenticated Users没有权限访问Oracle安装目录的权限,找到Oracle安装目录文件夹,鼠标右键点击,在“共 享和安全”选项的弹出对话框中设置“安全”项,先取消Authenticated Users对于文件夹“读取和运行”的权限,点击应用,然后又恢复Authenticated Users对于文件夹“读取和运行”的权限,注意这两步要确认Authenticated Users对于文件夹“读取和运行”的权限应用于“该文件夹、子文件夹以及文件”,可以在点击“高级”弹出的对话框中设置。然后重新启动机器。
4、运行完第三步后,如果还是出现这两个错误提示,再一次设置Authenticated Users对于文件夹“读取和运行”的权限,在“安全”选项卡中,点击“高级”按钮,在弹出的对话框中,选择“权限”选项卡,在“权限项目”文本框中,选择Authenticated Users,并且勾选“用在此显示的可以应用到子对象的项目替代所有子对象的权限项目(P)”,然后点击确定,重启机器
经过网上多个解决方法的综合,总结出了4个方案或者解决的步骤。做完第四步操作的时候,本次迁移过程中该死的错误提示才彻底消失!花费了半天的时间。
实际上这个错误就是由于Oralce安装在NTFS格式硬盘上,和.net有冲突,导致Authenticated Users无法执行“读取和运行”权限而引发的错误。而且好像从9i到10g这个问题一直就存在着,但是oralce官方只给出了一个狗血的解决办法,就是反复折腾Authenticated Users的“读取和运行”权限。
解决方法都来自于互联网搜索,整理一下,就是希望能够有些帮助。
欢迎大家批评指正!
转载于:https://www.cnblogs.com/leodrain/archive/2008/06/17/oralce-internal-error-and-solve-method.html