Oracle检查体系结构不满足,Oracle体系结构

一、Oracle体系结构

数据库服务器是由实例(动态)和数据库(静态)组成。

数据库,也就是静态部分,表现为磁盘上的文件,而实例是其中动态的部分,表现为内存中的结构。

体系结构:实例中的内存缓冲区和后台进程。

数据库的物理结构:数据文件、控制文件和参数文件等。

数据库的逻辑结构:表空间、区、段、块等存储结构。

二、前、后台进程

SQL> shutdown immediate

SQL> startup nomount

SQL> select paddr,name from v$bgprocess where paddr<>'00';

PADDR            NAME

---------------- ----------

00007FFFD950BA58 PMON

00007FFFD950DC28 VKTM

00007FFFD950ED10 GEN0

00007FFFD950FDF8 DIAG

00007FFFD9510EE0 DBRM

00007FFFD950CB40 PSP0

00007FFFD9511FC8 DIA0

00007FFFD95130B0 MMAN

00007FFFD9514198 DBW0

00007FFFD9515280 LGWR

00007FFFD9516368 CKPT

PADDR            NAME

---------------- ----------

00007FFFD9517450 SMON

00007FFFD9518538 RECO

00007FFFD9519620 MMON

00007FFFD951A708 MMNL

已选择15行。

SQL> alter database mount;

SQL> select paddr,name from v$bgprocess where paddr<>'00';

PADDR            NAME

---------------- ----------

00007FFFD950BA58 PMON

00007FFFD950DC28 VKTM

00007FFFD950ED10 GEN0

00007FFFD950FDF8 DIAG

00007FFFD9510EE0 DBRM

00007FFFD950CB40 PSP0

00007FFFD9511FC8 DIA0

00007FFFD95130B0 MMAN

00007FFFD9514198 DBW0

00007FFFD9515280 LGWR

00007FFFD9516368 CKPT

PADDR            NAME

---------------- ----------

00007FFFD9517450 SMON

00007FFFD9518538 RECO

00007FFFD9519620 MMON

00007FFFD951A708 MMNL

SQL> alter database open;

SQL> select paddr,name from v$bgprocess where paddr<>'00';

PADDR            NAME

---------------- ----------

00007FFFD950BA58 PMON

00007FFFD950DC28 VKTM

00007FFFD950ED10 GEN0

00007FFFD950FDF8 DIAG

00007FFFD9510EE0 DBRM

00007FFFD950CB40 PSP0

00007FFFD9511FC8 DIA0

00007FFFD95130B0 MMAN

00007FFFD9514198 DBW0

00007FFFD9515280 LGWR

00007FFFD9516368 CKPT

PADDR            NAME

---------------- ----------

00007FFFD9517450 SMON

00007FFFD9518538 RECO

00007FFFD9523F30 CJQ0

00007FFFD951EAA8 QMNC

00007FFFD9519620 MMON

00007FFFD951A708 MMNL

已选择17行。

1. 后台进程DBWR

默认情况下只启动一个,如果用户事务很频繁,对于一个DBWR进程来说,要把这些脏缓冲区写入数据文件,负载是很重的。

可以启动额外的DBWR进程,提供写数据效率。DBWR进程的数据由初始化参数DB_WRITER_PROCESSES指定,最多可以启动36个,

他们名称是DBW0-DBW9以及DBWa-DBWz。

NAME            TYPE       VALUE

----------------      ---------- ------------

db_writer_processes     integer    1

DBWR进程执行写的几种情况:

1.1 固定的时间间隔,如每隔3秒

1.2 当数据库服务器发出检查点时

1.3 当脏队列中的缓冲区数目达到一定值时

1.4 当用户进程需要访问数据,服务区进程需要在数据库缓冲区缓存中搜索一定数量的空闲缓冲区,而此时空闲缓冲区的数量不能满足要求时,

服务器进程通知DBWR进程,把脏队列中的脏缓冲区写入数据文件,这些将重新成为空闲缓冲区

2. 后台进程LGWR

LGWR进程的功能是将重做日志缓冲区中的重做日志写入重做日志文件,以保证数据库一致性。

LGWR与DBWR均是在一定条件下,将相关的缓冲区写入重做日志文件或者数据文件,两个进程不是同步工作的。

LGWR进程执行的几个条件:

2.1 固定的时间间隔,如每隔3秒

2.2 用户执行了commit操作

2.3 重做日志缓冲区的空间已经写满三分之一

