ORACLE中的db_name,service_name,instance_name,oracle_sid,global_dbname
2016-04-14 21:28 802人阅读 评论(0) 收藏 举报
分类:
Oracle-Concepts@H_403_9@(2)
版权声明:本文为博主原创文章,未经博主允许不得转载。
init.ora中有db_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:
网络服务名,又可以成为数据库别名。是客户端程序访问数据库时所需要,屏蔽了客户端连接服务器端的
细节,实现了数据库的位置透明特性。
总结起来:
实例就是管理相关库的内存结构的名字,数据库就是实际的磁盘文件,负责保存数据,但由对应的实例来操作他的数据
服务名就是对外公布的名称,为网络监听服务
else:
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指定的数据库。 最后,实例进入第三阶段--启动数据库。这一阶段,实例进行了两项检查:检查点和更改点检查,之后启动数据库。