Oracle-Name-Explain

Oracle中各个名字的理解

init.ora 中有 db_name, instance_name, service_name
在操作系统中需要配置 oracle_sid
listener.ora 中有 sid_name , global_dbname (静态注册的情况下)
tnsnames.ora 中有 service_name , sid

db_name:

对一个数据库 (oracle database) 的唯一标识,这种表示对于单个数据库时足够的,但是对于分布式数据库,可能存在各个数据库的名字可能一样,db_domian 也就是为了解决这一问题,这样数据库的标识是由 db_name 和 db_domain 两个参数共同决定。类似于互联网上的机器名管理,用 db_name.db_domain 来表示一个数据库,并将该数据库的名称称为 global_name。db_name 只能由 字母/数字,'_','#','$' 组成,而且最多 8 个字符

db_domain:

定义一个数据库所在的域,该域的命名是为了数据库管理员为了更好的管理分布式数据库而视情况决定划分的。与互联网的 '域' 并没有关系

glocal_name:

对一个数据库的唯一标识,在创建数据库的时候决定,缺省值为 db_name.db_domain 。在之后对参数文件中 db_name 和 db_domain 参数的任何修改都不影响 global_name 的值,如果要修改 glocal_name ,只能 alter database rename global_name to <db_name,db_domain> 来进行修改,然后修改相应的参数。

service_names:

在 oracle 的并行环境中,一个数据库对应多个实例,就需要多个网络服务名,设置比较繁琐。 service_names 参数就是为了解决这个问题,该参数对应一个数据库,而不是一个实例,缺省值为 db_name.db_domain ,即等于 global_name 。一个数据库可以对应多个 service_names 。

net service name:

网络服务名,又可以成为数据库别名。是客户端程序访问数据库时所需要,屏蔽了客户端连接服务器端的细节,实现了数据库的位置透明特性。

总结起来:

实例就是管理相关库的内存结构的名字,数据库就是实际的磁盘文件,负责保存数据,但由对应的实例来操作他的数据
服务名就是对外公布的名称,为网络监听服务
oracle_sid 这个参数是操作系统中用到的,他是描述默认连接的数据库实例.instance_name是数据库参数。而 oracle_sid 是操作系统的环境变量,oracle_sid 必须与 instance_name 的值一致。

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 指定的数据库。
  最后,实例进入第三阶段--启动数据库。这一阶段,实例进行了两项检查:检查点和更改点检查,之后启动数据库。
Contents
  1. 1. Oracle中各个名字的理解
    1. 1.1. db_name:
    2. 1.2. db_domain:
    3. 1.3. glocal_name:
    4. 1.4. service_names:
    5. 1.5. net service name:
    6. 1.6. 总结起来:
      1. 1.6.1. 1.ORACLE_SID:(ORACLE SYSTEM IDENTIFIER)
      2. 1.6.2. 2.INSTANCE_NAME:
      3. 1.6.3. 3.DB_NAME:
      4. 1.6.4. 4.SERVICE_NAME 和 GLOBAL_DBNAME:
    7. 1.7. 总结:一条 startup 命令,究竟是如何启动庞大的 oracle 数据库的呢?下面我们来贯穿起来整个启动流程,一探究竟:
|