了解Oracle中的体系结构(实例 + 数据库)

张开发
2026/4/21 14:35:47 15 分钟阅读
了解Oracle中的体系结构(实例 + 数据库)
目录一、Oracle DB 服务器体系结构实例 数据库1.2.数据库实例1.2.1.Oracle数据库的内存结构程序全局区PGA系统全局区SGA1.2.2.Oracle数据库的进程结构1进程监视器PMON2系统监视器SMON3锁进程LCKn4恢复进程RECO5数据库写入进程DBWR6检查点进程CKPT7日志写入进程LGWR8归档进程ARCH二、为什么Oracle中不直接舍去实例这个结构而直接操作数据库2.1.多对一关系关键原因2.2.生命周期2.3.资源隔离一、Oracle DB 服务器体系结构实例 数据库数据库是被视为单元的数据集合用于存储和检索相关信息。Oracle数据库服务器体系结构概览图基本的 Oracle DB 系统由实例逻辑和数据库物理组成。其中包含以下三种主要结构内存结构、进程结构和存储结构。数据库包括物理结构和逻辑结构。由于物理结构和逻辑结构是分开的因此管理数据的物理存储时不会影响对逻辑存储结构的访问。1.2.数据库实例实例实例是基于数据库物理层之上的又一个逻辑结构由与该实例关联的内存结构和后台进程构成。实例由与该实例关联的内存结构和后台进程构成。每当启动一个实例时都会分配一个称为系统全局区SGA的共享内存区并启动后台进程。进程是在计算机的内存中运行的作业。进程被定义为操作系统中可运行一系列步骤的“控制线程”或机制。1、启动数据库实例后nomount过程2、Oracle 软件将该实例与特定数据库相关联。该操作称为“装载数据库”mount过程3、打开数据库授权用户可以对其进行访问open过程。注意Oracle 自动存储管理ASM在管理内存和进程组件时使用实例概念不与特定数据库关联。每个数据库实例都与一个且只与一个数据库关联。如果同一服务器上有多个数据库那么每个数据库会有一个单独的数据库实例。数据库实例不能共享。Oracle Real Applications Cluster (RAC)数据库通常在几个独立服务器上运行共享同一数据库的多个实例1对n。在此模式下每个 RAC实例都与同一数据库相关联1对1从而满足了最多只能有一个数据库与一个实例关联的要求。1.2.1.Oracle数据库的内存结构Oracle DB 创建并使用内存结构来满足多种需要。例如使用内存来存储正在运行的程序代码、在各用户之间共享的数据以及所连接的每个用户的专用数据区域。一个实例有两个关联的基本内存结构:程序全局区PGAPGAProgress Global Area1包含某个服务器进程或后台进程的数据及控制信息的内存区域。PGA 是 Oracle DB 在服务器进程或后台进程启动时创建的非共享内存。服务器进程对PGA的访问是独占式的。每个服务器进程和后台进程都具有自己的PGA。2PGA不是共享内存是私有不共享的S可以理解为共享share的首字母。用户对数据库的发起的无论是查询还是更新这类的任何操作都需要先在PGA进行预处理然后才能进入实例区域再由SGA和后台进程共同完成剩余步骤。PGA的具体作用1保存用户的连接信息如会话属性、绑定变量等2保存用户权限等重要信息当用户进程与数据库建立会话时系统会将这个用户的相关权限查询出来然后保存再这个会话区内3当发起的指令需要排序的时候PGA正是这个排序区如果在内存区内完车呢个如果放不下超出的部分就在临时表空间中完成排序也就是在磁盘中完成排序。系统全局区SGASGASystem Global Area1是一组共享的内存结构(称为SGA组件)其中包含一个OracleDB 实例的数据和控制信息。SGA面向所有服务器进程和后台进程共享。SGA中存储的数据有高速缓存的数据块和共享 SOL 区域等。2其中SGA主要被划分为共享池、数据缓存区dbshared pool cache和日志缓存区log buffer三类。1.2.2.Oracle数据库的进程结构后台8大劳模进程包括PMON、SMON、DBWR、LGWR、CKPT、ARCH、LCKn、RECO等系列进程。1进程监视器PMONPMONProcess Monitor如果你在执行某些更新语句未提交时进程崩溃了这时候PMON会自动回滚该操作无需人工去执行ROLLBACK命令。除此之外它还可以干预后台进程比如RECO出现异常失败时此时PMON会重启RECO进程如果遇到LGWR进程失败这样严重问题PMON会做出中止实例这个激烈的动作用于防止数据错乱。2系统监视器SMONSMONSystem Monitor与PMON不同的是SMON关注的是系统级的操作而非单个进程工作重点是在于实例恢复除此之外还有清理临时表空间、清理回滚段表空间、合并空闲空间等功能。3锁进程LCKnLCKnLOCK number仅用于RAC数据库最多可有10个进程LCK0,LCK1,.....LCK9用于实例间的封锁。4恢复进程RECORECODistributed Database Recovery用于分布式数据库的恢复适用于两阶段提供的应用场景。比如我们面临将索格数据库A、B、C某个应用跨越三个数据库在发起的过程中需要A、B、C库都提供成功事务才会成功只要有一个失败就必须全部回滚。5数据库写入进程DBWRDBWRDatabase Writer完成将更新的数据从内存中刷入磁盘。是Oracle中最核心的进程之一负责把数据从数据缓存区写入到磁盘里该进程和CKPT相辅相成因为CKPT促成DBWR去写的不过DBWR也和LGWR密切相关因为DBWR想将数据缓存区中的数据写入到磁盘的时候必须通知LGWR先完成日志缓存区写到磁盘的动作后方可开工6检查点进程CKPTCKPTCheck Point该进程是用来判断什么时候将数据缓存区中的数据写到磁盘当满足CKPT的触发条件后CKPT会触发DBWR进程将数据缓存区所修改的内容落盘。7日志写入进程LGWRLGWRLog Writer为保证顺序只能单进程评为最佳劳模日志缓存区保存了数据库相关操作的日志记录了这个动作然后由LGWR后台进程将其从日志缓存区这个内存区写进磁盘的日志文件REDO里。它的目的很简单即便于将来出现异常情况时可以根据日志文件中记录的动作再继续执行一便从而保护数据的安全。执行触发条件一、每隔三秒LGWR运行一次。二、任何COMMIT触发LGWR运行一次。三、DBWR要把数据从数据缓存写到磁盘触发LGWR运行一次。四、日志缓存区满三分之一或记录满1MB触发LGWR运行一次。五、联机日志文件切换也将触发LGWR.8归档进程ARCHARCHArchive该程序用做当日志文件被重写前需将即将被重写的日志文件备份转移到新的存储介质中的程序。二、为什么Oracle中不直接舍去实例这个结构而直接操作数据库Oracle中的实例Instance和数据库Database分离是其架构的核心设计特色解耦合。数据库database数据库是物理存在的物理文件 数据文件 控制文件 重做日志文件↓永久存储实例Instance实例是运行时的实例 内存结构SGA 后台进程↓临时存在可启动/关闭在了解了两者之间的区别后就能看出有了实例具有以下优势2.1.多对一关系关键原因一个数据库可以被多个实例访问RAC环境-Cache Fusion缓存融合技术解决读写、写写之间的冲突数据库共享存储↑实例1 实例2 实例3 ← 不同服务器上的实例节点A节点B节点C2.2.生命周期数据库永久存在除非删除文件物理文件 → 持续存在# 实例临时存在SQL STARTUP # 创建实例SQL SHUTDOWN # 销毁实例# 实例可以频繁启停数据库保持不变2.3.资源隔离不同实例可以配置不同的内存参数实例ASGA_SIZE8G, PGA_AGGREGATE_TARGET2G实例BSGA_SIZE16G, PGA_AGGREGATE_TARGET4G但访问同一个数据库的数据文件两者都访问/oradata/orcl/users01.dbf

更多文章