470 likes | 1.11k Views
Oracle 体系架构. Oracle 数据库结构是 Oracle 数据库系统的主要部分,它是一些可以看得见的软件,包括: Oracle 数据字典、表空间与数据文件、 Oracle 实例 (Instance) 。. Oracle 体系架构图(图 1 ). 图 2-1 Oracle 9i 体系结构图. Oracle 体系架构图(图 2 ). 数据文件( Data File ). 是物理存储 ORACLE 数据库数据的文件。 用户数据:存放应用系统的数据为用户数据。
E N D
Oracle 体系架构 • Oracle数据库结构是Oracle数据库系统的主要部分,它是一些可以看得见的软件,包括:Oracle 数据字典、表空间与数据文件、Oracle实例(Instance)。
Oracle 体系架构图(图1) 图2-1 Oracle 9i体系结构图
数据文件(Data File) 是物理存储ORACLE数据库数据的文件。 用户数据:存放应用系统的数据为用户数据。 系统数据: 管理用户数据和数据库系统本身的数据,如数据字典,用户建立的表的名字,类型等都记录在系统数据中。
数据文件(Data File) 其特点如下: • 每一个数据文件只与一个数据库相联系。 • 数据文件一旦被建立则不能修改其大小。 • 一个表空间可包含一个或多个数据文件。
日志文件(Log File) 重做日志是Oracle的日记帐,负责记录所有用户对象或系统变更的信息;记录所有对数据库数据的修改,以备恢复数据时使用。其特点如下: • 每一个数据库至少包含两个日志文件组。 • 日志文件组以循环方式进行写操作。 • 每一个日志文件成员对应一个物理文件。
ORACLE的体系结构 物理结构 Log File 1 Log File 2 日志文件写操作图示 Group 1 Group 2 Member 2.1 Member 1.1
镜像日志文件 是为防止日志文件的丢失,在不同磁盘上同时维护两个或多个联机日志文件的副本。 其特点如下: 每个日志文件组至少包含两个日志文件成员。 每组的成员数目相同。 同组的所有成员同时被修改。 同组的成员大小相同,不同组的成员大小可不同。
镜像日志文件 Log File 1 Log File 2 Log File 3 Log File 4 Member 2.1 Member 2.2 Member 1.1 Member 1.2 镜像日志文件图示 Group 1 Group 2 Disk 1 Disk 2
控制文件(Control File) • 要点注意: • 在打开和存取数据库时都要访问该文件。 • 镜像控制文件。 • 记录控制文件名及路径的参数为: • CONTROL_FILES • 描述信息如下: • 数据库建立的日期。 • 数据库名。 • 数据库中所有数据文件和日志文件的文件名及路径。 • 恢复数据库时所需的同步信息。 是一个较小的二进制文件,用于描述数据库结构。
参数文件(Parameter File) 是一个文本文件,可直接使用操作系统下的文本编辑器对其内容进行修改。该文件只在建立数据库或启动实例时才被访问,在修改该文件之前必须关闭实例。在oracle8i之前 初始参数文件:init.ora 生成参数文件:initSID.ora 在oracle 9i之后,不允许对参数文件进行编辑,但是,可以通过命令行的方式进行修改.所使用的参数文件为: spfileSID.ora
参数文件(Parameter File) ORACLE8 之后,多数参数已不在该文件中出现,需修改这些参数时只能在SQL>下用 SET SESSION 或 SET SYSTEM 来进行。 查看系统参数可用下面的命令: SQL>select * from v$parameter; 参数文件的作用: 确定存储结构的大小。 • 设置数据库的全部缺省值。 • 设置数据库的范围。 • 设置数据库的各种物理属性。 • 优化数据库性能。
2.7 Oracle内存结构 • 前面提到过Oracle的数据库实例是一组后台进程和内存结构组成。而内存结构是包括: • 系统全局区(System Global Area) • 程序全局区(Program Global Area)
Oracle 内存结构 Libaray cache Data Dictionary Cache Redo log buffer Large Pool(Optional) PL/SQL procedure And Packages Control Structures Java Pool(Optional) Locks and other structures Shared Pool 图2-4 Oracle内存结构(SGA图)
ORACLE的体系结构 系统全局区 实例( INSTANCE ) 是存取和控制数据库的软件机制,它由系统全局区(System Global Area,简称SGA)和后台进程组成。
ORACLE的体系结构 系统全局区 SGA是ORACLE系统为实例分配的一组共享缓冲存储区,用于存放数据库数据和控制信息,以实现对数据库数据的管理和操作。
ORACLE的体系结构 系统全局区 • 共享SQL区包括 • SQL或PL/SQL语句的文本 • SQL或PL/SQL语句的语法分析形式 • SQL或PL/SQL语句的执行方案 共享池(Shared Pool)由共享SQL区和数据字典区组成。参数SHARED_POOL_SIZE 确定共享池的大小。 数据字典区用于存放数据字典信息行。
2.7.1.1 数据高速缓冲区(Data Buffer Cache) 在数据高速缓冲区中存放着ORACLE系统最近使用过的数据块(即用户的高速缓冲区),当把数据写入数据库时,它以数据块为单位进行读写,当数据高速缓冲区填满时,则系统自动去掉一些不常被用访问的数据。如果用户要查的数据不在数据高速缓冲区时,ORACLE自动从磁盘中去读取。ORACLE8i以后将缓冲池分为三个区(使用多个缓冲池特性时): • KEEP 缓冲池(KEEP buffer pool):在内存中保留数据块,它们不会被从内存中挤掉; • RECYCLE缓冲池从不需要的内存将数据移掉; • DEFAULT缓冲池包含有被分配的块。
数据缓冲存储区(Database Buffer Cache) 数据文件 数据缓冲区 DB_BLOCK_SIZE 确定数据块的大小,一般为2K或4K,对于大数据块的数据库,此参数值为物理块的倍数。 DB_BLOCK_BUFFERS 确定数据块的数目。 数据缓冲存储区(Database Buffer Cache)用于存储从数据文件中读的数据的备份。
日志缓冲存储区(Log Buffer) 日志缓冲区 日志文件 以记录项的形式备份数据库缓冲区中被修改的缓冲块,这些记录将被写到日志文件中。 LOG_BUFFER 确定日志缓冲区的大小。
进 程 用 户 进 程 服务器进程 后 台 进 程
ORACLE的体系结构 进 程 ORACLE实例分为单进程实例和多进程实例两种。 SINGLE_PROCESS 单进程/多进程实例的转换。
ORACLE的体系结构 进 程 S G A ORACLE Server 数据库应用 单进程/单用户 一个进程执行全部ORACLE代码。
ORACLE的体系结构 进 程 后 台 进 程 S G A 服务器进程 用户进程 多进程/多用户 使用多个进程执行ORACLE的不同代码,对于每一个连接的用户都有一个进程。
ORACLE的体系结构 进 程 后 台 进 程 S G A 服务器进程 服务器进程 用户进程 用户进程 专用服务器方式 为每个用户单独开设一个服务器进程。适用于实时系统。 不设置参数: MTS_SERVICE MTS_DISPATCHERS MTS_SERVERS MTS_LISTERNET_ADDRESS
ORACLE的体系结构 进 程 后 台 进 程 S G A 服务器进程 服务器进程 用户进程 用户进程 用户进程 调度器 多线索服务器方式 通过调度器为每个用户进程分配服务器进程。设置参数: MTS_SERVICE MTS_DISPATCHERS MTS_SERVERS MTS_LISTERNET_ADDRESS
ORACLE的体系结构 进 程 参数的涵义 MTS_SERVICE:服务器名,缺省值为DB_NAME MTS_DISPATCHERS:调度器个数 MTS_SERVERS:可以启动的服务器进程的个数 MTS_LISTERNET_ADDRESS:SQL*NET监听器地址 MTS_MAX_SERVERS:服务器进程的最大数
ORACLE的体系结构 用户进程 用户进程 当用户运行一个应用程序时,就建立一个用户进程。
ORACLE的体系结构 服务器进程 服务器进程 处理用户进程的请求。 处理过程 分析SQL命令并生成执行方案。 从数据缓冲存储区中读取数据。 将执行结果返回给用户。
ORACLE的体系结构 后台进程 • 主要的后台进程有 • DBWR 数据库写进程 • LGWR 日志写进程 • CKPT 检查点写进程 • SMON 系统监控进程 • PMON 进程监控进程 • ARCH 归档进程 • RECO 恢复进程 • LCKn 封锁进程 后台进程 为所有数据库用户异步完成各种任务。
ORACLE的体系结构 后台进程 DBWR(Data Base Writer) 将数据缓冲区中所有修改过的缓冲块数据写到数据文件中,并使用LRU算法来保持缓冲区中的数据块为最近经常使用的,以减少I/O次数。该进程在启动实例时自动启动。
ORACLE的体系结构 后台进程 DBWR进行写操作的情况: 脏列表达到最低限制。 相当于参数DB_BLOCK_WRITE_BATCH值的一半。 一个进程在LRU列表中扫描指定数目的缓冲块,未找到空闲缓冲块。 参数DB_BLOCK_MAX_SCAN_CNT确定扫描数目。
ORACLE的体系结构 后台进程 • DBWR进行写操作的情况: • 出现超时 • 3秒钟内该进程未活动,则该进程将在LRU列表中查找尚未查找的缓冲块,这组缓冲块的数目相当于参数DB_BLOCK_WRITE_BATCH值的2倍。 • 出现检查点。
ORACLE的体系结构 后台进程 LGWR(Log Writer) 将日志缓冲区中的所有记录项写到日志文件中。 该进程在启动实例时自动启动。
ORACLE的体系结构 后台进程 LGWR进行写操作的情况: 用户进程提交一个事务(Commit) 日志缓冲区达到1/3范围 DBWR对一个检查点需要清除缓冲块 出现超时(3秒钟内未活动,则进行一次写操作。)
ORACLE的体系结构 后台进程 检查点(Checkpoint) : 在检查点出现期间,DBWR进程将数据缓冲区中的所有脏缓冲块写到数据文件中,LGWR进程将日志缓冲区中的所有记录项写到日志文件中,以确保上一个检查点至今修改过的所有数据块都被写到磁盘上。
ORACLE的体系结构 后台进程 检查点: 预定数目的记录项被填满。 参数LOG_CHECKPOINT_INTERVAL确定了预定数目。 设置指定的秒数。 参数LOG_CHECKPOINT_TIMEOUT确定了间隔秒数。 每个日志开关处 关闭实例时 • DBA手动操作。 • 表空间离线。
ORACLE的体系结构 后台进程 CKPT(Checkpointer) 在控制文件中记录检查点。参数CHECKPOINT_PROCESS 确定了检查点的启动/不启动状态。 若CKPT进程不启动,则该进程的工作将由LGWR进程代劳。(如果数据库的数据文件过多,这样操作会降低系统性能。)
ORACLE的体系结构 后台进程 ARCH 存储介质 ARCH(Archiver) 在日志文件组出现切换时,将旧日志文件的内容拷贝到脱机存储介质上,出现介质失败时用于恢复数据。 LOG_ARCHIVE_START 确定了该进程的启动/不启动状态。
ORACLE的体系结构 后台进程 ARCH 存储介质 ARCH(Archiver) LOG_ARCHIVE_DEST 当数据库在归档模式下操作时,该参数确定了日志文件的归档目标。 LOG_ARCHIVE_FORMAT 当数据库在归档模式下操作时,该参数确定了归档日志文件的缺省文件名格式。
ORACLE的体系结构 后台进程 SMON(System Monitor) 负责完成自动实例恢复。该进程在启动实例时自动启动。 PMON(Process Monitor) 撤消异常中断的用户进程,并释放该进程已获得的系统资源或锁。
ORACLE的体系结构 后台进程 RECO(Recover) 在分布式操作的情况下,恢复一个事务的失败。 LCKn(Lock) 在并行服务器系统间加锁,最多可加10个锁,分别为LCK0,LCK1,,LCK9。
ORACLE的体系结构 示 例 SGA SGA SGA 共享池 共享池 共享池 数据缓冲区 数据缓冲区 数据缓冲区 日志缓冲区 日志缓冲区 日志缓冲区 SMITH ALLEN WARD Server User User User User User Server Server User SQL> SELECT ename FROM emp ; 处理SQL语句的三个阶段 语法分析 执行 返回指令
ORACLE的体系结构 示 例 SGA 共享池 数据缓冲区 B2 B1 Server User User User EMP Table Block 1 Block2 SELECT操作 SQL> SELECT sal FROM emp WHERE job = ‘CLERK’ ;
ORACLE的体系结构 示 例 • 将数据块送到数据缓冲区 • 将回滚块送到数据缓冲区 • 在修改行上设置行锁 • 保存回滚数据到回滚段块 • 将修改写到数据块 UPDATE操作 为了支持读一致性,恢复和回滚,所有修改操作需要回滚段。修改操作执行:
ORACLE的体系结构 示 例 SGA 共享池 数据缓冲区 B2 B1 R1 R2 Data File 1 Data File 2 User User User User2 User Server2 Server1 User1 EMP Table RB01 Block 1 R1 Block2 R2 UPDATE操作 SQL> SELECT sal FROM emp WHERE job = ‘CLERK’ ; SQL> UPDATE emp SET sal = sal * 1.1 WHERE job = ‘CLERK’ ;