Oracle-dba-数据库体系结构

Oracle实例
内存区和后台进程组成
访问数据库必须启动实例,
启动实例时-先分配内存区-启动后台进程-后台进程执行库数据输入,输出以及监控其他oracle进程
数据库启动进程中有5个进程必须启动。监控进程(SMON),进程监控(PMON),数据库编写进程(DBWR),日志写进程(LGWR),检查点进程(CKPT),否则实例无法创建,数据库启动过程可以在告警日志查看。
Oracle服务器
由据库实例和数据库文件组成,也就是数据库管理系统(DBMS)
数据库服务作用:维护实例,数据库文件,在用户建立与服务器的连接时启动服务器进程并分配pga
数据库文件
数据文件(data files):数据库信息最终存储位置
控制文件(control files):包含维护数据库和验证数据库完整性的信息,2进制文件
重做日志文件(redo log files):包含数据库发生变化的记录,发生故障时用于数据恢复

参数文件,密码文件,归档日志文件
参数文件(paramter file):定义数据库实例的特性,包含sga中内存结构分配空间的参数,如分配数据库告诉缓冲区的大小…
密码文件(password file):密码文件授予用户启动和关闭数据库实例,在刚安装数据库时,oracle默认用户名和密码就在密码文件中,oracle可以依此判断用户操做权限
归档日志文件(archive log files):归档日志文件是日志文件的脱机备份,发生故障后进行数据恢复可能使用该文件
数据库连接与会话
数据库连接
连接值用户进程与数据库服务器之间的通信途径,一个连接可以有多个会话
Oracle3种连接方式
1:基于主机的方式(Host-Based):此方式种,服务器和客户端运行在同一台计算机上,用户可以直接连接数据库服务器
2:基于客户机-服务器的方式(Client-Server):该方式中数据库服务器和客户端运行在不同的计算机上,客户通过网络连接数据库服务器,
3:客户-应用服务器-数据库服务器方式(client-application server-server):这种方式称为3层访问方式,用户首先访问应用服务器,然后由应用服务器连接数据库服务器,应用服务器如中介,完成客户和数据库的交互。
会话

值一个明确的数据库连接,一旦采用上述3种其中之一连接数据库服务器方式,就把这样的连接称之为会话。
专有连接:用户通过工具在专用连接的情况下访问数据库,账户密码服务器校验通过后,服务器就会自动创建一个与该用户进程相对应的服务器进程。2者 1对1关系。
共享连接:在共享服务器配置的情况下,多个用户进程可以同时共享服务器进程。多对1关系
select serial#,username,status,server,process,program,logon_time from v$session;
oracle数据库内存结构
内存结构由2部分组成
SGA(系统全局区):数据库实例的一部分,当数据库实例启动时,会首先分配系统全局区,在系统全局区中包含几个重要的内存区,即数据库高速缓存(Database buffer cache),重做日志缓存(Redo log buffer cache),共享池(Shared pool),大池(Large Pool)和java池(java pool)
PGA(程序全局区):程序全局区不是实例一部分,当服务器进程启动时,才分配PGA

SGA
共享池(Shared pool)
作用:共享sql/plsql代码,即把解析的sql代码的结果在这里缓存。Plsql不仅在这里缓存还在这里共享
由2部分组成,库高速缓存(library cache)和数据字典高速缓存(data dict cache)。
库高速缓存
存储最近使用的sql/plsql语句,
容量有限,不能直接设置容量,但是可以通过设置共享池的大小间接的修改。而共享池是sga的一部分,所以共享池不能超过sga。
内部采用lru(least recently used)算法管理库高速缓存,基本思想,把一段时间内没有被使用的语句清除,一旦缓冲区填满,把最近最少使用的执行计划和解析树从库高速缓存中清除。
Alter system set shared_pool_size=16M;–设置共享池大小
show parameter shared_pool_size;–查看共享池大小
数据字段高速缓存
称为:字典缓存,行缓存
与数据字典相关的一段缓冲区,存储了数据文件,表,索引,列,用户,权限信息,和其他一些数据库对象的定义。
大小取决于共享池的大小。

数据库高速缓冲区(DATA BUFFER CACHE)
存储了最近从数据文件读入的数据块信息,或用户更改后需要写回数据库的数据信息。
此时没有提交给数据库的更改后的数据称为脏数据
当用户执行select时,会先在这里读取。
DB_BLOCK_SIZE:设置oracle数据块的大小
DB_BLOCK)BUFFERS:数据库的个数
2者乘积就是库高速缓存的大小。
Show parameter db_block_size;–查询数据库块的大小
Show parameter db_cache_size;–查询数据库高速缓存的大小
因为在oracle11g中,sga为数据库服务器自动管理,所以该db_cache_size为0,当然在运行时oracle数据库时,数据库高速缓存内存已分配好。
Show sag;–查看数据库高速缓存的大小
Alter system set db_cache_size=200m;–动态设置数据库高速缓冲区的大小

