奇怪的ORA-12528错误
个人在配置两个数据库,在NET Manger 中,2个服务名,配置一个监听。两个服务的端口号都为1521,链接类型:数据库默认。
监听位置:TCP/IP 1521
数据库服务:全局数据库名:ORCL
ORACLE主目录:d:oracleproduct10.1.0db_1
SID:ORCL
另一个数据库类似配置
以下是从网上找来。
http://kenlan.itpub.net/post/21171/198811
在同一机器上新装了两个数据库,装完后能是正常应用的,但关闭数据库后重新打开就报错,不能连接,提示ORA-12528这样的错误,
ORA-12528错误
奇怪的ORA-12528错误
个人在配置两个数据库,在NET Manger 中,2个服务名,配置一个监听。两个服务的端口号都为1521,链接类型:数据库默认。
监听位置:TCP/IP 1521
数据库服务:全局数据库名:ORCL
ORACLE主目录:d:oracleproduct10.1.0db_1
SID:ORCL
另一个数据库类似配置
以下是从网上找来。
http://kenlan.itpub.net/post/21171/198811
在同一机器上新装了两个数据库,装完后能是正常应用的,但关闭数据库后重新打开就报错,不能连接,提示ORA-12528这样的错误,想不出是什么原因就上网搜了一下,找到了解决方法,不过很奇怪
..................
下面重演问题的全过程:
1、启动监听器
LSNRCTL> start
...
2、以SYS用户登录
SQL> connect sys@ctlg as sysdba;
Enter password:
ERROR:
ORA-12528: TNS:listener: all appropriate instances are blocking new connections
--这时候报错,唔知点解...
3、上网找办法ing....
4、修改listener.ora,增加一段
(SID_DESC =
(GLOBAL_DBNAME = ctlg)
(ORACLE_HOME = /oracle/product/10.1.0/Db_1)
(SID_NAME = ctlg)
)
保存后,重新启动监听器
5、再次尝试连接
SQL> connect sys@ctlg as sysdba;
Enter password:
Connected.
--可以正常连接,说明是因为没监听数据库???
6、再次修改listener.ora文件,去掉刚才加的那一段,保存后重启监听器
7、以SYS再次尝试连接
SQL> connect sys@ctlg as sysdba;
Enter password:
Connected.
又成功了喔,不明白。这不是又回起始状态了嘛,为什么现在可以连接而刚开始不行呢?真奇怪!
分类: ( Oracle DB ) :: 评论 (2) :: 静态链接网址 :: 引用 (0)
原来如此 [回复]
dmyao,你这样一说,俺就明白了.THANKS
kenlan | 12/09/2006, 12:21
简单的道理 [回复]
你修改好后是静态注册,所以数据库关闭后,还是在监听里?之前的是动态注册,数据库启动的时候,才会到监听里面,你数据库关闭的时候,监听里面的信息过一段时间后和会自动没有,所以通过监听连接数据库就会报错
ORA-12528问题解决
http://www.cublog.cn/u/17264/showart_472379.html
在solaris中运行了lsnrctl stop将listener停止,然后运行lsnrctl start将listener重新启动,出现问题及解决办法如下:
lsnrctl status
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=lypch)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=.pipeEXTPROCipc)))
Services Summary...
Service "LSExtProc" has 1 instance(s).
Instance "LSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "ammicly" has 1 instance(s).
Instance "ammicly", status BLOCKED, has 1 handler(s) for this service...
The command completed successfully
这个问题说明数据库没有Mount
连接数据库,发现:
ORA-12528: TNS:listener: all appropriate instances are blocking new connections
用sqlplus /nolog
sql>connect [email=sys/ammic@amicly]sys/ammic@amicly[/email] as sysdba
ORA-12528: TNS:listener: all appropriate instances are blocking new connections
连接的问题可以通过修改listener.ora的参数,把动态的参数设置为静态的参数,红色标注部分,然后从新启动监听,就OK
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:oracleproduct10.1.0db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ammicly)
(ORACLE_HOME = c:oracleproduct10.1.0db_1)
(SID_NAME = ammicly)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = lypch )(PORT = 1521))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
)
)
通过修改tnsnames.ora的参数,红色表注部分
# tnsnames.ora Network Configuration File: C:oracleproduct10.1.0db_1
networkadmintnsnames.ora
# Generated by Oracle configuration tools.
AMMICLY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = lypch )(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ammicly)
(UR=A)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
然后 sqlplus /nolog
SQL>alter database mount;
SQL>alter database open;
这样就可以启动数据库了;
或者用Oradim -shutdown -sid ammicly -shuttype srvc,inst -shutmode immediate -syspwd ammic;关闭数据库
在用oradim -startup -sid ammicly -starttype srvc,inst -syspwd ammic;启动数据库解决;也可以在截面上从启动数据库服务来解决;
总结ORA-12528问题是因为监听中的服务使用了动态服务,系统启动后,数据库没有正常的MOUNT,因此在动态模式下,就会出现这个问题,用静态的就不会有这个问题,因此上面的方法就是把监听设置为静态,或者在tnsnames.ora中追加(UR=A)或者从启动服务,三种方法解决问题;
-------------------------
用静态注册的风险是,如果在instance运行中,lisener重新启动,就找不到instance了。换言之,静态注册需要先启动lisener,再启动instance。而且静态模式下,lisener status显示的是unknown
而且,用动态的话,instance nomount状态下,一般是dba需要进行操作(比如恢复),这个时候一般直接登陆到host进行,不使用tns远程连接