Oracle中数据库和数据库实例的区别和联系

Oracle中数据库和数据库实例的区别和联系,第1张

实例就是一组 *** 作系统进程(或者是一个多线程的进程)以及一些内存。这些进程可以 *** 作数据库;而数据库只是一个文件集合(包括数据文件、临时文件、重做日志文件和控制文件)。在任何时刻,一个实例只能有一组相关的文件(与一个数据库关联)。大多数情况下,反过来也成立:一个数据库上只有一个实例对其进行 *** 作。不过,Oracle的真正应用集群(Real Application Clusters,RAC)是一个例外,这是Oracle提供的一个选项,允许在集群环境中的多台计算机上 *** 作,这样就可以有多台实例同时装载并打开一个数据库(位于一组共享物理磁盘上)。由此,我们可以同时从多台不同的计算机访问这个数据库。

1、每个DATABASE--可包含多个INSTANCE--每个INSTANCE可包含多个TABLESPACE和USER等(授予USER读写TABLESPACE的权限)--每个TABLESPACE可包含多个DBF文件--常用的TABLE或VIEW等都存储在TABLESPACE里。

2、要oracle使用

先安装DATABASE,再创建INSTANCE,用sysdba创建TABLESPACE,添加USER指定TABLESPACE,给USER授权,用USER登录,创建table等

3、oracle实例启动后,会有多个进程提供不同的服务。

Q1:

1

多次安装,才会出现多实例,就是出现多个Oracle_home的情况

2

一次安装是一个实例,一个实例可以建立多个数据库

Q2:

1

如上2可以使用一个实例多个数据来实现。

2

SqlServer同样可以建立1个实例多个数据库,或者多个实例

就是一个表空间里面有N个用户表,系统表,N个存储过程和N个视图这样子? 一个数据库实例就相当于一个sql server(下面简称mss)的一个服务,

假设你的机器叫做AA,安装mss后,和默认建立一个服务名叫做aa,如果再安装一次mss,会提示你是否使用现有的服务名。Oracle的一个实例可以认为是一个服务。

表空间是一个虚拟概念,是一组文件的简称,例如我的Oracle有一个表空间myspace,用来存放临时的数据,我可以给temp指定三个文件,c:myspaceora d:myspace1ora e:myspace2ora 我见一个表,设置这个表的数据存放在myspace上,如果我向表中插入1000行数据,可能会被均匀的存放到myspaceora中。

 Oracle的数据库:

一系列物理文件的集合

包括控制文件、数据文件、联机日志文件、参数文件、密码文件等

即:Oracle Database = Controlfile + datafile + logfiel + spfile +

1控制文件(controlfile)

数据库的名字,检查点信息,数据库创建的时间戳

所有的数据文件,联机日志文件,归档日志文件信息

备份信息等

2数据文件(datafile)

包含了用户和应用程序的所有数据

--查看数据文件信息

3联机日志文件

记录了用户对数据库的所有 *** 作,一个数据库中至少要有两个日志组文件,每个日志组中至少有一个日志成员

日志组中的多个日志成员是互为镜相关系

4归档日志文件

Oracle可以运行在两种模式之中,归档模式和非归档模式。在归档模式中,为了保存用户的所有修改,

在联机日志文件切换后和被覆盖之间系统将他们另外保存成一组连续的文件系列,该文件系列就是归档日志文件。

用户恢复意外情况出现的数据丢失、异常等。

5参数文件(pfile和spfile)

initSIDora或initora文件,通常位于:$ORACLE_BASE/admin/<SID>/pfile

初始化文件记载了许多数据库的启动参数,如内存,控制文件,进程数等,在数据库启动的时候加载(Nomount时加载)

6其他文件

密码文件:用于Oracle 的具有sysdba权限用户的认证

告警日志文件:报警日志文件(alertlog或alrtora),记录数据库启动,关闭和一些重要的出错信息

查看路径:select value from v$PARAMETER where name =‘background_dump_dest’;

7数据库逻辑组织结构

表空间、段、区、块

一个数据库由一个或多个表空间组成,一个表空间只能属于一个数据库

一个表空间由一个或多个多个数据文件组成,一个数据文件只能属于一个表空间

一个数据文件由一个或多个 *** 作系统块组成,每一个 *** 作系统块只能数以一个数据文件

一个表空间可以包含一个或多个段,一个段只能属于一个表空间

