tnsnames.ora和listener.ora文件中的几个概念

http://www.cnblogs.com/NickyYe/archive/2011/06/21/2086135.html

其实,在我们传统的概念里,数据库是一个统称的名字,在Oracle中,你可以把“数据库”理解成一个大概念,也要把它理解成一个小概念
1、一个Oracle数据库系统中可以同时安装几个数据库,每一个数据库对应一个唯
一的实例,但是OPS系统除外,可以多个实例同时对一个数据库操作,称为并行服务
2、只是一个名字,SID即是INSTANCE_NAME,SERVICE_NAMES主要用在监听器中。
在listener.ora中有SID_NAME,GLOBAL_DBNAME
这里SID_NAME指数据库的运行的实例名,应该是和instance_name一致
而对于GLOBAL_DBNAME是listener配置的对外网络连接名称,我们在配置tnsname.ora时会考虑这个参数。这个参数可以任意的设置。
另外有一点需要注意,一般我们会在listener.ora手工配置数据库实例的监听配置。但oracle可以通过pmon进程支持自动注册,这时自动注册的对外网络连接名称就会用到init.ora文件中service_name,有多个值的话就会注册多个,对于上面的例子,在这里就会注册serv1和serv2两个监听服务。如果你还手工配置了一个GLOBAL_DBNAME=serv3的监听服务的话,那么对于实例instance_name=aking就会有三个监听服务。
 
在tnsname.ora中有SERVICE_NAME,SID
下面配置客户端的tnsname.ora
对于这里的配置主要要给出要连接的数据库的IP及其连接的实例或服务
在监听配置中我们提到了对外网络连接名称,在这里如果我们用SERVICE_NAME的话,就需要SERVICE_NAME=(GLOBAL_DBNAME或者service_name这里要求oracle已经自动注册到了监听器中),对于SID=(instance_name)即可,譬如:
SERVICE_NAME=serv1,serv2,serv3都可以,或者
SID=aking
 
最后一个是ORACLE_SID参数,这个参数是操作系统中用到的,它是描述我们要默认连接的数据库实例,对于一个机器上有多个实例的情况下,要修改后才能通过 conn / as sysdba连接,因为这里用到了默认的实例名。

 1.db_name:数据库名称,数据库创建好后不可以修改,除非使用nid(9i之后的版本)更改. 
  2.oracle_sid: 数据库实例名称,同一个db_name可以对应多个oracle_sid,数据库创建好后会自动在$ORACLE_HOME/dbs创建init+oracle_sid,orapw+oracle_id,spfile+oracle_sid这些文件. 
  3.service_name:oracle对外提供的服务名,该名称对应tns文件中的service_name,一个数据库可以指定一个或多个service_name,在监听器启动后会列出这些service_name.
设置多个service_name命令如下:
alter system set service_name = name1,name2 scope=spfile;
 
  
在tns文件中如何分别指定service_name 
my_name1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.9.46)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = name1)
    )
  )
 
my_name2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.9.46)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = name2)
    )
  )
 

 

1.ORACLE_SID:(ORACLE SYSTEM IDENTIFIER)

     以环境变量的形式出现的。
     Oracle实例是由SGA和一组后台进程组成的,实例的创建和启动需要一个参数文件,而参 数文件的名称就是由ORACLE_SID决定的。对于init文件,缺省的文件名称是init<ORACLE_SID>.ora,对于 spfile文件,缺省的文件名称是spfile<ORACLE_SID>.ora
     设置不同的ORACLE_SID值,就可以默认使用不同的参数文件启动不同的数据库实例。
     另外,ORACLE_SID的作用远远不是作为一个实例入口这么简单的,在实例启动后,实例名称INSTANCE_NAME也是从ORACLE_SID得到的。
2.INSTANCE_NAME:

     实例名称,这是Oracle实例的名字,用来区分不通的实例。在Oracle9i之前,该名字存储在两个地方:参数文件和数据库的内部试图(V$INSTANCE).
     而在Oracle10g之后的版本中,该名字不再出现在参数文件中,而是动态从系统中获得,默认是取自ORACLE_SID。
     INSTANCE_NAME的作用除了区别不同实例之外,在监听器动态注册时,还会用于向监听器注册。比如instance_name=kanon,监听中将动态注册Instance "kanon",status READY信息。
3.DB_NAME:    

     DB_NAME概念相比于INSTANCE_NAME要重要的多,它决定实例将挂在的数据文件。它出现在数据文件,控制文件,日志文件中。在参数文件中也出现,且必须出现。这个参数涉及到系统的物理文件。

 

4.SERVICE_NAME和GLOBAL_DBNAME:
     这两个参数之所以放在一起讲,是因为他们往往是成对出现的。SERVICE_NAME出现在Tnsnames.ora文件中,是客户端要请求的服务名。
     GLOBAL_DBNAME 出现在Listener.ora文件中,是服务器提供的服务名,可以通过show paramerer service_names查看,并可以通过alter system set service_name='servicename' scope=both来修改。
     二者对应,实现了Listerner.ora/Tnsnames.ora的重要功能----监听、请求与验证。

总结:一条startup命令,究竟是如何启动庞大的oracle数据库的呢?下面我们来贯穿起来整个启动流程,一探究竟:
      首先,系统接收到startup命令,立刻采取行动,取得环境变量ORACLE_SID的值,启动第一阶段--实例创建。系统根据找到的参数文件启动 ORACLE数据库实例,实例启动后,一切由实例接管:注册INSTANCE_NAME,往往INSTANCE_NAME就是来自ORACLE_SID, 接着向监听器动态注册实例自己,并将INSTANCE_NAME写入系统数据字典表,
      接下来,实例进一步读取参数文件,取得DB_NAME、控制文件、检查点等信息,进入第二阶段--挂载数据库。实例从控制文件中取得DB_NAME,并取 得数据文件、日志文件等信息,进行DB_NAME的一致性检验、文件的存在性判断等工作之后,实例将挂载数据库,挂载的数据库就是DB_NAME指定的数 据库。
      最后,实例进入第三阶段--启动数据库。这一阶段,实例进行了两项检查:检查点和更改点检查,之后启动数据库。

http://space.itpub.net/12361284/viewspace-141152

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值