Buffer cache advisory parameter:让oracle对于数据库缓冲区的内存分配提供一些建议,用于启动或关闭统计信息,这些信息用于预测不同缓冲区大小导致的不同行为特性。Dba可以参考这些统计信息,基于当前的数据库工作负载设置优化的数据库高速缓存。
顾问通过初始化参数DB_CACHE_ADVICE 启动或关闭。
该参数有3状态
Off:关闭缓存顾问,不分配缓存顾问的工作内存
On:打开缓存顾问,分配工作内存
Ready:打开缓存顾问,不分配缓存顾问内存
Show parameter db_cache_advice;–查看数据库高速缓存顾问状态,默认开启
Alter system set db_cache_advice=off;–关闭数据库高速缓存顾问
设置开启后。可以通过动态性能视图,v dbcacheadviceColidfor99;Selectid,name,blocksize,sizeforestimate,buffersforestimate2fromv db_cache_advice;
重做日志高速缓冲区(redo buffer cache)
当用户执行insert,update,delete,create,alter或drop操作后,数据发生了变化,这些变化的数据在写入数据库高速缓存之前会先写入重做日志缓冲区,同时变化之前的数据也放入重做日志高速缓存。方便oracle最后执行回滚。
Show parameter log_buffer;–查看重做日志缓存区
大池(Large pool)和java池(java pool)
大池
是sga一段可选内存区,只在共享服务器环境配置
作用,用户进程区域uga(pga在共享服务器中的另一种称呼)的大部分都在大池分配
减轻共享池的负担,在大规模输入,输出及备份过程中也需要大池作为缓存空间
Show parameter large_pool size;–查看大池大小,参数为0说明自动管理
alter system set large_pool_size=48M;–修改大池大小
java池

一段可选的内存区域
安装完java或者设置使用java程序时必须设置java池,用于编译java语言编写的指令
Java与plsql在数据库中有相同的存储方式,
Show parameter java_pool_size;–查看java池的大小,参数为0说明自动管理
alter system set java_pool_size=48M;修改参数值
流池
也称流内存,oracle流专用的内存流,流是oracle数据库中的一个数据共享,
大小可通过stream_pool_size设置
PGA(进程全局区)和UGA(用户全局区)
PGA是服务器进程专用的一块内存,他是操作系统进程专用的内存,系统的其他进程无法访问。Pag独立sga,不会再sga出现,由操作系统在本地分配
PGA内存管理
Show parameter sort_area_size;–查询PGA中排序区的大小
在服务器进程最初查询时,会使用512KB内存实现数据排序。Oracle排序处理完后,数据排序区的大小就由sort_AREA_SIZE决定

PGA
作用:存储服务器进程或单独的后台进程的数据信息和控制信息。
生命周期:随服务器进程的创建而被分配内存。进程结束他结束。
在转有服务器中,pag存储
1:排序区,对某些sql语句执行结果进行排序
2:会话信息:包含本次会话的用户权限和性能统计信息
3:游标状态,包含其他的会话变量
共享服务器配置中,多个用户进程共享一个服务器进程,如果创建了大池,内存结构存在大池中,否则存在共享池中。
在共享服务器结构中,会话信息是存储在SGA中的,2种模式下堆栈存在pga中

UGA
存储用户的会话状态,每个共享服务器都可以访问它,在PGA中分配

手动管理PGA:必须告诉oracle一个特定的进程需要的排序区,运行使用多少内存。
自动管理PGA:要求告诉oracle在系统范围内可以为PGA中的特定功能(如:排序区分配多少内存)

如何获得内存缓冲区的信息
Show sga;–查看sga中内存分配情况
固定SGA(和fixed size相关):存储一组指向sga中其他组件的变量,他的大小用户无法控制,oracle使用这个内存区来寻找其他sga区。可理解为数据库的自举区。
和variable size相关的内存区,该部分内存区包括共享池,java池和大池,其中variable size大小高于sga其他内存结构之和。因为total sga中除去db_cache_size部分也包括在variable size中
Show parameter sga_max_size;–查看sga大小
服务器进程和用户进程
服务器进程:犹如中介,完成用户的各种数据库服务请求,而把数据库服务器返回的数据和结果发给客户端,在专有连接中,一个服务器进程对应一个用户进程,2者1对1关系。当用户连接中断,服务器退出。在共享连接中,一个服务器进程对应多个用户进程,此时服务器通过opi(oracle program interface)与数据库服务器通信。
用户进程:当用户使用连接数据库时,启动一个进程。
如:conn scott/tiger@orcl
Oracle数据库后台进程
后台进程是在实例启动时,在数据库服务端启动的管理程序,它使数据库的内存结构和数据库物理结构之间协调工作,

