【原创】Oracle配置监听和连接,已经一些比较容易混淆的相关概念
1.配置监听
配置监听的方法有3种:
Database
PLSExtProc
Executable
Database 模式是标准的配置方式,也是最常用的数据库连接方式。
PLSExtProc 模式允许PL/SQL程序访问外部程序,并且被大多数实例配置为默认连接方式
Executable 模式允许外部程序能通过一个tns连接被访问(目前没用到过)
Database 模式配置方式:
(SID_DESC =
(GLOBAL_DBNAME= querymqq)
(ORACLE_HOME= /data/oracle/product/10.2.0/db_1/)
(SID_NAME = mqq)
)
PLSExtProc模式配置方式:
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /usr/local/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
在我们新oracle和8.155机器上只使用PLSextProc方式配置,并不能建立连接,还得加database配置。
对PLSextProc的解释,网上也没人能说出个名堂,疑惑的提问倒是一堆一堆的。那个e文档也含糊的很。
2.监听状态
命令:lsnrctl status,红色部分为注解
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 12-3ÔÂ -2007 21:39:27
Copyright (c) 1991, 2005, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date 12-3ÔÂ -2007 20:53:47
Uptime 0 days 0 hr. 45 min. 39 sec
Trace Level off /*关闭跟踪*/
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /usr/local/oracle/product/10.2.0/db_1/network/admin/listener.ora /*监听配置文件地址*/
Listener Log File /usr/local/oracle/product/10.2.0/db_1/network/log/listener.log /*监听日志文件地址*/
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.225.158)(PORT=1521)))
Services Summary...
Service "MQQ_XPT" has 1 instance(s).
Instance "mqq", status READY, has 1 handler(s) for this service...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN/*UNKNOWN 表示是在listener.ora文件配置*/, has 1 handler(s) for this service...
Service "mqq" has 1 instance(s).
Instance "mqq", status READY/*READY表示是在DB启动PMON(监控进程)之后,自动注册DB到监听,一般在启动实例后1分钟注册监听*/, has 1 handler(s) for this service...
The command completed successfully
3.比较容易混淆的概念:
Db_name:对一个数据库(Oracle database)的唯一标识。这种表示对于单个数据库是足够的,但是随着由多个数据库构成的分布式数据库的普及,这种命令数据库的方法给数据库的管理造成一定的负担,因为各个数据库的名字可能一样,造成管理上的混乱。为了解决这种情况,引入了Db_domain参数,这样在数据库的标识是由Db_name和Db_domain两个参数共同决定的,避免了因为数据库重名而造成管理上的混乱。这类似于互连网上的机器名的管理。我们将Db_name和Db_domain两个参数用’.’连接起来,表示一个数据库,并将该数据库的名称称为Global_name,即它扩展了Db_name。Db_name参数只能由字母、数字、’_’、’#’、’$’组成,而且最多8个字符。查看方式:show parameter db_name;
Db_domain:定义一个数据库所在的域,域只是为了更好的管理分布式oracle系统。查看方式:show parameter db_domain;
Global_name:对一个数据库(Oracle database)的唯一标识,oracle建议用此种方法命令数据库。该值是在创建数据库是决定的,缺省值为Db_name. Db_domain。在以后对参数文件中Db_name与Db_domain参数的任何修改不影响Global_name的值,如果要修改Global_name,只能用ALTER DATABASE RENAME GLOBAL_NAME TO ‘db_name.db_domain’。查看方式:show parameter global_name;
Service_name:该参数是oracle8i新引进的。在8i以前,我们用SID来表示标识数据库的一个实例,但是在Oracle的并行环境中,一个数据库对应多个实例,这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name参数,该参数对应一个数据库,而不是一个实例,而且该参数有许多其它的好处。该参数的缺省值为Db_name. Db_domain,即等于Global_name。一个数据库可以对应多个Service_name,以便实现更灵活的配置。该参数与SID没有直接关系,即不必Service name 必须与SID一样。查看方式:show parameter service_name;
Net service name:网络服务名,又可以称为数据库别名(database alias)。是客户端程序访问数据库时所需要,屏蔽了客户端如何连接到服务器端的细节,实现了数据库的位置透明的特性。查看方式:show parameter Net service name;
4.SQLPLUS运行时,建立连接的方式
在用户输入sqlplus system/manager@test后,sqlplus程序会自动到sqlnet.ora文件中找NAMES.DEFAULT_DOMAIN参数,假如该参数存在,则将该参数中的值取出,加到网络服务名的后面,即此例中你的输入由sqlplus system/manager@test自动变为sqlplus system/manager@test.server.com ,然后再到tnsnames.ora文件中找test.server.com网络服务名;假如NAMES.DEFAULT_DOMAIN参数不存在,则sqlplus程序会直接到tnsnames.ora文件中找test网络服务名,然后取出其中的host,port,tcp,service_name,利用这些信息将连接请求发送到正确的数据库服务器上。