背景:
  使用pl/sql developer连接本地版本为Oracle10gXEUniv 10.2.0的数据库,一开始pl/sql developer能够成功连接登录,但后来我觉得Oracle每次都启动服务太过占用内存,于是将OracleServiceXEOracleXETNSListener服务关闭,在需要使用数据库的时候在启动这两个服务。但当我再次启动这两个服务,并用Pl/sql developer进行连接时出现ora-12170 tns 连接超时的错误。
=====================================================================
  解决办法:
  修改目录E:\Oracle10gXEUniv\app\oracle\product\10.2.0\server\NETWORK\ADMIN下的文件tnsnames.oralistener.ora将这两个文件中HOST后面的主机都修改为127.0.0.1然后重启OracleServiceXEOracleXETNSListener服务
这时pl/sql developer连接oracle时报出ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务的错误,再次修改listener.ora文件,修改前该文件内容为
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = E:\Oracle10gXEUniv\app\oracle\product\10.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = E:\Oracle10gXEUniv\app\oracle\product\10.2.0\server)
      (PROGRAM = extproc)
    )
  )
 
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
  )
 
DEFAULT_SERVICE_LISTENER = (XE)
 
修改的方式是:再在该文件中添加一个需要连接的数据库实例的描述,就是添加一个SID_DESC,我自己连接的数据库实例是XE,添加后的文件内容为:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = E:\Oracle10gXEUniv\app\oracle\product\10.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = E:\Oracle10gXEUniv\app\oracle\product\10.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = XE)
      (ORACLE_HOME = E:\Oracle10gXEUniv\app\oracle\product\10.2.0\server)
)
/*红色字体部分即为新加的数据库实例XE的实例描述,注意该实例描述的ORACLE_HOME后面不能像其它实例那样加(PROGRAM = extproc),否则会报“ORA-28547: TNS: 连接服务器失败,可能是Net8管理错误。”*/
  )
 
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
  )
 
DEFAULT_SERVICE_LISTENER = (XE)