分类: Oracle
2013-08-01 10:11:11
注册就是将数据库作为一个服务注册到监听程序。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库。这个服务名可能与实例名一样,也有可能不一样。
在数据库服务器启动过程中,数据库服务器会向监听程序注册相应的服务(无论何时启动一个数据库,默认地都有两条信息注册到监听器中:数据库服务器对应的实例和服务。) 相当于是这样:在数据库服务器和客户端之间有一监听程序(Listener),在监听程序中,会记录相应数据库对应的服务名(一个数据库可能对应有多个服务名),当客户端需要连接数据库时,只需要提供服务名,就可以建立客户端和服务器之间的连接。
静态注册
只通过listener.ora来配置,可以在这里为一个实例配置多个对外的服务名
图形化界面配置静态注册
1、如下图先要配置监护的位置,再指明数据库服务
2、在listener.ora中效果如下
从这里可以看出静态注册也可以改变端口,只需要改变一下端口,然后重启监听的进程即可,这样新添加的端口就打开了。
可选择的是,您可以在service_names参数中指定多个服务值,值之间用逗号格开,这样我们就可以在客户端设置SID就随心所欲了。这对于共享服务器配置是很有用的。
动态注册即没有在上图中配置“数据库服务”,只配置了“监听位置”。
在instance启动的时候PMON进程根据init.ora中的instance_name,service_names两个参数将实例和服务动态注册到listener中。 如果采用动态注册,当监护后于实例启动,
就会导致PMON监听注册失败(过1分钟左右PMON才会继续注册),导致客户端无法连接。通过lsnrctl status会看到提示“The listener supports no services”,
此时我们可以用ALTER SYSTEM REGISTER 手动注册
动态注册默认只注册到默认的监听器上(名称是LISTENER、端口是1521、协议是TCP),如果需要向非默认监听注册,则需要配置local_listener参数!
首先 alter system set local_listener='(address=(protocol=tcp)(port=1522)(host=linan))'
或 alter system set local_listener=‘T’
再在tnsname.ora文件中添加
T =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = wms)(PORT = 1522))
)
#(CONNECT_DATA = -----这里有用的就是上面的HOST和PORT,这一块的信息没用
# (SERVICE_NAME = orcl11g)
#)
)
再修改listener.ora文件,添加
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = wms)(PORT = 1522))
)
)
最后,重启监听,重启该实例,保证注册监听成功。这样服务器就只能监听1522这个端口了,连接1521会被拒绝:Linux Error: 111: Connection refused
---------------------------------------
实例状态为UNKNOWN值时表明此服务是静态注册的设置。这时监听器用来表明它不知道关于该实例的任何信息,只有当客户发出连接请求时,它才检查该实例是否存在。
动态注册的数据库通过状态信息中的状态READY或状态BLOCKED(对于一个备用数据库)来指明。不管关闭何时数据库,动态注册的数据库都会动态地从 监听器注销,而与之相关的信息将从状态列表中消失。这样,不管数据库是在运行还是已经关闭,监听器总是知道它的状态。该信息将被用于连接请求的回退 (fallback)和负载平衡。