哪位高手帮忙解决下,谢谢!
问题描述:
我用的是windows,在使用sqlplus时报错信息显示如下:
SQL> shutdown immedite
ORA-01507: ???
中间不能正确显示错误信息,我的oracle下的nls_lang为SIMPLIFIED CHINESE_CHINA.ZHS16GBK
后来在windows的环境变量中也设置了一个nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK 但还是无效,麻烦帮忙解决下
问题描述:
我用的是windows,在使用sqlplus时报错信息显示如下:
SQL> shutdown immedite
ORA-01507: ???
中间不能正确显示错误信息,我的oracle下的nls_lang为SIMPLIFIED CHINESE_CHINA.ZHS16GBK
后来在windows的环境变量中也设置了一个nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK 但还是无效,麻烦帮忙解决下
解决方案 »
- oracle11g总是崩溃,日志文件如下,怎么解决,急急急!!!登录连接没有问题,连接的是服务器
- 请问如何使用游标管理序列号
- 求一个参数游标的问题
- sql plus如何新建新用户
- 请教:如何在oracle中建立一个作业
- 初学ORACLE,设置ORACLE_HOME问题(在线等)
- 批量插入数据,大家看这样有问题吗?
- 初手请教:(1)如何判断一个变量是否为null?(2)如何取得指定日期中的天数?
- Oracle中 A换成B B又换成C C 又换成D 随便查一个都出来
- Oracle11g的SQLDeveloper卡顿现象
- help !! help 这个题
- Oracle搭建的 RAC 集群,必须使用 ASM 存储管理吗?
Cause: A command was attempted that requires the database to be mounted.
Action: If you are using the ALTER DATABASE statement via the SQLDBA startup command, specify the MOUNT option to startup; else if you are directly doing an ALTER DATABASE DISMOUNT, do nothing; else specify the MOUNT option to ALTER DATABASE. If you are doing a backup or copy, you must first mount the desired database. If you are doing a FLASHBACK DATABASE, you must first mount the desired database.
或直接将NLS_LANG修改成NLS_LANG0
language 指定服务器消息的语言。
territory 指定服务器的日期和数字格式。
Charset 指定字符集
这个情况要从的你的数据库的状态是nomount这里开始说起了对你的数据库来说你的数据库的字符集是ZHS16GBK,而你的客户端也是ZHS16GBK,所以这里应该是不出现乱码状况的,这里有个前提,就是你的数据库已经mount成功的情况下,而根据你的状态code来看,你shutdown的时候,你的数据库还是nomount状况,nomount状态就是数据库还处于init状态,也就是说仅仅只是从init文件里知道了你个数据库启动的参数,知道你的内存分配,知道你的一些参数的配置,而此时的数据库还没有达到mount的状态,也就是还没有装载控制文件。这时数据库的字符集还处于一个未知的状态。而这个未知状态的字符集很有可能和你client的字符集是不一致的,造成乱码也是情理之中了。看看如下这个实验,你就更清楚了
SQL>startup nomount; -- 先到达nomount的状态.
SQL>select userenv('language') from dual; -- 查看此时字符集
SIMPLIFIED CHINESE_CHINA.US7ASCII
测试一下
SQL>select 2 to dual;
第 1 行出现错误:
ORA-00923: ?????? FROM ???SQL>alter database mount; -- 到mount状态 此时加载control文件,从控制文件可以知道数据库的字符集
SQL>select userenv('language') from dual; -- 查看此时字符集
SIMPLIFIED CHINESE_CHINA.ZHS16GBK可见这时的字符集才是我方数据库的真实数据字符集
测试一下
SQL>select 2 to dual;
第 1 行出现错误:
ORA-00923: ?????? FROM ???
咦,怎么还是乱码呀,这里可能是由于session的处理,刚才由于字符集发生了转码,这一点我现在还没有找到很有力的理据来解释,姑且觉得和session有关,所以重新connect一把SQL>conn / as sysdba;
SQL>select 2 to dual;
第 1 行出现错误:
ORA-00923: 未找到要求的 FROM 关键字正确显示了.
最后的结论是,由于数据库没有正常启动,所以这里的字符集无法获得,从而显示乱码.