加载中…
个人资料
苍蝇也是肉呀
苍蝇也是肉呀
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,492,017
  • 关注人气:209
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

oracle全局数据库名称/数据库实例/ORACLE_SID 的区别

(2012-09-18 22:57:02)
标签:

oracle数据库名

实例名

sid

全局数据库名

数据库域名

分类: Oracle
    我们在使用oracle创建数据库的过程中会让我们输入全局数据库名和SID,他们的区别是:
    全局数据库名主要用于在分布式数据库系统中区分不同的数据库,它是由数据库名和数据库域名组成,格式为“数据库名.数据库域名”,数据库域名允许为空,即只写数据库名。例如上海的数据库可以命名为Oracledb.ShangHai.com,北京的数据库可以命名Oracledb.BeiJing.com。即使数据库名都相同,但是域名不同,也能够区分开。第一个"."之前的部分被看作是数据库名而被保存在"DB_NAME"初始化参数中,之后的部分就是数据库域名而被保存在"DB_DOMAIN"。数据库最长为8个字符,只能包括字母、数字、下划线(_)、英镑符(#)。
    SID:是System Identifier的英文简写,主要用于区分同一台计算机上的同一个数据库的不同实例。
全局数据库名事外部区分的名称,SID是内部区分的名称。SID的最大长度是8,可以由字母数字组成。在安装并创建数据库时没有对此校验,但在OEM(Oracle Enterprise Manager)和ONM中使用SID时会进行校验。

一、什么是数据库名(db_name)?    
  数据库名是用于区分数据的内部标识,就像人的身份证号一样。他用参数DB_NAME表示,如果一台机器上装了多全数据库,那么每一个数据库都有一个数据库名。在数据库安装或创建完成之后,参数DB_NAME被写入参数文件之中。格式如下:    
  [code:1:1aaf156970]    
  .........    
  db_name="orcl"   #(一般不允许修改)    
  db_domain=dbcenter.toys.com    
  instance_name=orcl    
  service_names=orcl.dbcenter.toys.com    
  control_file=(...............    
  .........    
  [/code:1:1aaf156970]
 在创建数据库时就应考虑好数据库名,并且在创建完数据库之后,数据库名不宜修改,即使要修改也会很麻烦。因为,数据库名还被写入控制文件中,控制文件是以 二进制型式存储的,用户无法修改控制文件的内容。假设用户修改了参数文件中的数据库名,即修改DB_NAME的值。但是在Oracle启动时,由于参数文 件中的DB_NAME与控制文件中的数据库名不一致,导致数据库启动失败,将返回ORA-01103错误。 

数据库名的作用
数据库名是在安装数据库、创建新的数据库、创建数据库控制文件、修改数据结构、备份与恢复数据库时都需要使用到的。
有很多Oracle安装文件目录是与数据库名相关的,如:
winnt: d:/oracle/product/10.1.0/oradata/DB_NAME/...
Unix: /home/app/oracle/product/10.1.0/oradata/DB_NAME/...
pfile:
winnt: d:/oracle/product/10.1.0/admin/DB_NAME/pfile/ini.ora
Unix: /home/app/oracle/product/10.1.0/admin/DB_NAME/pfile/init$ORACLE_SID.ora
跟踪文件目录:
winnt: /home/app/oracle/product/10.1.0/admin/DB_NAME/bdump/...
另外,在创建数据时,careate database命令中的数据库名也要与参数文件中DB_NAME参数的值一致,否则将产生错误。
同样,修改数据库结构的语句alter database, 当然也要指出要修改的数据库的名称。

如果控制文件损坏或丢失,数据库将不能加载,这时要重新创建控制文件,方法是以nomount方式启动实例,然后以create controlfile命令创建控制文件,当然这个命令中也是指指DB_NAME。
还有在备份或恢复数据库时,都需要用到数据库名。
总之,数据库名很重要,要准确理解它的作用。

查询当前数据名
方法一:select name from v$database;
方法二:show parameter db
方法三:查看参数文件。

修改数据库名
前面建议:应在创建数据库时就确定好数据库名,数据库名不应作修改,因为修改数据库名是一件比较复杂的事情。那么现在就来说明一下,如何在已创建数据之后,修改数据库名。步骤如下:
1.关闭数据库。
2.修改数据库参数文件中的DB_NAME参数的值为新的数据库名。
3.以NOMOUNT方式启动实例,修建控制文件(有关创建控制文件的命令语法,请参考oracle文档)

 
  二、什么是数据库实例名(instance_name)    
  数据库实例名则用于和操作系统之间的联系,用于对外部连接时使用,可以和数据库名一样,也可以不一样。该参数为instance_name,在winnt平台中,实例名同时也被写入注册表。在操作系统中要取得与数据库之间的交互,必须使用数据库实例名。例如,要和某一个数据库 server连接,就必须知道其数据库实例名,只知道数据库名是没有用的,与数据库名不同,在数据安装或创建数据库之后,实例名可以被修改。数据库安装完 成后,该实例名被写入数据库参数文件pfile中,格式如下:    
  [code:1:1aaf156970]    
  db_name="orcl"   #(一般不允许修改)    
  db_domain=dbcenter.toys.com    
  instance_name=orcl   #(可以修改,可以与db_name相同也可不同)    
  service_names=orcl.dbcenter.toys.com    
  control_file=(...............    
  .........    
  [/code:1:1aaf156970]
  数据库名与实例名之间的关系。    
 在一般情况下,数据库名和实例名是一对一的关系,但如果在oracle并行服务器架构(即oracle实时应用集群)中,数据库名和实例名是一对多的关系。数据库名和实例名确定一个数据库,一个数据库中可以有多个实例,相互运行不受影响。 

查询当前数据库实例名
方法一:select instance_name from v$instance;
方法二:show parameter instance
方法三:在参数文件中查询。

  三、操作系统环境变量(ORACLE_SID)    
  在实际中,对于数据库实例名的描述有时使用实例名(instance_name)参数,有时使用ORACLE_SID参数。这两个都是数据库实例名,它们有什么区别呢?(经常弄混)    
  [code:1:1aaf156970]    
  (ORACLE_SID)    
  OS<---------------->   ORACLE   数据库   <--------(Instance_name(实例名))    
  [/code:1:1aaf156970]
  上图表示实例名instance_name、ORACLE_SID与数据库及操作系统之间的关系,虽然这里列出的两个参数都是数据库实例名,但 instance_name参数是ORACLE数据库的参数,此参数可以在参数文件中查询到,而ORACLE_SID参数则是操作系统环境变量。    
  操作系统环境变量ORACLE_SID用于和操作系统交互。也就是说,从操作系统的角度访问实例名,必须通过ORACLE_SID。在winnt不台,ORACLE_SID还需存在于注册表中。且ORACLE_SID必须与instance_name的值一致,否则,你将会收到一个错误,在unix平台,是“ORACLE not available”,在winnt平台,是“TNS:协议适配器错误”。此参数与 ORACLE_BASE、ORACLE_HOME等用法相同。在数据库安装之后,ORACLE_SID被用于定义数据库参数文件的名称。如:    
  $ORACLE_BASE/admin/DB_NAME/pfile/init$ORACLE_SID.ora。    
  定义方法:    
  [code:1:1aaf156970]    
  export   ORACLE_SID=orcl    
  [/code:1:1aaf156970]
  如果在同一服务器中创建了多个数据库,则必然同时存在多个数据库实例,这时可以重复上述定义过程,以选择不同实例。    
  还可以用    
  [code:1:1aaf156970]    
  [oracle@Datacent]$   .   oraenv    
  [/code:1:1aaf156970]
  来切换不同的ORACLE_SID来通过操作系统来启动不同的实例(instance) 
数据库实例名与网络连接
数据库实例名除了与操作系统交互外,还用于网络连接的oracle服务器标识。当你配置oracle主机连接串的时候,就需要指定实例名。当然8i以后版本的网络组件要求使用的是服务名SERVICE_NAME。

四、数据库域名
什么是数据库域名?

在分布工数据库系统中,不同版本的数据库服务器之间,不论运行的操作系统是unix或是windows,各服务器之间都可以通过数据库链路进行远程复制,数据库域名主要用于oracle分布式环境中的复制。举例说明如:
全国交通运政系统的分布式数据库,其中:
福建节点: fj.jtyz
福建厦门节点: xm.fj.jtyz
江西: jx.jtyz
江西上饶:sr.jx.jtyz
这就是数据库域名。
数据库域名在存在于参数文件中,他的参数是db_domain.

查询数据库域名
方法一:select value from v$parameter where name = 'db_domain';
方法二:show parameter domain
方法三:在参数文件中查询。

全局数据库名
全局数据库名=数据库名+数据库域名,如前述福建节点的全局数据库名是:oradb.fj.jtyz

五、数据库服务名
什么是数据库服务名?
从oracle9i版本开始,引入了一个新的参数,即数据库服务名。参数名是SERVICE_NAME。
如果数据库有域名,则数据库服务名就是全局数据库名;否则,数据库服务名与数据库名相同。

查询数据库服务名
方法一:select value from v$parameter where name = 'service_name';
方法二:show parameter service_name
方法三:在参数文件中查询。

数据库服务名与网络连接
从oracle8i开如的oracle网络组件,数据库与客户端的连接主机串使用数据库服务名。之前用的是ORACLE_SID,即数据库实例名。


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有