解决办法如下:
修改listener.ora (E:\app\ailen\product\11.1.0\db_1\NETWORK\ADMIN
下) 默认listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
修改为(直接加上后面一段)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
(SID_NAME = ORCL)
)
)
黑体部分如果没有,加上就可以了。注意SID_NAME设置为实际SID名称,GLOBAL_DBNAME是注册的用于对外提供服务的服务名。
其实仔细分析静态注册与动态注册的原来更容易解决问题。
SID_LIST_LISTENER块中,前一段是用于动态注册,如果监听先于实例启动,会动态注册服务名,如果监听后启动,可以在sqlplus中使用alter system register命令实现注册。
SID_LIST_LISTENER块中,后一段是用于静态注册。监听启动的时候,并不在意Oracle的服务是否合法,只管注册。实例与监