oracle 组件和体系结构

1、用户相关的进程

用户相关的进程包括用户进程和服务器进程。

一个用户进程只能连接到一个服务器进程

但是在某些oracle配置中,多个用户进程可以共享同一个服务器进程。

PAG也被创建,每一个服务器进程有一个PGA

2、逻辑内存结构,被集中称为oracle实例

一个oracle实例是被一个oracle的主要内存结构组成的,称为SGA(system global area),和服务器后台进程。

用户访问数据库中的数据时,服务器进程负责和SGA内存块通信。

一个oracle instance 包括三个组件:

1)必须的组件:

共享池:缓存最近被数据库用户使用的SQL语句;

数据库缓存:最近被数据库用户使用的信息;

redo日志:保存恢复为目标的事务信息。

可选的内组件:

java pool:当java虚拟机被使用的时候,缓存最近被使用的java目标

large pool:换数据和大的操作,比如 恢复管理,备份和恢复活动,共享服务器组件

streams pool:缓存数据库相关的队列请求信息,当oracle高级队列选项被打开的时候

SGA 最进最少使用算法管理内存。

2)背景进程

有很多个背景进程,每一个都执行一个特殊的任务来帮助管理oracle instance。其中,5个背景进程是必须得,包括:

1、系统监视进程,执行进程的灾难恢复,合并数据库的自由空间,管理用来排序的内存空间;

2、进程监视进程,清除失败的数据库用户;

3、数据库写进程,从SGA的数据库缓存区把数据库块写入到磁盘上的数据库文件中;

4、日志写进程,从SGA中的REDO日志缓存区把恢复信息写到磁盘上的在线redo日志文件上;

5、检查点进程,紧跟在检查点事件后,更新数据库文件。

3、物理文件架构被集中称为数据库

数据库主要是有驻留在主机服务器磁盘驱动器上的物理文件构成。这些文件可以被称作,数据文件,控制文件和日志文件,另外的一些文件也和数据库相关,

但是不属于数据库,比如密码文件和数据库文、配置文件(pfile,spfile)和归档redo日志文件(archived redo log files)。

一、控制文件

是数据库的关键部分,他们存储着重要的信息,这些信息其他地方并不提供。包括:

  • 数据库的名字;
  • 数据文件和redo日志文件的名字、位置、和大小;
  • 在磁盘失败或者用户错误的情况下用来恢复数据库的信息。

控制文件当数据库创建时刻,就已经按照参数的文件 control_files参数描述的位置创建了,因为控制文件的丢失,会负面的影响恢复数据库的能力。

大部分数据库产品都提供多个数据库文件和并发把他们保存在多个位置。当需要的时候,CKPT也会动态的更新每一个数据库的控制文件,并且保持控制文件内容一致性。

可以用下面的示例来查看控制文件的位置和名字等详细信息:

SQL> select name from v$controlfile; NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/nihao/control01.ctl /u01/app/oracle/flash_recovery_area/nihao/control02.ctl SQL>


二、数据文件

数据文件是实际保存被插入到数据库数据表中的中数据的物理文件。数据文件的大小和他储存数据的表的量直接相关。数据文件是称为表空间的数据库存储区域的物理结构

表空间在数据库中是逻辑存储结构。表空间逻辑的组织相关的段,例如一个应收账户可能被一起保存在一个叫做AR_TAB的表空间中,而这些表的索引则被保存在名字叫做AR_IDX的表空间中。默认的oracle10g至少有3个表空间。

SQL> select tablespace_name 2 from dba_tablespaces; TABLESPACE_NAME ------------------------------ SYSTEM SYSAUX UNDOTBS1 TEMP USERS EXAMPLE HR01 7 rows selected. SQL>


当一个用户通过SQL操作一张表以后,用户服务器进程把数据文件中受过影响的数据,拷贝到SGA中的数据库二级缓存中。如果用户执行了提交事务命令来修改数据库,那么数据库写进程(DBWn)把被修改过的数据写入到数据文件。

三、redo日志文件

每当用户在数据库中执行一个事务,在数据库故障时需要的重现这些事物的信息,会被自动记录在重做日志缓冲区。重做日志缓存区的内容最后被LGWR背景进程写入到redo日志文件。

因为在oracle恢复机制中,扮演者重要的角色,redo日志被重复拷贝多份或者记录在好几个地方。这也就意味着,每一个重做日志都有好几个拷贝,以防止系统损坏或者硬件故障造成他们之中的一个或者几个的损坏。每个组内的复用文件被称为重做日志组的成员。oracle自动写入每一个redo日志文件以保持他们之间的同步。每一个redo日志组必须有多个成员。每个重做日志组必须由一个或多个成员。每个数据库必须至少有两个重做日志组,因为重做日志是在一个循环的方式使用。

日志读写进程在下面几种事件发生时候记录日志:

  • 每隔三秒;
  • 一个用户提交事务;
  • redo日志缓存已用三分之一;
  • redo日志缓存容纳1M的游泳redo信息;
  • 前一个数据库检查点发生时DBWn进程。对检查站的更多信息,请参见第10章。(未完待续)

当用户执行对数据库的DML活动,本次事务的恢复信息被用户的服务器进程写入到重做日志缓冲区中。LGWR进程最终写入此恢复信息到活动的日志组,直到该重做日志写满。一旦当前日志填写交易信息写满,LGWR将切换到下一个重做日志,直到该日志组填写满事务信息,并依此类推,直至所有可用的重做日志使用完。当最后一个重做日志被使用完时,LGWR开始循环并开始使用的第一个重做日志组。这样最早的redo日志文件就被覆盖了。因此不能在提供恢复的信息。一个可以考虑的解决办法是归档redo日志。

如果系统处于归档日志模式,那么将要被重写的日志在被LGWR进程重写之前,它的内容会被后台的归档进程复制到另外一个位置,也就是归档文件所在的位置。这些旧的redo日志实体的拷贝文件叫做归档日志

ps:1、大部分数据库产品都运行在归档模式下,因为一旦数据库由于在硬件故障和造成的毁坏需要重做所有的事务。

2、如果LGWR必须写入redo日志组,但是ARCn要试图拷贝redo日志,但是ARCn的目标位置磁盘满了,数据库会挂起直到磁盘驱动器上的空间足够。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值