Oracle之结构
Oracle结构
在结构上,Oracle 服务器(Oracle Server)由实例(Instance)和数据库(Database)两大部分构成。
- 实例:实例是一组内存结构 和 Oracle 后台进程的集合; (qq程序启动后成为一个进程,并占用内存,内存和进程组成实例)
- 数据库:数据库在物理上由多个操作系统文件组成,其中主要包括数据文件、控制文件和重做日志文件。(qq的聊天记录只能在qq程序启动后才能查看,实际是一组特定结构的数据)
Oracle 服务器 = 实例 + 数据库。
1、数据库启动
Oracle数据库实例的启动过程分为3个步骤,分别是启动实例、加载数据库、打开数据库。用户可以根据实际情况的需要,以不同的模式启动数据库。
启动数据库所使用的命令格式如下:
STARTUP [nomount|mount|open|force] [restrict] [pfile=filename]
- OPEN:启动实例,装载并打开数据库,为默认选项。
- MOUNT:启动实例并装载数据库,但不打开数据库。
- NOMOUNT:启动实例,但不装载数据库。
- PFILE=:指定用于启动实例的非默认初始化参数文件名。
- FORCE:强制终止实例,并重新启动数据库。
- RESTRICT:启动后只允许具有 RESTRICTED SESSION 权限的用户访问数据库。
- RECOVER:在数据库启动时,进行介质恢复。
shutdown ---> nomount
分配内存:根据参数文件/u01/app/oracle/product/11.2.0/db_1/dbs/spfileorcl.ora
启动进程
nomount ---> mount
读取控制文件
mount ---> open
读取日志文件,数据文件
2、修改数据库(ALTER)
要使数据库由 NOMOUNT 进入 MOUNT 阶段或由 MOUNT 进入 OPEN 阶段,需要使用 ALTER DATABASE 命令:
ALTER DATABASE { MOUNT | OPEN }
3、数据库关闭方式
Oracle 数据库共有 4 种关闭方式,根据不同的情况,管理员可采用不同的方式关闭数据库。
- NORMAL:正常关闭方式。
- TRANSACTIONAL:事务关闭方式。
- IMMEDIATE:立即关闭方式。
- ABORT:强制终止关闭方式。
NORMAL、TRANSACTIONAL、IMMEDIATE 三种关闭方式,属于一致性数据库(或称干净数据库)关闭。特点是无需进行数据库恢复。
ABORT 关闭方式,属于非一致性数据库(或称脏数据库)关闭。使用 ABORT关闭、或数据库发生实例故障(比如断电)、或使用 STARTUP FORCE 强制重新启动数据库,都需要进行实例恢复。
ABORT 关闭方式,属于非一致性数据库(或称脏数据库)关闭。使用 ABORT 关闭、或数据库发生实例故障(比如断电)、或使用 STARTUP FORCE 强制重新启动数据库,都需要进行实例恢复。关闭和启动过程如图所示:
Oracle内存结构
内存结构描述的是 Oracle 数据库对内存的使用构成。Oracle 内存结构被总称为 SGA (System Global Area)。
主要包括数据库高速缓冲区(Database Buffer Cache)、重做日志缓冲区(Redo Log Buffer)和共享池(Shared Pool)三个部分。
1、数据库高速缓冲区(Database Buffer Cache)
在 Oracle 中无论是读取还是修改数据,都是由服务器进程在数据库高速缓冲区中完成的。
数据库高速缓冲区的作用就是用来缓存最近从数据库中读出的数据块,并可供其他客户进程共享。用户进程查看数据时,首先检查需要的信息是否在缓冲区内,如果在缓冲区中,就可以直接访问,否则访问物理文件并读取数据块到数据库缓冲区。我们知道内存的读写速度要比物理设备的读写速度快很多,这样就可以大大提高 Oracle 数据库的性能。
1.1、数据库高速缓冲区的子缓冲区
根据缓冲数据块的状态,Oracle将数据高速缓冲区可划分成:
- 脏缓冲区(Dirty Buffer):
当数据库发生 DML(Insert、Update、Delete)操作时,会对缓冲区内容进行修改,这样缓冲区的内容就会和相对应的数据文件不一致,这时,缓冲区标识为“脏缓冲区” - 自由缓冲区(Free Buffer):
当“脏缓冲区”的内容被写入数据文件后,因为该缓冲区与相应数据文件部分内容一致,所以将这些缓冲区称为“自由缓冲区”
当执行 SELECT 语句时,会将对应数据文件部分数据读取到数据高速缓存的相应缓冲区,因为缓冲区与数据块内容完全一致,所以这些缓冲区也被称为“自由缓冲区” - 忙缓冲区(Pinned Buffer):
'忙缓冲区”是指服务器进程正在访问的缓冲区。
每个数据库的数据库高速缓冲区大小有限,所以一般不会把磁盘上的所有数据都可以存放在缓冲区中。
为了防止数据库高速缓冲区空间不够用,Oracle 会将脏缓冲区中的数据写入对应的数据文件中,以腾出空间给新的数据,
如果缓冲区不脏,即为“自由缓冲区”,它可以直接被读入新的数据块。)随后访问被写入磁盘导致额外的高速缓存未命中的数据。
“脏列表”的作用就是记录脏缓冲区的情况。如果某些缓冲区中的数据块被修改,就会加入该列表,只有脏列表中的缓冲区数据块需要写回数据库文件,一旦写回数据库文件,缓冲区就会从脏列表中清除。
2、数据库高速缓冲区&重做日志缓冲区
数据库高速缓冲区域的内容是写入数据文件中。
重做日志缓冲区域的内容是写入日志文件中。
先写重做日志缓存区域的内容载写数据库高速缓冲区域的内容。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」