K 的博客

记录精彩的程序人生 开始使用

Oracle 数据库连接 ORA-12505

ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

 

jdbc连接数据库的时候,需要使用数据库的sid_name

而不是数据库的services_name

而使用plsql连接数据库的时候,只需要数据库的services_name即可,所以修改连接字符串中的services_name 为sid_name.

查询sid_name的方法
select INSTANCE_NAME from v$instance;

 

关于启动数据库后提示 ora-12505 的解决方法: 
"listener does not currently know of SID given in connect descriptor" 

第一种可能 
是配置得数据库 sid 名不正确 localhost:1521:oracle 即红字部分不是你本机得 sid,那么如何查看本机得 sid 呢?用如下命令 SELECT   NAME   FROM   v$database; 在 sqlplus 中执行就可以看到,把红字部分换成查询出来的 sid 就可以。 
第二种可能 
发现 sid 配置没有错误,但是还是报错,那可能就是 oracle 得监听配置出了问题,需要检查 listener.ora 文件,用记事本打开, 
正确配置如下: 
# listener.ora Network Configuration File: e:\oracle\product\10.2.0\db_1\network\admin\listener.ora 
# Generated by Oracle configuration tools. 
SID_LIST_LISTENER = 
  (SID_LIST = 
    (SID_DESC = 
      (SID_NAME = PLSExtProc) 
      (ORACLE_HOME = e:\oracle\product\10.2.0\db_1
      (PROGRAM = extproc) 
    ) 
    (SID_DESC = 
      (GLOBAL_DBNAME = oracle
      (ORACLE_HOME = e:\oracle\product\10.2.0\db_1
      (SID_NAME = oracle
    ) 
  ) 
LISTENER = 
  (DESCRIPTION_LIST = 
    (DESCRIPTION = 
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) 
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) 
    ) 
  ) 
红字部分改成 oracle 创建时候的 sid 保存退出。

---------------------------------------------------------------------

(SID_DESC = 
      (GLOBAL_DBNAME = oracle
      (ORACLE_HOME = e:\oracle\product\10.2.0\db_1
      (SID_NAME = oracle
    ) 

GLOBAL_DBNAME= 的内容是用 SYSTEM 用户登录之后新建 sql 执行以下代码  :SELECT   NAME   FROM   v$database;  查询出来的数据就是等号后面的内容,切记两个红色字体的名称一定要相同

如果没有这段代码请复制到你的文件中,然后把 ORACLE_HOME 这个路径修改一下切记两个蓝色路径一定要相同

 

评论
1 评论
yongze • 2018-05-28
回复 删除
  1. weqwe
    eqweqw