https://blog.csdn.net/cH3RUF0tErmB3yH/article/details/79124391 css
--==========================================html
--Oracle实例和Oracle数据库(Oracle体系结构)算法
--==========================================sql
/*数据库
对于初接触Oracle 数据库的人来说。很是easy混淆的两个概念便是Oracle 实例和Oracle 数据库。缓存
这两概念不一样于SQL sever下的实例与数据库,固然也有些相似之处。网络
仅仅是在SQL server咱们根本不需要花费太oracle
多的精力去搞清SQL实例和数据库,因为它简单易于理解。工具
如下简要说明一下SQL实例、数据库,不少其它的是讲post
述Oracle下的实例及数据库。
1、SQL server中的实例与数据库
1.SQL中的实例指的是一个SQL serverserver上仅有一个缺省实例。缺省实例名即为机器名ServerName(或IP)。假设在同一台机器上再安装SQL server,咱们可以对实例命名如ServerName/InstanceName。
即一台SQL serverserver上可以存在多个不一样的实例。一个实例下可以存在多个不一样的数据库。
对于不一样实例下的数据库的訪问。使用ServerName/InstanceName:PortNo就能够实现訪问,缺省实例
为ServerName:PortNo。
2.对不一样的实例配置IP地址。相关的訪问协议。端口等等。
3.实例的可訪问性需要启动该实例相应的相关服务。此处需要注意的是实例名和实例的服务名并不是一样的。缺省的实例的服务名为MSSQLSERVER,而命名实例的服务名为MSSQL$INSTANCE_NAME。
4.实例的相关功能性的设置可以经过外围应用配置来实现。
5.上述完毕后,就能够实现对数据库的訪问。
2、Oracle 实例
一个Oracle Server由一个Oracle实例和一个Oracle数据库组成。
即:Oracle Server = Oracle Instance + Oracle Database
Oracle实例
包括了内存结构(SGA)和一系列后台进程(BackgroundProcess),二者合起来称为一个Oracle实例
即:Oracle Instance = SGA + Background Process
Oracle内存结构
包括系统全局区(SGA)和程序全局区(PGA)
即Oracle Memory Structures = SGA + PGA
SGA由server和后台进程共享
PGA包括单个server进程或单个后台进程的数据和控制信息,与几个进程共享的SGA 正相反,PGA是仅仅被一个进程使用的区域,PGA 在建立进程时分配在终止进程时回收。
即由server进程产生。
1.SGA
系统全局区SGA,SGA = 数据缓冲区+ 重作日志缓冲区+ 共享池+ 大池+ Java 池+ 流池
系统全局区是动态的,由參数SGA_MAX_SIZE决定。
查看当前系统的SGA大小:show parametersga_max_size;
要改动:alter system set sga_max_size=1200m scope=spfile;
因为实例内存的分配是在数据库启动时进行的。因此要让改动生效。要从新启动数据库。
ORACLE10G 引入了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的备份恢复操做、IOserver进程等
Java 池:该程序缓冲区就是为Java 程序保留的。
假设不用Java程序没有必要改变该缓冲区的默认大小
流池(Stream pool):被Oracle流所使用
2.PGA
是为每一个用户进程链接ORACLE数据库保留的内存
进程建立时分配,进程结束时释放,仅仅能被一个进程使用
PGA包括了如下几个结构:
()排序区
()游标状态区
()会话信息区
()堆栈区
由參数:pga_aggregate_target 决定
3.几类进程:用户进程。server进程,后台进程,其它可选进程
用户进程
在用户链接数据库产生,请求oracleserver链接,必需要先创建一个链接。不会直接和oracleserver链接
server进程
当链接实例并创建用户会话时产生。独立server或者提供共享server都能产生
后台进程
维持物理和内存之间的联系,用来管理数据库的读写,恢复和监视等工做。
ServerProcess主要是经过他和user process进行联系和沟通。并由他和user process进行数据的交换。
在Unix机器上。Oracle后台进程相对于操做系统进程。也就是说。一个Oracle后台进程将启动一个操做
系统进程。
在Windows机器上,Oracle后台进程相对于操做系统线程。打开任务管理器。咱们仅仅能看到一个
ORACLE.EXE的进程。但是经过另外的工具。就可以看到包括在这里进程中的线程。
必需要有的后台进程
DBWn -->数据库写进程
PMON -->程序监控进程
SMON -->系统监控进程
LGWr -->日志写进程
CKPT -->检查点进程
可选进程:
ARCN 归档进程
RECO
Snnn
pnnn
DBWn(数据库写进程)
负责将改动过的数据块从数据库缓冲区快速缓存写入磁盘上的数据文件里
写入条件:
发生检查点
脏缓存达到限制
没有自由的缓存
超时发生
表空间离线
表空间仅仅读
表被删除或者截断
開始备份表空间
可以改动数据写进程的数量
altersystem 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进程试图创建与远程server的通讯,当故障消除后,RECO进程本身主动解决所有悬而未决的会话。
ServerProcess(服务进程)
分为专用服务进程(Dedicated Server Process)和共享服务进程(MultiTreaded Server Process)
专用服务进程:一个服务进程相应多个用户进程。轮流为用户进程服务。
用户进程(User Process)、服务进程(Server Process)、后台进程(Background Processes)的启动
用户进程: 数据库用户请求Oralce server会话时被启动
服务进程:当用户会话启动后,链接到Oracle实例时该进程被启动
后台进程:当Oracle实例被启动时,启动相关的后台进程
3、Oracle 数据库
一系列物理文件的集合
包括控制文件、数据文件、联机日志文件、參数文件、password文件等
即:Oracle Database = Controlfile + datafile + logfiel +spfile +..
1.控制文件(controlfile)
数据库的名字,检查点信息,数据库建立的时间戳
所有的数据文件,联机日志文件,归档日志文件信息
备份信息等
2.数据文件(datafile)
包括了用户和应用程序的所有数据
--查看数据文件信息
3.联机日志文件
记录了用户对数据库的所有操做,一个数据库中至少要有两个日志组文件,每一个日志组中至少有一个日志成员
日志组中的多个日志成员是互为镜相关系
4.归档日志文件
Oracle可以执行在两种模式之中。归档模式和非归档模式。在归档模式中。为了保存用户的所有改动,
在联机日志文件切换后和被覆盖之间系统将他们另外保存成一组连续的文件系列,该文件系列就是归档日志文件。
用户恢复意外状况出现的数据丢失、异常等。
5.參数文件(pfile和spfile)
initSID.ora或init.ora文件,一般位于:$ORACLE_BASE/admin//pfile
初始化文件记载了不少数据库的启动參数。如内存。控制文件。进程数等,在数据库启动的时候载入(Nomount时载入)
6.其它文件
password文件:用于Oracle 的具备sysdba权限用户的认证.
告警日志文件:报警日志文件(alert.log或alrt.ora)。记录数据库启动,关闭和一些重要的出错信息
查看路径:select value from v$PARAMETER where name=‘background_dump_dest’;
7.数据库逻辑组织结构
表空间、段、区、块
一个数据库由一个或多个表空间组成,一个表空间仅仅能属于一个数据库
一个表空间由一个或多个多个数据文件组成,一个数据文件仅仅能属于一个表空间
一个数据文件由一个或多个操做系统块组成,每一个操做系统块仅仅能数以一个数据文件
一个表空间可以包括一个或多个段,一个段仅仅能属于一个表空间
一个段由一个或多个区组成,每一个区仅仅能属于一个段
一个区由一个或多个Oracle 块组成,每一个Oracle块仅仅能属于一个区
一个区仅仅能属于一个数据文件,数据文件的空间可以分配到一个或多个区
一个Oracle 块由一个或多个操做系统块组成,一个操做系统块是一个Oracle块的一部分
4、Oracle实例和Oracle数据库的关系
1.一个实例可以装载及打开仅仅一个数据库
2.一个数据库可以被多个实例装载并打开
3.实例与数据库的相应关系是一对一或多对一的关系
最后说一下,我坚持原创,若我写的对你们有帮助,麻烦你们转发或者关注一下,也是对个人一点鼓舞和动力。