用pl/sql developer连接数据库时报错误ora-12528
故障环境说明:
在pl/sql(client)连接数据库时为提示:
ora-12528 : message 12528 not found; product=RDBMS ; facility=ora
说明:我的数据库类型是asm类型,不是rdbms数据库
登录数据库服务器查看:
C:/Documents and Settings/Administrator>lsnrctl status
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 28-11月-2009 21:1
0:56
Copyright (c) 1991, 2005, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期 28-11月-2009 18:35:33
正常运行时间 0 天 2 小时 35 分 23 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 C:/o
ra
cle/product/10.2.0/db_1/network/admin/listener.o
ra
监听程序日志文件 C:/oracle/product/10.2.0/db_1/network/log/listener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=//./pipe/EXTPROC1ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=asm)(PORT=1521)))
服务摘要..
服务 "+ASM_XPT" 包含 1 个例程。
例程 "+asm", 状态 BLOCKED, 包含此服务的 1 个处理程序...
服务 "+ASm" 包含 2 个例程。
例程 "+ASM", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
例程 "+asm", 状态 BLOCKED, 包含此服务的 1 个处理程序...
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
发现服务的状态为blocked,表示此实例不能接受连接
监听服务一共有三种状态,分别如下所示:
BLOCKED:表示此实例不能接受连接
UNKNOWN:表示此实例在listener.ora文件中注册,而不是通过动态服务注册,因而不知道其状态
READY:表示此实例可接受连接
解决办法:
修改clinet 的tnsnames.ora
方法1、我的listener中local_listener是动态注册的.
动态注册需在TNS的connect_data字串加入(UR=A),对UR=A用于在listener中的服务状态为blocked service时仍样建立通信。
asm =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.105)(PORT = 1521))
)
(CONNECT_DATA =
#skate add begin
(UR=A)
#skate add end
(SERVICE_NAME = +asm)
)
)
这种方式适合客户端少,如果客户端多的话,你要修改所有的客户端。而下面的方法只有修改服务器的listener.ora文件就ok的
方法2、如果你的监听器注册为动态注册的话。修改服务器的listener.ora,变动态注册监听为静态注册。
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
#skate add begin
(SID_DESC =
(GLOBAL_DBNAME = +ASm)
(ORACLE_HOME = C:/oracle/product/10.2.0/db_1)
(SID_NAME =+ASM)
)
#skate add end
)
--转自