您的位置:首页 > 数据库 > Oracle

Oracle数据库中几个名字的区别和联系

2013-12-29 12:54 232 查看
在oracle数据库中经常会看到这样几个名字:ORACLE_SID , database_name ,db_unique_name, instance_name , service_name ,dbid

用DBCA建库的时候还会需要填'Global Database Name' 和 'SID' 。

虽然在实际应用中这几个名字对应的值都是一样的,但是理解了这几个名字的区别和联系对我们学习Oracle是很有帮助的。

 

首先先说容易理解的和显而易见的名字:

ORACLE_SID 是操作系统的环境变量,我们可以在操作系统下执行

#exportORACLE_SID=PROD

来指定ORACLE_SID的值,这个命令通常是写在操作系统用户oracle的.bash_profile文件里。

我们还可以用操作系统命令

# echo $ORACLE_SID 来查看ORACLE_SID的值 。

 

还有db_name ,从面理解就是数据库的名字了,

而instance_name ,就是实例的名字了。

 

下面我们做一下小实验,来理解下这几个名字和区别和联系。

实验原理就是我们建库的时候我们能指定的名字我统统指定不同的值,最后建完库之后看看效果。

实验环境 操作系统:Oracle EnterpriseLinux Server release 5.8

Oracle 软件版本: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

 

1.首先我们先配置ORACLE_SID=SID=SID

[oracle@db01 ~]$export ORACLE_SID=SID

[oracle@db01 ~]$

[oracle@db01 ~]$

[oracle@db01 ~]$echo $ORACLE_SID

SID

[oracle@db01 ~]$

 

2.然后我们DBCA开始建库,建库过程不详细说,Global Database Name 设置为NAME.DOMAIN  SID设置为OSID。

 


3.等待建库完成,在等待的时间里大家可以刷刷微博神马的。

 


 

4.好了装完了

 


5.查看结果:

 首先$ORACLE_HOME/dbs下多了这样几个文件:

 


尝试用sqlplus连接数据库:

 


空实例,我们开始设置的export ORACLE_SID=SID根本没有起作用。

查看一下操作系统进程,



看进程名字后面都是OSID  说明现在运行的实例是OSID

将ORACLE_SID=OSID 试下:

 


 


 






 

我们可以看到:

instance_name 来自我们填的SID

db_name , db_unique_name , service_name 来自Global Database Name。

dbid 是数据库根据某种算法得出的一个数。

 

6 还没完 ,下面我们试试改变instance_name

关闭数据库,设置环境变量ORACLE_SID为SID

 


我们还需要修改参数文件的名字:



打开数据库 :

 


 


我们改变了instance_name 的值。

 

我们还可以通过改变参数service_name 的方法来增加一个service



并且这个service可用,需要在tnsnames.ora文件的连接串的service_name=SERVICE.DOMAIN

注:补充,如果建库时Global Database Name加了域名,在tnsnames.ora文件的service_name段也要加域名,此例中不能只写service 

 


 

 

dbid可以通过工具DBNEWID来修改,这里暂不做介绍。

 

由于database_name 记录在控制文件,数据库文件,日志文件的文件头中,修改database_name是一件很困难的事情。

 

 

7总结:

ORACLE_SID是环境变量,设置好ORACLE_SID后,执行sqlplus 会尝试连接$ORACLE_SID命名的实例,如果此名称的实例已经启动,会连接上,如果内存中没有此名称的实例,会连接到一个空实例。。

instacne_name 是实例的名字,其来源来自建库是填的SID 。实例是一块内存结构和进程的组合。每次启动实例时,我们可以指定不同的名字去打开同一个数据库,一个实例一次只能打开一个数据库。

database_name 是数据库的名字,其来源来自建库是填的Global Database Name 或参数文件中的db_name 。 对应的是一个操作系统文件的集合,一个数据库可以同事被一个或多个实例打开。

dbid是一个数据库内部标识,可以用工具dbnewid来修改。

service_name 是数据库提供服务的名字,一个数据库可以提供多个服务,默认等于database_name.通常在tns连接方式中指定service_name。 在RAC环境中,可以利用多个service来应用负载均衡策略。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: