当前位置:  数据库>oracle

Oracle 中极易混淆的几个 NAME 的分析和总结

    来源: 互联网  发布时间:2017-06-08

    本文导语: 我们知道,Oracle中的各种NAME会在我们的各个配置文件中经常出现,大致有以下这些: 在init.ora中有DB_NAME,INSTANCE_NAME,SERVICE_NAME 配置DG的时候,为了区分主备库,还要使用DB_UNIQUE_NAME 在操作系统中需要配置环境变量,ORACLE_SID 在l...

我们知道,Oracle中的各种NAME会在我们的各个配置文件中经常出现,大致有以下这些:

在init.ora中有DB_NAME,INSTANCE_NAME,SERVICE_NAME

配置DG的时候,为了区分主备库,还要使用DB_UNIQUE_NAME

在操作系统中需要配置环境变量,ORACLE_SID

在listener.ora中有SID_NAME,GLOBAL_DBNAME

在tnsname.ora中有SERVICE_NAME,SID,NET SERVICE NAME

那么这么多名字到底有哪些区别呢?我们在使用过程中,又要注意些什么问题呢?下面我来总结一下: 

这么多名字中,有些是初始化参数,如DB_NAME,DB_QUNIQUE_NAME,DB_DOMAIN,GLOBAL_NAME
 
有些则只是一种叫法或者说是概念(并没有一个地方可以去设置它),如NET SERVICE NAME
 
有些则是某些表/视图中的字段名,如V$INSTANCE视图的INSTANCE_NAME
 
有些则是环境变量中的叫法,如ORACLE_SID
 
亦或是监听或客户端配置文件中设置的参数,如SID,SID_NAME,SERVICE_NAME,GLOBAL_DBNAME

--------------------------------------------------------------------------------

Linux-6-64下安装Oracle 12C笔记

在CentOS 6.4下安装Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虚拟机中安装步骤

Debian 下 安装 Oracle 11g XE R2

--------------------------------------------------------------------------------

DB_NAME:

对一个数据库(Oracle database)的唯一标识。这种表示对于单个数据库是足够的,但是随着由多个数据库构成的分布式数据库的普及,这种命令数据库的方法给数据库的管理造成一定的负担,因为各个数据库的名字可能一样,造成管理上的混乱。为了解决这种情况,引入了Db_domain参数,这样在数据库的标识是由Db_name和Db_domain两个参数共同决定的,避免了因为数据库重名而造成管理上的混乱。这类似于互连网上的机器名的管理。我们将Db_name和Db_domain两个参数用’.’连接起来,表示一个数据库,并将该数据库的名称称为Global_name,即它扩展了Db_name。Db_name参数只能由字母、数字、’_’、’#’、’$’组成,而且最多8个字符。特别要注意这个限制,有的时候会掉坑里,我就掉过一次T_T

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 命令进行修改,然后修改相应参数。
 
SERVICE_NAME:

该参数是oracle8i新引进的。在8i以前,我们用SID来表示标识数据库的一个实例,但是在Oracle的并行环境中,一个数据库对应多个实例,这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name参数,该参数对应一个数据库,而不是一个实例,而且该参数有许多其它的好处。该参数的缺省值为Db_name. Db_domain,即等于Global_name。一个数据库可以对应多个Service_name,以便实现更灵活的配置。该参数与SID没有直接关系,即Service name不必与SID一样。

比方说我可以在设置环境变量的时候,设置ORACLE_SID=zlm,那么这个时候SID就是zlm,而在tnsnames.ora中,我可以把SERVICE_NAME改成zlm_SN

##tnsnames.ora

ZLM10G =  ##ZLM10G为NET SERVICE NAME
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.91)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = zlm_SN)
##SERVICE_NAME为zlm_SN,与SID为zlm不同
    )
  )

可以看到,SERVICE_NAME用了刚才在netca中配置的zlm_SN,SID用了ORACLE_SID设置的zlm,并且把tnsnames.ora里系统自动添加的NET SERVICE NAME相关的内容删除了(即由pmon进程自动注册的2个动态监听),只留下自己配置的部分

注意,这里我还使用了netmgr配置了静态监听(从status UNKNOWN其实便可知),静态监听的目的,除了简化配置外,还可以提供在数据库未启动前仍能连接的功能,而不再是等数据库实例启动后,由pmon进程负责动态向监听注册服务,动态监听会通常比较滞后,启动监听后,要等若干分钟,才能看到服务被监听。

##listener.ora

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = zlm_SN)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (SID_NAME = zlm)
    )
  )


经过上面的tnsnames.ora和linstener.ora的配置,当我们查看监听状态的时候,就会发现不同:

$lsnrctl status
......
 
Services Summary...
 Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
 Service "zlm_SN" has 1 instance(s).## 表示对应的SERVICE_NAME为zlm_SN
  Instance "zlm", status UNKNOWN, has 1 handler(s) for this service...  ##表示对应的INSTANCE_NAME为zlm,也即SID和ORACLE_SID
 The command completed successfully

而通常情况下,我们会设置SERVICE_NAME和INSTANCE_NAME一致。这里还要注意的是,SERVICE_NAME虽然可以脱离INSTANCE_NAME搞别名,但是必须对应listener.ora里配置的GLOBAL_DBNAME,否则就算配好了静态监听,也是注册不了服务的

注意,数据库数据文件存放的路径,是根据DB_NAME来确定的,而对于单实例数据库而言,默认与SID和INSTANCE_NAME是一致的,当然,也可以不一致(有DB_DOMAIN的情况下),DBCA的时候可以选择,通常这3个参数在DBCA的时候确认下来后,就基本不再去修改了,那么数据文件路径也就确定下来了,如我的环境中:
 
数据文件就放在/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,才会被监听到

更多详情见请继续阅读下一页的精彩内容:


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle中关数据库对象的统计分析
  • 深入oracle特定信息排序的分析
  • oracle 数据库连接分析
  • Oracle移动数据文件到新分区步骤分析
  • 基于oracle小数点前零丢失的问题分析
  • Oracle date如何比较大小分析
  • Linux上建立第二个ORACLE实例分析
  • Oracle 数据库容灾复制解决方案分析Shar Plex
  • 计算机名称修改后Oracle不能正常启动问题分析及解决
  • oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
  • linux as3 _weblogic8_oracle系统访问50万/日,常常ping不通,分析原因
  • Oracle数据库安全策略分析 (三)第1/2页
  • Oracle数据库安全策略分析(一)第1/2页
  • Oracle数据完整性嵌套事务调用分析研究
  • Oracle In和exists not in和not exists的比较分析
  • oracle修改SGA后无法启动问题分析及解决方法
  • Oracle案例:分析10053跟踪文件
  • Oracle数据库安全策略分析(二)
  • Oracle 9i中自动撤销管理的优点分析
  • Oracle数据库后台进程的功能分析
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • 操作系统 iis7站长之家
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,