Oracle数据库中最重要的部分就是它的体系架构,只有掌握Oracle的体系架构才能很好地使用它。Oracle数据库的体系架构是进行数据库管理、数据库备份恢复以及数据库性能诊断和优化的基础。同时由于关系型数据库的相通性,掌握了Oracle数据库的体系架构对于进一步学习其他类型数据库将会有非常大的帮助。
视频讲解如下:
Oracle数据库中有数据库和数据库实例这两个基本的概念,并且从体系架构的组成上看,Oracle数据库又分为了存储结构、进程结构和内存结构。因此,要掌握Oracle的体系架构就需要从数据库与数据库实例入手,并进一步深入到其内部核心的结构中。
一、数据库与数据库实例
Oracle数据库,英文名称叫做Oracle Database。这里所说的数据库是一个物理上的概念,即指物理操作系统的文件或者磁盘的集合。换句话来说,Oracle数据库是由物理硬盘上许多的文件组成。这些文件包含了数据文件、控制文件、重做日志文件等等。数据库的配置信息、日志信息以及表中的数据最终都是存储在这些文件当中。
Oracle数据库的实例,英文名称叫做Oracle Database Instance,它是一个逻辑上的概念,由操作系统的内存和操作系统中的进程组成。这些内存由同一个宿主机上运行的进程所共享。即使没有磁盘存储的数据库文件,数据库实例也能存在,但是这样的数据库实例没有实际的意义。对于一个正常运行的Oracle数据库实例来讲,可以把它看成是Oracle数据库文件在内存中的镜像。客户端需要通过操作系统中的进程来访问内存中的这些镜像,最终读写Oracle数据库的数据。
在不考虑Oracle数据库集群的情况下,一般情况下一个Oracle数据库服务只包括一个Oracle数据库和一个Oracle数据库的实例。一个实例对应一个数据库。它们之间的对应关系如下图所示。
二、存储结构
Oracle数据库由硬盘上的文件组成,而要读写数据需要通过Oracle实例来完成。那么,Oracle数据库是如何存储数据的呢?要搞清楚这个问题,就需要理解什么是Oracle数据库的存储结构。Oracle数据库的存储结构是由逻辑存储结构和物理存储结构组成。一般来说数据库无论是关系型数据库,还是NoSQL数据库在存储结构上,都是通过逻辑存储结构来管理物理存储结构。下图展示了Oraclke的逻辑存储结构。
Oracle的物理存储结构就是指的Oracle数据库在硬盘上存储的各种文件,包括:数据文件、联机日志文件、控制文件、归档日志文件、参数文件、告警日志文件、跟踪文件和备份文件等。
三、进程结构
通过执行Linux命令ps -ef | grep ora_可以查看Oracle数据库所有的后台进程。下面列举了这些进程的信息。
oracle 69415 1 0 13:07 ? 00:00:01 ora_pmon_orcl oracle 69420 1 0 13:07 ? 00:00:00 ora_clmn_orcl oracle 69424 1 0 13:07 ? 00:00:05 ora_psp0_orcl oracle 69428 1 1 13:07 ? 00:05:43 ora_vktm_orcl oracle 69434 1 0 13:07 ? 00:00:02 ora_gen0_orcl oracle 69438 1 0 13:07 ? 00:00:01 ora_mman_orcl oracle 69444 1 0 13:07 ? 00:00:06 ora_gen1_orcl oracle 69446 1 0 13:07 ? 00:00:00 ora_gen2_orcl oracle 69449 1 0 13:07 ? 00:00:00 ora_vosd_orcl oracle 69453 1 0 13:07 ? 00:00:00 ora_diag_orcl oracle 69457 1 0 13:07 ? 00:00:00 ora_ofsd_orcl oracle 69459 1 0 13:07 ? 00:00:13 ora_dbrm_orcl oracle 69462 1 0 13:07 ? 00:00:00 ora_vkrm_orcl oracle 69466 1 0 13:07 ? 00:00:01 ora_svcb_orcl oracle 69468 1 0 13:07 ? 00:00:04 ora_pman_orcl oracle 69470 1 0 13:07 ? 00:00:18 ora_dia0_orcl oracle 69474 1 0 13:07 ? 00:00:02 ora_dbw0_orcl oracle 69476 1 0 13:07 ? 00:00:05 ora_lgwr_orcl oracle 69480 1 0 13:07 ? 00:00:08 ora_ckpt_orcl oracle 69484 1 0 13:07 ? 00:00:00 ora_smon_orcl oracle 69490 1 0 13:07 ? 00:00:02 ora_smco_orcl oracle 69494 1 0 13:07 ? 00:00:00 ora_reco_orcl oracle 69496 1 0 13:07 ? 00:00:01 ora_lreg_orcl oracle 69498 1 0 13:07 ? 00:00:00 ora_pxmn_orcl oracle 69504 1 0 13:07 ? 00:00:12 ora_mmon_orcl ......
下面介绍几个比较重要的Oracle数据库的后台进程。
- 系统监视器进程(SMON进程):即ora_smon_orcl进程。它负责Oracle数据库的启动,并在实例启动时执行恢复;同时该进程还可以清除不使用的临时段。
- 进程监视器进程(PMON进程):即ora_pmon_orcl进程。该进程负责在用户进程失败时执行进程的恢复。同时还负责清除数据库缓冲区中的脏数据和释放该用户进程占用的资源。
- 数据库写进程(DBWn进程):全称是Database Writer进程,即ora_dbw0_orcl进程,它负责将数据库缓冲区的数据写入磁盘。
- 日志写进程(LGWR):全称是Log Writer进程,即ora_lgwr_orcl进程,它负责管理重做日志缓冲区,即将重做日志缓冲区条目写入磁盘上的重做日志文件中。
- 检查点进程(CKPT):它是Oracle数据库 检查点进程,即ora_ckpt_orcl进程,它负责唤醒DBWn进程将缓冲区中的脏数据写入数据文件中。
四、内存结构
Oracle数据库的内存结构可以看成是数据库文件的镜像,而每个Oracle数据库实例有两个关联的内存结构:系统全局区(SGA)和程序全局区(PGA)。下图展示了Oracle数据库实例的内存结构。