哪位高手帮忙解决下,谢谢!
问题描述:
 我用的是windows,在使用sqlplus时报错信息显示如下:
 
  SQL> shutdown immedite
  ORA-01507: ???
  
  中间不能正确显示错误信息,我的oracle下的nls_lang为SIMPLIFIED CHINESE_CHINA.ZHS16GBK
  后来在windows的环境变量中也设置了一个nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK  但还是无效,麻烦帮忙解决下

解决方案 »

  1.   

    ORA-01507: database not mounted 
    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.
      

  2.   

    2楼的解释大概懂了,但是我想知道ORA-01507: database not mounted 变成ORA-01507: ??? ,这是什么原因呢?我将如何修改呢?
      

  3.   

    修改方法:将注册表里的NLS_LANG修改成"AMERICAN_CHINA.ZHS16GBK"
    或直接将NLS_LANG修改成NLS_LANG0
      

  4.   

    实例安装时是否没有选择中文?一旦数据库创建后,数据库的字符集原则上是不能改变的。确实要改的话,NLS_LANG三个子集的参数注意要一致:
        language 指定服务器消息的语言。 
      territory 指定服务器的日期和数字格式。 
      Charset 指定字符集
      

  5.   


    这个情况要从的你的数据库的状态是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 关键字正确显示了.
    最后的结论是,由于数据库没有正常启动,所以这里的字符集无法获得,从而显示乱码.