ora-12528 : message 12528 not found; product=RDBMS ; facility=ora 收藏

author:skate

time:2009/11/28



我用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:\oracle\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

)

----end------