Oracle11g ORA-12505,TNS:一段时间后,侦听器目前不知道Tomcat应用程序中连接描述符中给出的SID

Oracle11g ORA-12505,TNS:一段时间后,侦听器目前不知道Tomcat应用程序中连接描述符中给出的SID,oracle11g,tnsnames,tns,Oracle11g,Tnsnames,Tns,我正在看一个web应用程序,它使用JDBC连接连接到Oracle11g数据库(11.2.0)。应用程序在一段时间内(大约一小时)不会出现任何问题,然后我得到: java.sql.SQLException: Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor 我尝试重新

我正在看一个web应用程序,它使用JDBC连接连接到Oracle11g数据库(11.2.0)。应用程序在一段时间内(大约一小时)不会出现任何问题,然后我得到:

java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
我尝试重新启动Oracle和Oracle服务OracleServiceXE和OracleXETNSListener,但错误不会发生。它只有在我重新启动机器后才会消失

我没有在Tomcat或Oracle中更改任何数据库参数

这是我的名字

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

ORACLR_CONNECTION_DATA = 
  (DESCRIPTION = 
    (ADDRESS_LIST = 
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) 
    ) 
    (CONNECT_DATA = 
      (SID = CLRExtProc) 
      (PRESENTATION = RO) 
    ) 
  ) 
以下是我对JDBC的配置:

    String serverName = "localhost";
    String portNumber = "1521";
    String sid = "xe";
    String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
    String username = "xxx";
    String password = "yyy";
当“XE”正常工作时,如果我检查lsnrctl状态,我可以看到

Service "XEXDB" has 1 instance(s).
  Instance "xe", status READY, has 1 handler(s) for this service...
Service "xe" has 1 instance(s).
  Instance "xe", status READY, has 1 handler(s) for this service...
The command completed successfully
一旦我得到异常,当我检查lsnrctl状态时,我就看不到实例“xe”


我想知道为什么我在一段时间后会遇到这个异常,以及如何修复它。如果没有,我如何在不重新启动机器的情况下绕过它?谢谢。

数据库URL应如下所示

// Create DataSource and connect to the local database
ods = new OracleDataSource();
ods.setURL("jdbc:oracle:thin:@//localhost:5221/orcl");
ods.setUser("HR");
ods.setPassword("hr");
conn = ods.getConnection();
建议使用如下所示的长格式连接URL。 jdbc:oracle:thin:@(说明= (地址=(协议=tcp)(主机=myhost vip)(端口=1521)) (连接数据=(服务名称=myorcdbservicename)))

另外,为了验证连接URL的格式是否正确,请使用以下命令从SQL开发人员处获取连接并进行测试

sqlplus hr/hr@“(说明= (地址=(协议=tcp)(主机=myhost vip)(端口=1521)) (连接数据=(服务名称=MyorcDBServiceName)))