ORA-12514: TNS: 监听程序当前无法识别连接描述符中

 

关于这个错误,有很多种情况,我知道有2种情况,以下是网上摘录的:

1、近日在配置Oracle 10G的流复制环境时,遇到一个问题,关闭数据库(shutdown immediate)后,通过SQL Plus连接数据库:conn sys/his@orc0 as sysdba,出现如下错误:

    ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务

通过重启服务的方式启动数据库,再次连接却能成功登录,也就是说在关闭数据库状态下无法连接服务器。

    开始以为是系统环境变量Oracle_SID的配置问题,因为机器有多个实例,一阵折腾后还是不能连接。后来查资料得知:

    Oracle9i以后,后台进程PMON自动在监听器中注册在系统参数SERVICE_NAMES中定义的服务名,SERVICE_NAMES默认为DB_NAME+DOMAIN_NAME。监听配置文件listener.ora中可以不必指定监听的服务名。但是,当数据库处于关闭状态下PMON进程没有启动,也就不会自动注册监听的实例名,所以使用sqlplus sys/his@orc0 as sysdba 会出现ORA-12514错误。

如果在listener.ora文件中指定监听的实例名,则即使数据库处于关闭状态,仍然可以连接。

listener.ora

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = PLSExtProc)

      (ORACLE_HOME = G:/oracle/product/10.2.0/db_1)

      (PROGRAM = extproc)

    )

   (SID_DESC =

    (GLOBAL_DBNAME = ORCL)

    (ORACLE_HOME = G:/oracle/product/10.2.0/db_1)  

    (SID_NAME = ORCL)

    )

  )

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = zyk)(PORT = 1521))

    )

  )

 

以上粗体部件为增加的内容,修改后重启监听服务后即可。

附:通过在lsnrctl中输入set display verbose,然后再通过命令service查看,服务状态为READY表示PMON自动注册的服务名,而UNKNOWN则表示该服务是手工在LISTENER.ORA中配置的数据库服务。

 

2、可能是数据库服务器蹦了,这样的话,光重启服务是不行的,重启机器也无济于事。可以用下面的方法解决。

  打开cmd窗口,输入sqlplus / as sysdba;startup,完毕后即恢复正常,执行速度有点慢,耐心等待。

  该问题附带错误可能是:

oracle not available
shared memory realm does not exist

 

 

 

另外如果本机安装了Oracle就会出现的问题:

 

连接数据库不成功 

日志捕获的错误打印信息

30ORA-12705: Cannot access NLS data files or invalid environment specified

 

如果是Windows平台,注册表里 /HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE 查找键 NLS_LANG,这个键由Oracle标准客户端安装创建, 值是 NA 。这个导致了 ORA-12705错误。解决方法就是修改NA为SIMPLIFIED CHINESE_CHINA.ZHS16GBK。

 Linux下 如果环境变量 NLS_LANG 值是NA 会引起 ORA-12705 错误,解决方法是修改set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

 

 

附:Navicat连接Oracle数据库

1、安装Navicat后需要在工具》配置中OCI加入oci.dll文件

ORA-12514: TNS: 监听程序当前无法识别连接描述符中_第1张图片

2、填入正确信息并连接

ORA-12514: TNS: 监听程序当前无法识别连接描述符中_第2张图片

 

你可能感兴趣的:(oracle,数据库,list,service,domain,数据库服务器)