一个段由一个或多个区组成,每一个区只能属于一个段

一个区由一个或多个Oracle 块组成,每一个Oracle块只能属于一个区

一个区只能属于一个数据文件,数据文件的空间可以分配到一个或多个区

一个Oracle 块由一个或多个 *** 作系统块组成,一个 *** 作系统块是一个Oracle块的一部分

oracle实例:

一个Oracle Server由一个Oracle实例和一个Oracle数据库组成。

即:Oracle Server = Oracle Instance + Oracle Database

Oracle实例

包括了内存结构(SGA)和一系列后台进程(Background Process),两者合起来称为一个Oracle实例

即:Oracle Instance = SGA + Background Process

Oracle内存结构

包含系统全局区(SGA)和程序全局区(PGA)

即Oracle Memory Structures = SGA + PGA

SGA由服务器和后台进程共享

PGA包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA 正相反,PGA是

只被一个进程使用的区域,PGA 在创建进程时分配在终止进程时回收。即由服务器进程产生。

1SGA

系统全局区SGA,SGA = 数据缓冲区+ 重做日志缓冲区+ 共享池+ 大池+ Java 池+ 流池

系统全局区是动态的,由参数SGA_MAX_SIZE决定。

查看当前系统的SGA大小:show parameter sga_max_size;

要修改:alter system set sga_max_size=1200m scope=spfile;

因为实例内存的分配是在数据库启动时进行的,所以要让修改生效,要重启数据库。

ORACLE 10G 引入了ASMM(自动共享内存管理),DBA只需设置SGA_TARGET,ORACLE就会

自动的对共享池、JAVA池、大池、数据缓冲区、流池进行自动调配。取消自动调配就是

sga_target设为。

数据缓冲区(Database buffer cache):存储从数据文件中获得的数据块的镜像

大小由db_cache_size 决定

查看:show parameter db_cache_size;

设置:alter system set db_cache_size=800M;

重做日志缓冲区(Redo log buffer):对数据库的任何修改都按顺序被记录在该缓冲,然后由LGWR进程将

它写入磁盘,大小由LOG_BUFFER决定

共享池(Shared pool):是SGA中最关键的内存片段,共享池主要由库缓存(共享SQL区和PL/SQL区)和数据

字典缓存组成,它的作用是存放频繁使用的sql,在有限的容量下,数据库系统根据一定的算法决

定何时释放共享池中的sql。

库缓存大小由shared_pool_size 决定

查看:show parameter shared_pool_size

修改:alter system set shared_pool_size=120m;

数据字典缓存:

存储数据库中数据文件、表、索引、列、用户和其它数据对象的定义和权限信息

大小由shared_pool_size 决定,不能单独指定

大池(Large pool):是一个可选的区域,用于一些大型的进程如Oracle的备份恢复 *** 作、IO服务器进程等

Java 池:该程序缓冲区就是为Java 程序保留的。如果不用Java程序没有必要改变该缓冲区的默认大小

流池(Stream pool):被Oracle流所使用

2PGA

是为每个用户进程连接ORACLE数据库保留的内存

进程创建时分配,进程结束时释放,只能被一个进程使用

PGA包括了以下几个结构:

()排序区

()游标状态区

()会话信息区

()堆栈区

由参数:pga_aggregate_target 决定

3几类进程:用户进程,服务器进程,后台进程,其它可选进程

用户进程

在用户连接数据库产生,请求oracle服务器连接,必须要先建立一个连接,不会直接和oracle服务器连接

服务器进程

当连接实例并建立用户会话时产生,独立服务器或者提供共享服务器都能产生

后台进程

维持物理和内存之间的联系,用来管理数据库的读写,恢复和监视等工作。

Server Process主要是通过他和user process进行联系和沟通,并由他和user process进行数据的交换。

在Unix机器上,Oracle后台进程相对于 *** 作系统进程,也就是说,一个Oracle后台进程将启动一个 *** 作

系统进程。

在Windows机器上,Oracle后台进程相对于 *** 作系统线程,打开任务管理器,我们只能看到一个

ORACLEEXE的进程,但是通过另外的工具,就可以看到包含在这里进程中的线程。

必须要有的后台进程

DBWn -->数据库写进程

PMON -->程序监控进程

SMON -->系统监控进程

LGWr -->日志写进程

CKPT -->检查点进程

可选进程:

