在Fedora下安装了Oracle 10gR2,安装完成之后,使用netca创建了监听,创建的时候没有使用默认的LISTENER和1521端口,而是使用了LISTENER_DELL和1522端口,终端下显示完成,然后在$ORACLE_HOME/network/admin/tnsnames.ora下增加一个tns别名。

DELL =
 (DESCRIPTION =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1522))
   )
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SID = dell)
   )
 )
加好之后,如下登录
sqlplus /nolog
connect scott/tiger@dell
登录之后就报错了,ORA-12505,按说监听方面的错误还是很好解决的,结果检查了监听也是正常启动的,但就是无法按照@DELL来登录,将tnsnames.ora里面SID = dell 改成 SERVER_NAME = dell  还是一直报错ORA-12505, TNS:listener does not currently know of SID given in connect descriptor。
     然后发现$ORACLE_HOME/network/admin/目录下没有sqlnet.ora文件,运行netca,设置命名方法,运行之后sqlnet.ora文件有了,内容如下:
more sqlnet.oraNAMES.DIRECTORY_PATH= (TNSNAMES)
再次尝试登录,发现还是同样的错误。于是突然想到Oracle肯定一直是以LISTENER这个并未启动的监听来来Oracle提供监听信息,而我并没有使用默认监听名称所以造成这个错误,于是给监听文件listener.ora添加SID信息。
LISTENER_DELL =
 (DESCRIPTION_LIST =
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = avon)(PORT = 1522))
     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
   )
 )
SID_LIST_LISTENER_DELL =
 (SID_LIST =
   (SID_DESC =
     (SID_NAME = PLSExtProc)
     (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
     (PROGRAM = extproc)
   )
 )
添加SID信息 (见蓝色加粗字体)
SID_LIST_LISTENER_DELL =
 (SID_LIST =
   (SID_DESC =
     (SID_NAME = PLSExtProc)
     (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
     (PROGRAM = extproc)
   )
   (SID_DESC =
     (GLOBAL_DBNAME = dell)
     (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
     (SID_NAME = dell)
   )
 )
加好之后保存退出 :wq
进行测试,还是报错,发现tnsnames.ora 里面我设置的是SERVER_NAME,于是给改成SID = dell 再次测试
sqlplus /nolog
SQL> conn scott/tiger@dell
Connected.
OK,一切正常。
后记:在windows下也进行了同样的尝试,发现如果不使用LISTENER作为默认监听名称 端口不为1521的话,也会导致这个错误,而解决方法和上面一致。 不过并没有尝试名称为LISTENER但是端口不为1521的情况。
C:\Windows\system32>lsnrctl
LSNRCTL for 32-bit Windows: Version 10.2.0.3.0 - Production on 13-9月 -2010 23:2
6:34
Copyright (c) 1991, 2006, Oracle.  All rights reserved.
欢迎来到LSNRCTL, 请键入"help"以获得信息。
LSNRCTL> status
正在连接到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-12541: TNS: 无监听程序
TNS-12560: TNS: 协议适配器错误
 TNS-00511: 无监听程序
  32-bit Windows Error: 61: Unknown error
LSNRCTL> set current_listener LISTENER_DEMO
目前的监听程序为 LISTENER_DEMO
LSNRCTL> status
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=scott-PC)(PORT=1522)))
LISTENER 的 STATUS
------------------------
别名                      LISTENER_DEMO
版本                      TNSLSNR for 32-bit Windows: Version 10.2.0.3.0 - Produ
ction
启动日期                  13-9月 -2010 23:17:13
正常运行时间              0 天 0 小时 9 分 41 秒
跟踪级别                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
监听程序参数文件          D:\oracle\product\10.2.0\db_1\network\admin\listener.o
ra
监听程序日志文件          D:\oracle\product\10.2.0\db_1\network\log\listener_dem
o.log
监听端点概要...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=scott-PC)(PORT=1522)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
 例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
以上为出现ORA-12505错误时,监听的状态,
以下为修改正常,监听重启后的状态
LSNRCTL> set current_listener LISTENER_DEMO
目前的监听程序为 LISTENER_DEMO
LSNRCTL> stop
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=scott-PC)(PORT=1522)))
命令执行成功
LSNRCTL> start
启动tnslsnr: 请稍候...
TNSLSNR for 32-bit Windows: Version 10.2.0.3.0 - Production
系统参数文件为D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
写入D:\oracle\product\10.2.0\db_1\network\log\listener_demo.log的日志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=scott-PC)(PORT=1522)))
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc)))
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=scott-PC)(PORT=1522)))
LISTENER 的 STATUS
------------------------
别名                      LISTENER_DEMO
版本                      TNSLSNR for 32-bit Windows: Version 10.2.0.3.0 - Produ
ction
启动日期                  13-9月 -2010 23:35:14
正常运行时间              0 天 0 小时 0 分 6 秒
跟踪级别                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
监听程序参数文件          D:\oracle\product\10.2.0\db_1\network\admin\listener.o
ra
监听程序日志文件          D:\oracle\product\10.2.0\db_1\network\log\listener_dem
o.log
监听端点概要...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=scott-PC)(PORT=1522)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
 例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "demo" 包含 1 个例程。
 例程 "demo", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功