如何区分Oracle的数据库,实例,服务名,SID

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何区分Oracle的数据库,实例,服务名,SID相关的知识,希望对你有一定的参考价值。

实例

    实例就是一组操作系统进程(或者是一个多线程的进程)以及一些内存。这些进程可以操作数据库;实例 就是治理相关库的内存结构的名字(由SGA、PGA、服务器进程、用户进程、后台进程等组成)

    数据库

数据库只是一个文件集合(包括数据文件、临时文件、重做日志文件和控制文件)。在任何时刻,一个实例只能有一组相关的文件(与一个数据库关联)。数据库 就是实际的磁盘上的文件(数据文件、日志文件、控制文件等),负责保存数据,但由对应的实例来操作它的数据

3.服务名

服务名 就是对外公布的名称,为网络监听服务

4.SID

sid用于实例区分各个数据库,service name用于外部链接。

参考技术A   这里我说简单一点吧,理论上的东西有点绕。
  数据库:有一定的方法去管理的,按照一定方式存放和读取数据的空间。(比如oracle有表空间,数据文件,视图,角色,权限等进行管理和存放数据)
  实例:说白了,就是给上面的数据库分配的内存,以及为了这个数据库启动的进程。(比如,在oracle数据库启动后,非配给这个数据库sga的内存空间,而且启动了smon(oracle系统管理进程),pmon(内存管理进程),ckpt(检查点进程)等,这两项和在一起,叫做实例)
  服务名:服务名其实没有明确的定义(个人理解),基本应用是在配置监听的时候才有用(rac的时候有些用处),这个名字其实是随便起的,没有什么固定的意义,只要你能分辨出来,其实起什么名字都行。(中文的好像不行)
  SID:是数据库和实例的标识。(假设你的机器上有两台数据库,而且都启动了,那么怎么证明这个这部分SGA是分给A数据库的,怎么证明这个pmon进程是B数据库的,其实就是通过这个标识去判断的。一般认为每个数据库的SID在同一个网络中唯一就行。)
  

Oracle 数据库名实例名Oracle_SID

本文参考自ORACLE 数据库名、实例名、ORACLE_SID的区别,纯属读书笔记,加深记忆

在ORACLE7、8数据库中只有数据库名(db_name)和数据库实例名(instance_name)。在ORACLE8i、9i中出现了新的参数,即数据库域名(db_domain)、服务名(service_name)、以及操作系统环境变量(ORACLE_SID)。这些都存在于同一个数据库中的标识,用于区分不同数据库的参数。

1、数据库名

数据库名是用于区分数据的标识,是以二进制形式存储于数据库控制文件中的参数,在数据库安装或者创建之后不得修改,在数据库创建之后,该参数将被写入到数据库控制参数文件pfile中,其基本格式如下:

......... 
db_name="orcl" #(不允许修改) 
db_domain=dbcenter.toys.com 
instance_name=orcl 
service_names=orcl.dbcenter.toys.com 
control_file=(............... 
.........

注:每一个运行Oracle 8i及以上的数据库都有一个数据库名。但如果服务器程序创建了两个数据库,那么就会有两个数据库名,它们分别存储与不同的数据库控制参数文件pfile中,分别控制着对应的数据库。

 

2、数据库实例名

数据库实例名是用于和操作系统之间的联系,用于对外部连接时使用。在操作系统中,要取得于数据库之间的联系必须通过实例名。比如:要和某一个数据库Server进行连接,必须通过实例名,只知道数据库名是没用的,与数据库名不同的是,数据库实例名在数据库的安装或者创建之后,是可以被修改的。数据库在安装之后,对应的实例名会被写入到数据库控制参数文件pfile(格式如下代码块)中,可以通过修改这个文件,来修改Oracle数据库的实例名,当然,数据库名是不能修改的!

db_name="orcl" #(数据库名:不允许修改) 
db_domain=dbcenter.toys.com 
instance_name=orcl #(数据库实例名:可以修改,可以与db_name相同也可不同) 
service_names=orcl.dbcenter.toys.com 
control_file=(............... 
.........

 

3、数据库名和实例名之间的关系

a、数据库名于实例名之间的关系一般是一一对应,有一个数据库名,就有一个实例名。当然,如果在服务器上创建两个数据库,那么就会有两个数据库名和两个实例名;

b、通过一个数据库名和一个实例名可以确定一个可用的数据库

重点:在oracle 8i及以上的oracle数据库安装过程中会有

左图红框的数据库安装类型,是oracl并行服务器结构,该结构下的数据库和实例不是一一对应的关系,而是一对多的关系(一个数据库对应多个实例,即同一时间一个用户只和一个用户联系,当某一实例出现故障,其他实例自动服务,以保证数据库的安全运行,这个安装模式适合用于高并发访问的情况)

 

4、操作系统环境变量(Oracle_SID)

在很多情况下,对于数据库实例名的描述,有些时候使用(instance_name)参数,有些时候使用Oracle_SID参数,这两个都是数据库实例名参数,但是以下是他们的区别:

a、Oracle_SID是操系统环境变量

b、instance_name是Oracle数据库配置文件参数

c、操作系统想要获得数据库实例名必须通过系统环境变量Oracle_SID,而Oracle数据库如果想获得数据库实例名,则可以通过参数文件得到。Oracle_SID此参数与ORACLE_BASE、ORACLE_HOME等用法相同。在数据库安装之后,ORACLE_SID被用于定义数据库参数文件的名称。如:$ORACLE_BASE/admin/DB_NAME/pfile/init$ORACLE_SID.ora。

定义方法:

export ORACLE_SID=orcl

注:如果在同一服务器中创建了多个数据库,则必然同时存在多个数据库实例,这时可以重复上述定义过程,以选择不同实例。还可以用

[oracle@Datacent]$ . oraenv

来切换不同的ORACLE_SID来通过操作系统来启动不同的实例(instance)

 

以上是关于如何区分Oracle的数据库,实例,服务名,SID的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 服务名/实例名,Service_name 和Sid的区别

Oracle 实例名(SID) 和 服务名(SERVICE_NAME)的区别

Oracle 实例名/服务名 请问SID和Service Name有什么区别啊

oracle 数据库实例服务名SID

oracle 数据库实例服务名SID

Oracle 实例名/服务名 请问SID和Service_Name有什么区别啊?