ARCN 归档进程

RECO

Snnn

pnnn

DBWn(数据库写进程)

负责将修改过的数据块从数据库缓冲区高速缓存写入磁盘上的数据文件中

写入条件:

发生检查点

脏缓存达到限制

没有自由的缓存

超时发生

表空间离线

表空间只读

表被删除或者截断

开始备份表空间

可以修改数据写进程的数量

alter system set db_writer_processes=3 scope=spfile;

PMON(程序监控进程)

清除失效的用户进程,释放用户进程所用的资源。

如PMON将回滚未提交的工作,释放锁,释放分配给失败进程的SGA资源。

清除失败的进程

回滚事务

释放锁

释放其他资源

SMON(系统监控进程)

检查数据库的一致性,当启动失败时完成灾难恢复等

实列恢复时,前滚所有重做日志中的文件,打开数据库为了用户能访问,回滚未提交的事务,释放临时表空间

清除临时空间,聚结空闲空间,从不可用的文件中恢复事务的活动,OPS中失败节点的实例恢复

清除OBJ$表

缩减回滚段

使回滚段脱机

LGWr(日志写进程)

将重做日志缓冲区中的更改写入在线重做日志文件

条件:

提交的时候(commit)

redo log buffer达到1/3满

每隔3秒

有大于1MB 重做日志缓冲区未被写入磁盘

DBWR需要写入的数据的SCN号大于LGWR 记录的SCN号,DBWR 触发LGWR写入

超时

在dbwr进程些之前写日志

CKPT(检查点进程)

DBWR/LGWR的工作原理,造成了数据文件,日志文件,控制文件的不一致,CKPT进程负责同步数据文件,

日志文件和控制文件

CKPT会更新数据文件/控制文件的头信息

条件:

在日志切换的时候

数据库用immediate ,transaction ,normal选项shutdown数据库的时候

根据初始话文件LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET 的设置的数值来确定

用户触发

ARCN(归档进程)

在每次日志切换时把已满的日志组进行备份或归档

条件:

数据库以归档方式运行的时候

RECO

负责解决分布事物中的故障。Oracle可以连接远程的多个数据库,当由于网络问题,有些事物处于悬而未决的状态。

RECO进程试图建立与远程服务器的通信,当故障消除后,RECO进程自动解决所有悬而未决的会话。

Server Process(服务进程)

分为专用服务进程(Dedicated Server Process)和共享服务进程(MultiTreaded Server Process)

专用服务进程:一个服务进程对应多个用户进程,轮流为用户进程服务。

用户进程(User Process)、服务进程(Server Process)、后台进程(Background Processes)的启动

用户进程: 数据库用户请求Oralce server会话时被启动

服务进程:当用户会话启动后,连接到Oracle实例时该进程被启动

后台进程:当Oracle实例被启动时,启动相关的后台进程

ALTER DATABASE MOUNT用来装载数据库,并启动实例。如果是在日志文件中出现,则表示启动数据库。

alter database open将数据库从mount状态切换到打开状态。如果打开成功,就是说这个时候数据库可以提供服务了。

简单来说有时候这两个名词有时可以互换使用、但是其概念还是不同的。

实例 instance =进程 + 进程所使用的内存(SGA)

数据库 database=物理 *** 作系统文件或磁盘(disk)的集合(redo文件+control文件+data文件+临时文件)

数据库实例也称作服务器, 是用来访问数据库文件集的存储结构及后台进程的集合

1、一个数据库可以被多个实例访问(称为真正的应用群集选项)

2、一个实例在其生存期内只能装载(alter database mount)和打开(alter database open)一个数据库

3、Oracle的实例在启动以后,只能load一次数据库,如果想把数据库与Instance断开,然后再重新挂在一个数据库Instance,那么就需要你首先把数据库Instance进程结束,然后重新建立这个instance的一个进程,再load另外一个数据库。否则肯定要抛除ORA-16169错误,说数据库已经被打开。因为一个数据库Instance在其生存期中最多只能load和打开一个instance。

4、另外实例可以在没有数据文件的情况下单独启动 startup nomount , 通常没什么意义

以上就是关于Oracle中数据库和数据库实例的区别和联系全部的内容,包括:Oracle中数据库和数据库实例的区别和联系、oracle 数据库、表空间、实例、服务究竟有什么区别联系、请问oracle数据库多实例是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9851240.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存