数据库后台进程5个必须启动,否则数据库实例无法启动成功。Dbwr/lgwr/pmon/smon/ckpt
系统监控进程 (Smon)
1:数据库实例恢复。
除此之外,系统监控进程执行某些空间维护的作用
2:Combine,coalesces,adjacent数据文件中的自由空间
3:回收数据文件中的临时段

当数据库发生故障,数据库重新启动后,系统监控进程自动恢复实例,实例恢复3步骤
1:前滚所有没有写入数据文件而记录在重做日志文件中的数据,此时,系统监控进程读取重做日志文件,把用户更改的数据重新写入数据块。
2:打开数据库,此时或许系统监控进程的前滚操作还没有完成,oracle这样做的目的就是方便用户及时登录,以免前滚时间太长,影响用户的行为,这样用户就可以操作那些没有被事务恢复锁住的数据
3:回滚未提交的事务
进程监控进程(PMON)
负责服务器进程的管理和维护工作,在进程失败或连接异常发生时该进程负责一些清理工作
1:回滚没有提交的事务
2:释放所持有的当前的表或行锁
3:释放进程占用的sga资源
4:监视其他oracle的后台进程,有必要时重启这些后台进程
5:向oracleTNS监听器注册刚启动的实例,如果监听器在运行,就与这个监听器通信并传递如服务器名和实例的负载等参数,如果监听器没有启动,进程监控会定期地尝试连接监听器来注册实例
数据库写进程(DBWR)
脏数据就是用户更改了但没有提交的数据库中的书库。导致数据库的数据文件和数据库高速缓存中的数据不一致,称为脏数据。
这种脏数据在特定的条件下写到数据文件中,这就是数据库写进程的作用
这样做的好处是减少i/o次数,不需要频繁提交。
如下事件发生会触发数据库写进程吧脏数据写入数据库的数据文件中
1:发生检查点事件
2:脏数据达到门限值
3:数据库缓冲区没有足够的缓存为其他事务提供足够的空间
4:表空间处于,热备份状态/离线状态/只读状态
5:删除表/截断表
6:超时
在数据中,一个数据库实例可以启动多个数据库写进程,来分担单个写进程的工作负载
重做日志写进程(LGWR)
将重做日志缓冲区中的数据写入重做日志文件,此时重做日志缓冲区中的内容是恢复事务所需要的信息。回滚。
满足以下条件,会触发
1:事务提交
2:重做日志缓冲区1/3被占用
3:重做日志缓冲区中有1mb数据
4:数据库写进程把脏数据写到数据文件之前
日志写进程会通知数据库写进程将脏数据写到数据文件,但是数据库写进程不会把脏数据写到在线重做日志,也不会通知日志写进程做任何事情
数据写进程跟重做日志写进程的对比
数据库写进程是离散写到不同数据库文件上的,在指向一个更新时,数据库写进程会修改不同空间中存储的数据块和索引块,所以数据库写进程的离散写的速度很慢。
重做日志写进程是顺序写,把每个事务的重做信息全部放在重做日志中,通过在数据库高速缓存中缓存脏数据块,而重做日志写进程完成大规模顺序写,整体上提高系统性能
归档日志进程(ARCH)
可选进程,并不在实例启动时自动启动,
作用:把写满的重做日志文件的数据写到一个归档日志中,用作介质故障时的数据库恢复。磁盘损坏恢复。.
Archive log list;–查看系统的归档模式,默认关闭

设置数据库为归档模式的过程
1:关闭数据库,
2:以mount参数启动数据库,更改后在启动到open状态
Shutdown immediate;
Connect /as sysdba;
Startup mount;
Alter database archivelog;–重点是这里
Alter database open;
数据库日志模式改为存档模式。同时启动自动存档。归档日志的存储目录即存档终点是数据库恢复文件目录
USE_DB_RECOVERY_FILE_DEST:归档文件存在在此参数指定的目录下

查看数据库恢复目录的位置
Show parameter db_recovery;
校验点
校验点就是一个事件,当数据库写进程把sga中所有被修改的数据库高速缓冲中的数据写到数据文件上时产生,这些被修改的数据包括提交和未提交的数据,由于引入了校验点,使得所有的校验点的所有变化了的数据都写到数据文件中,在实例恢复时,就不必恢复校验点之前的重做日志中的数据,加快系统恢复的效率
校验点进程并不用于建立校验点,而是在校验点发生时,会触发这个进程一系列工作
执行流程
1:校验点进程把校验点号码写入相关的数据文件的文件头中
2:校验点进程吧校验点号码,SCN号,重做日志序列号,归档日志名字等都写入控制文件中
Alter system checkpoint;–强制执行校验点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值