许多新手在作某些oracle实验时总会配置监听器,如用rman duplicate 复制数据库,表空间时间点恢复(TSPITR),Dataguard等等,通过oracle 工具配置的默认为动态注册,在作实验时一般用不到他的优点。
一 静态注册就是实例启动时读取listener.ora文件的配置,用静态注册服务数据库无论数据库处于什么状态都能连接(但不保证数据库可用)适合单机实验,例如rman可以连接nomount状态的数据库!!。采取静态注册方法时,listener.ora中的内容如下:
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1522))
)(动态服务只有这么几行)
静态注册服务还有如下几行
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = rgsong)
(ORACLE_HOME = /opt/ora10g/product/10.2.0/db_1)
(SERVICE_NAME = rgsong)
)
(SID_DESC =
(SID_NAME = aux)
(ORACLE_HOME = /opt/ora10g/product/10.2.0/db_1)
(SERVICE_NAME = aux)
)
)
该文件表明数据库是单监听的,两个实例名为rgsong,aux,向外提供了两个服务:rgsong和aux下面主要介绍动态服务注册。
二 如果用动态注册的话数据库没有到mount/open状态就不能进行远程连接,经常会出现如下错误:ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
但tnsping还能成功,有时数据库到了mount/open状态还会有 ORA-12514:错误,一般情况下有以下几种解决方法:
1 reload listener,重启数据库;
2 alter system register; * 3 检查参数文件是否设置了service_names , instance_name ;
为初始化参数service_names和instance_name设置显式的值是个很好的实践,尽管如果您没有设置它们,oracle也会为动态注册而生成默认值(基于db_name和db_main)。这样做的原因是,如果监听器在数据库启动之后重新启动,其动态注册行为将会有一些微妙的区别.如果监听器在数据库运行之后重新启动,仅当在init.ora文件中显式地设置了service_names和instance_name的值时,每个数据库的PMON进程才会在很短的时间之后自动注册数据库.(有了service_names,instance_name 就不怕老是重启监听了!)
如果没有显式设置service_names和instance_name的值,那么仅当数据库在监听器运行之后启动时,动态注册才会发生;在这种情况下,如果监听器后来发生了重启,动态注册信息将会丢失。参考
而且当你使用远程登录数据库时关闭数据库再startup 时也会出现ORA-12514:TNS:listener does not currently know of service requested in connect descriptor
默认监听情况下,pmon只会自动向tcp 1521的监听器自动注册,当你的监听不是默认监听时以上配置即使都一样,仍然会出现ORA-12514,这时就须要改参数文件中local_listener=非默认监听名了,并且重启数据库!
我的实验:(非默认监听,针对local_listener)
listener.ora
ABC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1522))
) (无SID列表即是动态监听)
tnsnames.ora
RGSONG =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1522))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rgsong)
)
(HS = OK)
)
AUX =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1522))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = aux)
)
(HS = OK)
)
记得要重启监听哦!
SQL> alter system set local_listener='abc' scope=spfile;
System altered.
SQL> shutdown
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00132: syntax error or unresolved network name 'abc'
google吧!
引起ORA-00119原因很多其中之一就是default listener you dont need to have local_listener set.
这里我们将ABC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1522))
)复制到tnsnames.ora中
tnsnames.ora
ABC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1522))
)
RGSONG =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1522))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rgsong)
)
(HS = OK)
)
AUX =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1522))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = aux)
)
(HS = OK)
)
再 startup 就ok了!!
本文如有错误之处还请大家批评指正,谢谢!
阅读(768) | 评论(0) | 转发(0) |