环境:linux
数据库:oracle 10g
数据库安装完成,并且使用dbca建立了一个数据库,并且使用dbstart启动,而且使用netca建立了一个监听并使用lsnrctl启动,现在碰到一个这样的问题,在oracle用户下,我使用sqlplus sys/qwe123 as sysdba是可以连接空闲实例,但是我使用sqlplus sys/qwe123@orc_test as sysdba就不能连接,报错:
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor
而且我也设置过netmgr,请问这是怎么回事啊?谢谢。请赐教。

解决方案 »

  1.   

    请看考Windows下的监听配置,除了路径之外,都可以对照下。
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = D:\oracle\product\10.1.0\Db_10g)
          (PROGRAM = extproc)
        )
      )LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS_LIST =
            (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
          )
          (ADDRESS_LIST =
            (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
          )
        )
      )
      

  2.   

    这个是我的listner.orgORCTEST =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = oracle)(PORT = 1521))
      )SID_LIST_ORCTEST =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = /opt/oracle/product/10.2.0/db_1)
          (PROGRAM = extproc)
        )
        (SID_DESC =
          (GLOBAL_DBNAME = orc_test)
          (ORACLE_HOME = /opt/oracle/product/10.2.0/db_1)
          (SID_NAME = orctest)
        )
      )
    有什么问题么?
      

  3.   

    监听认为肯定是启动了的,要不sqlplus sys/qwe123 as sysdba 怎么能连上呢
      

  4.   

    HOST = oracle你的主机别名是oracle吗?试试换成ip地址看下?
      

  5.   

    这样不行,还是连接不上。
    我使用netmgr重新设置了listener,现在使用sqlplus sys/qwe123@orc_test as sysdba是可以连接上了,但是又出现一个问题,我连接上以后,出现Connected to an idle instance字样,貌似还是没有连接到我需要的数据库上,不管用什么命令,都是显示这个错误:
    ERROR at line 1:
    ORA-01034: ORACLE not available
    貌似说ORACLE不可用,奇怪了,这又是怎么回事啊?
      

  6.   

    不能使用shutdown命令,而且使用dbshut貌似也停止不了数据库,我现在重新启动一下,看看能不能行。而且我使用其他的机器也连接不上来,估计还是有什么地方设置没搞好。
      

  7.   

      
    你的连接字符串错了么   sys/qwe123@orc_test as sysdba   看看你的tnsnames.ora  例如
    24 =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.55.24)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = power)
        )
      )
    那连接字符串就是  24   username/password@24
      

  8.   

    @后面跟的是连接字符串  在tnsnames.ora文件中,可以用任意字母
    要明白 连接字符串、 sid service_name 等关系而sid与service_name是没有关系的。 
    sid是实例名,service_name=db_name.domain 之所以经常会把几者混淆,是因为大多数都是单实例数据库,而常常数据库名db_name又与实例名sid相同。 
    在rac环境下就很容易看到各个名称间的区别。
      

  9.   

    我在@后面跟的是数据库名,我的数据库名就叫orc_test,我以前在windows环境下就是这样连接的。
      

  10.   

    还想请教一下楼上的,rac环境是什么环境。
      

  11.   

    回楼上的 ,我的连接字符串是没有错误的,下面是tnsnames.ora:
    ORC_TEST = 
      (DESCRIPTION = 
        (ADDRESS_LIST = 
          (ADDRESS = (PROTOCOL = TCP)(HOST = oracle)(PORT = 1521)) 
        ) 
        (CONNECT_DATA = 
          (SERVICE_NAME = orc_test) 
        ) 
      ) 
    我认为我的这个文件应该是没有问题的。
    再想请教一下,我如何看数据库服务已经启动,使用什么命令进行查看,是用ps -awx | grep oracle 进行查看么,监听服务是否是使用lsnrctl services orctest进行查看?谢谢。
      

  12.   

    你  listner.org   文件里的 SID_NAME是orctest   你确定对么? 
      

  13.   

    我看你  SERVICE_NAME = orc_test
         那一般如果你没做特殊修改的话 你建立 实例的时候  SID_name 和SERVICE_NAME 应该是一样的
      

  14.   

    这个我可以确定,我的SID_NAME是orctest,数据库名是orc_test.
    呵呵,问题已经解决了,第一个问题主要是listener没有开启,以及listener.ora文件里面的设置有问题,重新设置后,可以使用sqlplus进行连接了。
    后面一个问题是因为数据库没有启动,我在使用sqlplus连接到数据库后,使用startup启动数据库后,就可以进行正常操作了。主要是刚才总是认为dbstart就可以把数据库启动,貌似这个文件需要修改一下才能够进行使用,而且后来使用ps -ef|grep oracle查看系统进程,这样就可以知道数据库是否启动了。看来dbstart这个命令不太好用,估计如果要实现自启动还需要研究一下。
    谢谢以上两位对我的帮助,十分感谢。