一个完整的Oracle数据库包括两个部分:数据库和数据库实例



(1)数据库

数据库是存储数据的多个物理文件的集合,如控制文件,数据文件,参数文件,日志文件,临时文件等 ,它是静态的、永久的,只要文件存在它就存在。数据库名(db_name)就是对数据库的标识。

(2)数据库实例

oarcle数据库服务器主要有两部分组成:物理数据库和数据库管理系统
数据库管理系统是用户和物理数据库之间的一个中间层,是软件层。这个软件层具有一定的结构,这个结构又被称为实例结构。
在启动数据库时,oracle首先要在内存中获取、划分、保留各种用途的区域,运行各种用途的后台进程,即创建一个实例(instance),然后由该实例装载、打开数据库,最后由这个实例来访问和控制数据库的各种物理结构。 数据库至少由一个oracle实例引用,该实例由oracle系统标识符(system identity)唯一标识,用于区别此计算机上的任何其他实例。

在启动数据库并使用数据库的时候,实际上是连接到该数据库的实例,通过实例来连接、使用数据库。所以实例是用户和数据库之间的一个中间层。
实例是由操作系统的内存结构和一系列进程所组成的,可以启动和关闭。
一台计算机上可以创建多个oracle数据库,当同时要使用这些数据库时,就要创建多个实例。为了不使这些实例相互混淆,每个实例都要用称为SID的符号来区分,即创建这些数据库时填写的数据库SID。

数据库实例是用户访问数据库的中间层,是使用数据库的手段,它为用户访问数据库提供了必要的内存空间和多个工作进程,它是动态的、临时的,简单的说,Oracle实例就是由内存空间和工作进程两部分组成。 我们只能通过实例操作数据库,同一时间,一个实例只能打开一个数据库,也就是一个实例只能操作或管理一个数据库,但一个数据库可以被多个是实例打开。实例可以在没有数据文件的情况下单独启动,(startup nomount)但这通常是没有意义的,一个实例在生成期内只能装载(alter database mount)和打开(alter database open)数据库。

ORACLE实例有两种类型:单进程实例 和 多进程实例。

单进程ORACLE(又称单用ORACLE)是一种数据库系统,一个进程执行全部ORACLE代码。由于ORACLE部分和客户应用程序不能分别以进程执行,所以ORACLE的代码和用户的数据库应用是单个进程执行。在单进程环境下的ORACLE 实例,仅允许一个用户可存取。例如在MS-DOS上运行ORACLE 。

多进程ORACLE实例(又称多用户ORACLE)使用多个进程来执行ORACLE的不同部分 ,对于每一个连接的用户都有一个进程。
在多进程系统中,进程分为两类:用户进程 和ORACLE进程。当一用户运行一应用程序,如PRO*C程序或一个ORACLE工具(如SQL*PLUS),为用户运行的应用建立一个用户进程。

进程是操作系统的基本执行单元,它是具有独立数据处理功能的正在执行的程序。Oracle系统的进程包括三种类型:

①用户进程

用户在客户端运行一个应用程序(例如 Pro*C 程序)或 Oracle 工具(如OEM或 SQL*Plus)时,系统将为该用户创建一个用户进程。

用户进程负责与Oracle服务器建立连接和会话并向服务器发出数据处理请求,得到处理结果后再输出给用户。

Oracle允许为一个用户同时创建多个会话 。

②服务进程

Oracle为用户进程创建一个服务进程或分配一个空闲的服务进程。

服务进程负责在用户进程和Oracle实例之间调度请求和响应,主要完成:

•解析与运行应用程序提交的SQL语句;

•数据处理时用到的数据如果不在SGA 中,负责将所需的数据块从磁盘上的数据文件读入SGA 的数据缓存区;

•以用户进程能理解的形式返回SQL 语句的执行结果。

用户进程和服务进程之间的对应关系是由Oracle数据库的工作模式决定的。数据库通常有两种工作模式:




image 专用服务器模式
image

共享服务器模式

                                                                        

③后台进程

Oracle实例启动时,为了保证该实例的正常使用,系统将为该实例启动一些后台进程。

这些进程是操作数据库的基础,不管有没有用户连接数据库,这些进程都会被启动。

后台进程包括:

DBWR(Database Write) : 数据库写入程序

LGWR(Log Write) : 日志写入程序

CKPT(Checkpoint) : 检查点

SMON (System Monitor): 系统监控

PMON(Process Monitor) : 进程监控

ARCH(Archive) : 归档

RECO : 恢复

LCKn : 封锁;

(6)实例名(instance_name)

数据库实例名(instance_name)用于对外部连接。在操作系统中要取得与数据库的联系,必须使用数据库实例名。例如,要去连接一个数据库服务器,就必须知道其数据库实例名。

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

(7)服务名(Service_name)

该参数是oracle8i新引进的。在8i以前,我们用SID来表示标识数据库的一个实例,但是在Oracle的并行环境中,一个数据库对应多个实例,这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name参数,该参数对应一个数据库,而不是一个实例,而且该参数有许多其它的好处。该参数的缺省值为Db_name. Db_domain,即等于Global_name。一个数据库可以对应多Service_name,以便实现更灵活的配置。该参数与SID没有直接关系,即不必Service name 必须与SID一样。如果数据库有域名,则数据库服务名就是全局数据库名,否则,数据库服务名与数据库名相同。

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

注意:方法三:select instance_namefrom v$instance; 的值是来自操作系统的oracle_sid,oracle_sid是操作系统的环境变量。

以上这些概念非常容易混淆,且不容易理解,有的可能在使用过程中才能理解的比较透彻。

        </div>

猜你喜欢

转载自blog.csdn.net/m0_37550986/article/details/81408353
今日推荐