2.4 DBWR将脏缓冲区写入数据文件之前

服务器进程将重做日志写入重做日志缓冲区,而LGWR进程将重做日志缓冲区中的内容写入重做日志文件。

3. 后台进程SMON

数据库启动时,检查控制文件、重做日志文件和数据文件的scn是否一致,如果不一致,然后将其中未提交的事务回滚,

并将重做日志文件中最后一个SCN写入数据文件和控制文件,以使数据库达到一致的状态。如果三种文件的SCN不一致,

实例是无法打开的,数据库启动时的这个处理过程,叫做实例恢复,由SMON进程完成。

SMON进程将重做日志文件中记录的重做日志重新执行一次,从而保证了数据不会因为系统断电丢失。

在数据库服务器正常的运行过程中,三种文件中的SCN是可以达到一致的,这要依赖于后台进程CKPT。

当CKPT进程开始工作时,SCN将被写入数据文件和控制文件,达到三种文件SCN完全一致。同时CKPT进程通知DBWR进程开始工作,

把脏缓冲区的数据写入数据文件,这时数据库将达到完全一致的状态,即使系统断电,数据库也不会受到任何影响,也不需要进行实例恢复。

只要用户提交了事务,事务对数据的修改就不会因为断电等异常丢失。反之,如果用户没有提交事务,事务对数据的修改会随着系统断电丢失,而且无法恢复。

SMON进程有如下功能:

3.1 实例恢复

3.2 回收临时表空间中的不再使用的临时段。

3.3 在字典管理表空间中合并相邻的空闲存储空间。

4. 后台进程CKPT

当数据库服务器发出检查点时,将带来大量的磁盘I/O,因此尽量减少检查点发生。

CKPT进程的几种情况发生:

4.1 正常关闭数据库服务器时

4.2 数据库服务器进行日志切换(alter system switch logfile)时

4.3 手动发出检查点(执行alter system checkpoint)时

4.4 由初始化参数指定LOG_CHECKPOINT_TIMEOUT和LOG_CHECKPOINT_INTERVAL的时间到来时

#########################

alter system archive log current 与 alter system switch logfile区别:

两组命令最后的效果一样。alter system switch logfile是不等归档完成就进行switch logfile操作,速度快,尤其在非归档模式下适用,对当前实例生效。

而alter system archive log current要等待归档完成才操作,对所有实例生效。

#########################

LOG_CHECKPOINT_TIMEOUT:用于指定两个检查点之间的时间间隔,以秒为单位。oracle11g开始,默认为1800秒,即30min。如果设置为0,将取消固定时间间隔方式的检查点。

LOG_CHECKPOINT_INTERVAL:这个参数指定了一个操作系统块的数目,当服务器进程向重做日志缓冲区中写入指定块数的重做日志时,CKPT进程将发出检查点。

5. 后台进行PMON

PMON进程就是定期检查用户进程,并进行资源回收的操作。

用户进程正常退出,尚未提交的事务将被自动提交,事务对数据所加的锁将被自动释放,它所占用的资源也被自动释放。

用户进程非正常退出,PMON将对这些用户进程进行清除,释放它们所占用的资源,如锁、存储空间等,终止相应的进程,并且对那些尚未提交的事务进行回滚操作。

6. 后台进程ARCH

ARCH进程的功能是对重做日志文件进行归档。

只有数据库处于归档日志模式下,并且启动了ARCH进程,数据库服务器才会自动对重做日志进行归档。在一个实例中可以启动多个ARCH进程,默认情况下只启动4个,他们名称是ARC0~ARC3.

与ARCH进程有关的初始化参数:

LOG_ARCHIVE_MAX_PROCESSES:指定可以启动的ARCH进程的最大数目。

LOG_ARCHIVE_FORMAT:指定归档日志文件的名称。

LOG_ARCHIVE_DEST_n:指定归档日志文件的存储路径,其中n为1~31中的一个数字。

LOG_ARCHIVE_DEST_STATE_n:指定对应的归档路径是否可用。

如果数据库服务器写重做日志文件的速度比日志归档的速度快,那么将发生数据库服务器阻塞的现象,这是因为事务的重做日志无法顺利地被写入重做日志文件,从而导致事务的执行被挂起。

出现这种情况,可以考虑启动更多的ARCH进程,以加快重做日志归档的速度,或者创建更大、更多的重做日志文件,以延长文件被写满所需要的时间。

对一个数据库来说,重做日志的调整,是性能调优的一个方面。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值