今天打开plsql的时候,发现本地提示:ORA-12528: TNS:listener: all appropriate instances are blocking new connections
网上搜了一把,关于ora-12528的解决办法铺天盖地,最终采用美舞映煌 的方法:
启动到nomount状态,通过修改tnsnames.ora的参数
# tnsnames.ora Network Configuration File: $ORACLE_HOME\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
SYK =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = [IP])(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SYK)
(UR=A)
)
)
【===============补充=============】
我的文件在D:\app\Administrator\product\instantclient_11_2\NETWORK\ADMIN
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
(UR=A)
)
)
然后连接上数据库,以sysdba的身份登录
SQL>alter database mount;
SQL>alter database open;
改成静态服务后,又出现个新问题:error in reading(block 3,# blocks 8) of control file,一波未平一波又起啊~
接着找解决办法,问题的关键是oracle的控制文件被损坏,只要将备份的控制文件拿来恢复就好了;
这是找到的答案:liuya1985liuya
但是我的文件夹中没有control02,control03(注:全称是CONTROL01.CTL;路径在D:\app\Administrator\oradata\orcl,orcl是你的实例名称)
然后在flash_recovery_area(D:\app\Administrator\flash_recovery_area\orcl)中找到了,删掉oradata中的CONTROL01.CTL,然后把flash_recovery_area中的
CONTROL02.CTL拷贝过去,重命名成CONTROL01.CTL,再次执行alter database open;
我们看到已经好了:
总结:
问题ORA-12528: TNS:listener: all appropriate instances are blocking new connections是因为:
ORA-12528问题是因为监听中的服务使用了动态服务,实例虽然启动,但没有注册到监听。实例是通过PMON进程注册到监听上的,而PMON进程需要在MOUNT状态下才会启动。所以造成了上面的错误。
问题error in reading(block 3,# blocks 8) of control file是因为:
控制文CONTROL01.CTL件损坏