ORA-12514监听程序无法识别连接描述符的请求(Orcale开启归档模式所遇到的ORA-12514的解决方案与出现问题的原因)
出现这个问题的根源在于监听的动态注册和静态注册
监听的动态注册和静态注册:
1.什么是注册?
注册就是将数据库作为一个服务注册到监听程序。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库。这个服务名可能与实例名一样,也有可能不一样。
2.动态注册
动态注册:listener实时的都知道实例的状态,数据库在关闭的时候会动态的从listener中注销,所以远程管理数据库的启动和停止就不行了。
动态注册是在instance启动的时候PMON进程根据init.ora中的instance_name,service_names两个参数将实例和服务动态注册到listener中。
首先要在init.ora中指定instance_name,service_names两个参数的值。在sqlplus下通过show parameter service_names 和show parameter instance_name可以查看这两个参数的值。
动态注册默认只注册到默认的监听器上(名称是LISTENER、端口是1521、协议是TCP),因为pmon只会动态注册port等于1521的监听,否则pmon不能动态注册listener,如果需要向非默认监听注册,则需要配置local_listener参数!
3.静态注册
静态注册:listener不知道实例的状态,只有在进程通过其连接数据库时才能知道,如果你想使用远程管理数据库就使用静态监听
静态注册的方式:
修改listener.ora文件
在相应的位置,加入如下字段:Orcale_home 是你的orcal系统变量,和上面写入一致即可,SID_NAME是你的实例名,也就是init.ora文件下,实例的service_names的值,而GLOBAL_DANAME则是init.ora文件下instanc_name的值。
4.本次出现ora12514问题的缘由
创建数据库实例,默认为动态注册,对外开放了监听端口,导致动态注册失败。
解决方案:
1.关闭数据库实例的对外监听,开始归档模式后在打开
2.开启静态注册
静态注册的步骤:
连接查看instance_name,service_name。步骤如上所示,在listener.ora修改内容,如上所示,重启监听。
如果你看懂上面的文章,那么你就找到了出现这个问题的根源,解决的方式,自己就能想到。重启监听的方式就不贴了。上述出现的文件,在你的orcale的app安装目录下面。加油!