ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SID,DB_NAME,DB_DOMAIN(转)

SID,DB_NAME,DB_DOMAIN(转)

原创 Linux操作系统 作者:tcczxhj 时间:2009-06-14 10:07:52 0 删除 编辑

Oracle10g中,关于数据库名,SID,全局数据库名,数据库域名,数据库服务名,数据库实例名,呵,太多名称了,那么这些名称都是什么概念,有什么作用?

1、数据库名(DB_NAME)

就是一个数据库的标识,每台服务器上的每个数据库都有一个数据库名,就是我们创建数据库时起的名字,在数据库创建完毕,数据库名就被写入参数文件,存放在DB_NAME参数中

查看数据库名:

方法一: select name from v$database;

方法二:show parameter db

方法三:查看参数文件

2.实例和数据库

实例和数据库之间的区别如下:

(1)实例是临时的,它只在相关的进程和内存集合存在时存在;数据库是永久的,只要文件存在它就存在

(2)一个实例在其生存期内可安装和打开单个数据库;数据库可以被很多实例安装和打开,或者一个接一个的实例安装和打开,或者由多个实例同时安装和打开(RAC)

顺便提一下RAC,简单来说RAC就是多个实例同时打开一个数据库文件的系统,在结构上是多台机器,每天机器运行一个实例,每个实例都打开同一个数据库(这个是用磁盘共享技术实现的),这些实例之间需要同步高速缓存,这样保证多个实例是完全一致的,不会相互冲突乃至覆盖。

数据库实例名(instance_name)用于对外部连接。在操作系统中要取得与数据库的联系,必须使用数据库实例名。例如,要去连接一个数据库服务器,就必须知道其数据库实例名,只知道数据库名是没有用的。与数据库名不同,在数据安装或创建数据库之后,实例名可以被修改。数据库名和实例名可以相同也可以不同。在一般情况下,数据库名和实例名是一对一的关系,但如果在oracle并行服务器架构(即oracle实时应用集群)中,数据库名和实例名是一对多的关系(一个数据库对应多个实例,同一时间内用户只一个实例相联系,当某一实例出现故障,其它实例自动服务,以保证数据库安全运行)

查询当前数据库实例名

方法一:select instance_name from v$instance;

方法二:show parameter instance

3ORACLE_SID

在实际中,对于数据库实例的标识有时使用实例名,有时使用ORACLE_SID,它们有什么区别呢?

 

(ORACLE_SID)

OS<----------------> ORACLE 数据库 <--------(instance_name(实例名))

上图表示实例名instance_nameORACLE_SID与数据库及操作系统之间的关系,虽然这里列出的两个参数都是数据库实例名,但 instance_name参数是ORACLE数据库的参数,此参数可以在参数文件中查询到;而ORACLE_SID参数则是操作系统环境变量,与 ORACLE_BASEORACLE_HOME等用法相同,用于和操作系统交互。也就是说,在操作系统中要想得到实例名,就必须使用 ORACLE_SID。且ORACLE_SID必须与instance_name的值一致,否则,你将会收到一个错误,在unix平台,是“ORACLE not available,winnt平台,是“TNS:协议适配器错误”。

4、数据库域名与全局数据库名

使用数据库名(da_name)对一个数据库进行唯一标识,这种表示对于单个数据库是足够的,但是随着由多个数据库构成的分布式数据库的普及,这种命令数据库的方法给数据库的管理造成一定的负担,因为各个数据库的名字可能一样,造成管理上的混乱。为了解决这种情况,引入了db_domain参数,这样在数据库的标识是由db_namedb_domain两个参数共同决定的,避免了因为数据库重名而造成管理上的混乱。这类似于互连网上的机器名的管理。我们将db_namedb_domain两个参数用‘.’连接起来,表示一个数据库,并将该数据库的名称称为global_name,即它扩展了 db_namedb_name参数只能由字母、数字、’_’、’#’、’$’组成,而且最多8个字符。

数据库域名(db_domain):定义一个数据库所在的域,该域的命名同互联网的’域’没有任何关系,只是数据库管理员为了更好的管理分布式数据库而根据实际情况决定的。当然为了管理方便,可以将其等于互联网的域。

全局数据库名(global_name):对一个数据库(Oracle database)的唯一标识,oracle建议用此种方法标识数据库。该值是在创建数据库时决定的,缺省值为db_name. db_domain。在以后对参数文件中db_namedb_domain参数的任何修改不影响global_name的值,如果要修改 Global_name,只能用alter database rename global_name to 命令进行修改,然后修改相应参数。

全局数据库名=数据库名.数据库域名

ORACLE10g 文档中这样说

A database forms a global database name by prefixing the database network domain,specified by the DB_DOMAIN initialization parameter at database creation, with the individual database name, specified by the DB_NAME initialization parameter.

 

5、数据库服务名

该参数是oracle8i新引进的。在8i以前,我们用SID来表示数据库的一个实例,但是在 Oracle的并行环境中,一个数据库对应多个实例,这样就需要多网络服务名,设置繁琐。为了方便并行环境中的设置,引进了service_name参数。该参数对应一个数据库,而不是一个实例,而且该参数有许多其它的好处。

该参数的缺省值为db_name.db_domain,即等于global_name.如果数据库有域名,则数据库服务名就是全局数据库名;否则,数据库服务名与数据库名相同。一个数据库可以对应多个service_name,以便实现更灵活的配置。该参数与SID没有直接关系,即 service_name 不必与SID一样。

Oracle8i开始的oracle网络组件,数据库与客户端连接的主机字符串使用的是数据库服务名。之前用的是SID,即数据库实例名。

 

查询数据库服务名

方法一:select value from v$parameter where name = 'service_name';

方法二:show parameter service_name

6、网络服务名

网络服务名(net_service_name),又可以称为数据库别名(database alias)。是客户端程序访问数据库时所需要,屏蔽了客户端如何连接到服务器端的细节,实现了数据库的位置透明的特性。网络服务名被记录在 tnsnames.ora文件中。

  网络服务名是从客户端的角度出发,当客户端连接远程数据库或其他服务时,可以指定网络服务名。因此需要使用一个或多个命名方法将此Net服务名解析为连接数据库或其他服务的连接描述符,看下面:

  [本地]——将存储在本地客户机的tnsnames.ora文件中的网络服务名解析为连接描述符。

  [Oracle Names]——由Oracle名字服务器提供为网络上的每个Oracle Net服务提供解析方法

  [主机名]——通过TCP/IP环境中的主机别名连接到Oracle数据库服务

  [Sun NIS]/[DCE CDS]——专用系统用的,在Windows 2000系统环境下不适用

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10804699/viewspace-606253/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-03-06

  • 博文量
    47
  • 访问量
    100266