了,那么数据文件路径也就确定下来了,如我的环境中:数据文件就放在/u01/app/oracle/oradata/zlm下面而跟踪日志就放在/u01/app/oracle/admin/zlm/bdump下面
过了片刻以后,再查看监听状态,发现自动还是会去动态注册一个和INSTANCE_NAME(SID)一致的SERVICE_NAME
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.91)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "zlm" has 1 instance(s).
Instance "zlm", status READY, has 1 handler(s) for this service...
Service "zlmXDB" has 1 instance(s).
Instance "zlm", status READY, has 1 handler(s) for this service...
Service "zlm_SN" has 1 instance(s).
Instance "zlm", status UNKNOWN, has 1 handler(s) for this service...
Service "zlm_XPT" has 1 instance(s).
Instance "zlm", status READY, has 1 handler(s) for this service...
The command completed successfully
这样的话,我个人判断,如果不配置静态监听的话,pmon进程始终会去监听那里注册一个名字和INSTANCE_NAME(SID)一致的SERVICE_NAME,即便是已经在tnsnames.ora中修改了SERVICE_NAME=zlm_SN,而只有通过静态监听强制注册一个与INSTANCE_NAME(SID)不一致的SERVICE_NAME,才会被监听到
NET SERVICE NAME:
网络服务名,又可以称为数据库别名(database alias)。是客户端程序访问数据库时所需,屏蔽了客户端如何连接到服务器端的细节,实现了数据库的位置透明的特性。通常当我们用DBLINK连接数据库时,使用的就是这个名字,由USING关键字指定,USING 'connect_string'这里connect_string其实就是NET SERVICE NAME。说到DBLINK还要提一点,就是当源数据库GLOBAL_NAME=TRUE时,link_name必须与远程数据库的全局数据库名global_name)相同;否则,可以任意命名。同样地,当我们用sqlplus system/oracle@xxx来连接DB SERVER时,这个xxx就是NET SERVICE NAME,我的环境中是ZLM10G,如:
ZLM10G =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.91)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = zlm_SN)
)
)
那么根据tnsnames.ora的配置,这里ZLM10G就是zlm_SN这个SERVICE_NAME所对应的NET SERVICE NAME 如果用sqlplus system/oracle@zlm是连不上DB SERVER的,只有用sqlplus system/oracle@zlm10g才行
[oracle@10dg1 ~]$ sqlplus system/oracle@zlm
SQL*Plus: Release 10.2.0.5.0 - Production on Tue Jul 29 14:48:39 2014
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
ERROR:
ORA-12560: TNS:protocol adapter error
Enter user-name:
[oracle@10dg1 ~]$ sqlplus system/oracle@zlm10g
SQL*Plus: Release 10.2.0.5.0 - Production on Tue Jul 29 14:48:50 2014
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> 注意,用@NET SERVICE NAME方式登录,必须保证数据库是open的,否则即便是用对了名字,也会出现这种情况: [oracle@10dg1 ~]$ sqlplus system/oracle@zlm10g
SQL*Plus: Release 10.2.0.5.0 - Production on Tue Jul 29 14:46:16 2014
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
Enter user-name:
[oracle@10dg1 ~]$
实例(对应INSTANCE_NAME),就是管理相关库的内存结构的名字(由SGA、PGA、服务器进程、用户进程、后台进程等组成)
数据库(对应DB_NAME或GLOBAL_NAME),就是实际的磁盘上的文件(数据文件、日志文件、控制文件等),负责保存数据,但由对应的实例来操作它的数据
服务名(对应SERVICE_NAME),就是对外公布的名称,为网络监听服务
其实,在我们传统的概念里,数据库是一个统称,在Oracle中,你可以把“数据库”理解成一个大概念,也要把它理解成一个小概念
1、一个Oracle数据库系统中可以同时安装多个数据库,每一个数据库对应一个唯一的实例(1:1),但是OPS系统除外,可以多个实例同时对一个数据库操作,称为并行服务器(1:N),还有RAC架构,也是多个实例为一个数据库实例服务(1:N),另外还有ASM磁盘组实例,用于管理ASM这种OMF存储结构而诞生的实例,这些都是很容易混淆的概念。
2、SID即是INSTANCE_NAME,SERVICE_NAMES主要用在监听器中。 在list |