提示:主要总结oracle数据库:物理结构,逻辑结构,内存结构以及oracle进程
文章目录
- Oracle服务器由(实例和数据库文件组成)
- 1、实例
- 2、数据文件
- @1.oracle物理体系结构
- @2.oracle数据库逻辑结构
- @3oracle数据库内存结构
- 共享池
- 数据库高速缓存区(Database buffer cache)
- 重做日志高速缓存区(Redo Log buffer cache)
- PGA和UGA
- 大池
- java池
- 流池(Streaming pool)
- @4.oracle进程
- 服务器进程
- 用户进程
- oracle数据库后台进程
- 系统监控进程(SMON)
- 进程监控进程(PMON)
- 数据库写进程(DBWR)
- 归档日志进程(ARCH)
- 校验点进程(Checkpoint process)
Oracle服务器由(实例和数据库文件组成)
Oracle服务器由数据库实例和数据文件组成
,也就是我们常说的数据库管理系统。数据库服务器除了维护实例和数据库文件之外,还在用户建立与服务器的连接时启动服务器进程并分配PGA
Oracle的体系结构是一个高度可扩展和可靠的架构,它将数据存储在持久的数据库中,并通过实例提供对数据的访问和管理。实例负责处理数据库的各种操作和管理数据库的内存结构,而数据库负责存储实际的数据、相关的控制信息和日志
1、实例
由内存区和后台进程组成
①内存区:数据库高速缓存、重做日志缓存、共享池、流池以及其它可选内存区(如Java池),这些池也称为数据库的内存结构
②后台进程:包括系统监控进程(SMON)、进程监控(PMON)、数据库写进程(DBWR)、日志写进程(LGWR)、检验点进程(CKPT)、其它进程(SMON,如归档进程、RECO进程等)
备注:要访问数据库必须先启动实例,实例启动时先分配内存区,然后再启动后台进程,后台进程执行库数据的输入、输出以及监控其它Oracle进程。在数据库启动过程中有五个进程是必须启动的,它们是系统监控进程(SMON)、进程监控(PMON)、数据库写进程(DBWR)、日志写进程(LGWR)、检验点进程(CKPT),否则实例无法创建。
2、数据文件
1.数据文件:
数据库中的实际数据
2. 控制文件
维护数据库和验证数据库完整性
3.重做日志文件
数据库发生变化的记录,用于数据恢复
4.重做日志文件
数据库发生变化的记录,用于数据恢复
5.密码文件
密码文件授予用户启动和关闭数据库实例,在刚安装数据库时,Oracle 的默认用户名和密码就存储在密码文件中,Oracle 可以借此判断用户的操作权限
6.归档日志文件
归档日志文件是日志文件的脱机备份,在发生故障后进行数据恢复时可能使用该文件
@1.oracle物理体系结构
1.数据文件:
数据库中的实际数据
2. 控制文件
维护数据库和验证数据库完整性
3.重做日志文件
数据库发生变化的记录,用于数据恢复
4.重做日志文件
数据库发生变化的记录,用于数据恢复
5.密码文件
密码文件授予用户启动和关闭数据库实例,在刚安装数据库时,Oracle 的默认用户名和密码就存储在密码文件中,Oracle 可以借此判断用户的操作权限
6.归档日志文件
归档日志文件是日志文件的脱机备份,在发生故障后进行数据恢复时可能使用该文件
@2.oracle数据库逻辑结构
表空间:据库的基本逻辑结构,是一系列数据文件的集合
;
段:不同类型数据在数据库中占用的空间,有许多区组合而成
;
区:由连续的块组成
,目的是为数据一次性预留一个较大的空间,oracle为存储空间进行分配回收都是以区为单位的;
块:最小的存储单位
,在创建数据库时指定,不能修改。大小是操作系统块得整数倍
@3oracle数据库内存结构
Oracle 的内存由系统全局区(System Global Area,简称 SGA)和程序全局区(Program Global Area,简称 PGA)组成。
①PGA 称为程序全局区,程序全局区不是实例的一部分,当服务器进程启动时,才分配PGA。②SGA 称为系统全局区,它是数据库实例的一部分,当数据库实例启动时,会首先分配系统全局区。
在系统全局区中包含:数据库高速缓存(Database buffer cache)、重做日志缓存(Redo log buffer cache)、共享池(Shared pool)、大池(Large pool)和Java 池(Java pool)
共享池
@1、共享池的作用
Oracle 引入共享池的目的就是共享SQL 或PL/ SQL 代码,即把解析得到的SQL 代码的结果在这里缓存
@2、共享池组成
共享池由两部分组成,即库高速缓存(Libray cache)和数据字典高速缓存(Data dict cache)
,①库高速缓存库高速缓存存储了最近使用过的SQL 和PL/ SQL 语句。
②数据字典高速缓存是与数据字典相关的一段缓冲区。在数据字典高速缓冲区中存储了数据文件、表、索引、列、用户、权限信息和其它一些数据库对象的定义
。
设置共享池的大小
SQL> alter system set shared_ pool_ size = 16M;
3.1.4查看共享池的大小
SQL> show parameter shared_ pool_ size;
数据库高速缓存区(Database buffer cache)
概念
存储了最近从数据文件读入的数据块信息或用户更改后需要写回数据库的数据信息,此时这些没有提交给数据库的更改后的数据称为脏数据
。
当用户执行查询语句如select* from dept 时,如果用户查询的数据块在数据库高速缓存中,Oracle 就不必从磁盘读取,而是直接从数据库高速缓存中读取(查询—数据库高速缓存区不经过磁盘)
查询数据库块的大小
SQL> show parameter db_ block_ size;
查询数据库高速缓存的大小
SQL> show parameter db_ cache_ size;
因为在Oracle 11g 中,SGA 为数据库服务器自动管理,所以该参数值为0
查询数据库高速缓存的大小
SQL> show sga;
设置数据库高速缓冲区大小
SQL> alter system set db_ cache_ size = 200M;
查看数据库高速缓存顾问状态
SQL> show parameter db_ cache_ advice;
查看与设置数据库高速缓冲区相关的信息
SQL> col id for 99 SQL> SELECT id, name, block_ size, size_ for_ estimate, buffers_ for_ estimate 2 from v$ db_ cache_ advice;
重做日志高速缓存区(Redo Log buffer cache)
概念
当用户执行了如INSERT、UPDATE、DELETE、CREATE、ALTER 或DROP 操作后,数据发生了变化,这些变化了的数据在写入数据库高速缓存之前会先写入重做日志缓冲区
,同时变化之前的数据也放入重做日志高速缓存,这样在数据恢复时Oracle 就知道哪些需要前滚哪些需要后滚了
。
查看重做日志缓存区
SQL> show parameter log_ buffer;
重做日志缓存区参数log_ buffer 是静态参数,不能动态修改
PGA和UGA
PGA(进程全局区)
PGA 中存储了服务器进程或单独的后台进程的数据信息和控制信息。它随着服务器进程的创建而被分配内存,随着进程的终止而释放内存。PGA 与SGA 不同,它不是一个共享区域,而是服务器进程专有的区域。在专有服务器(与共享服务器相对的概念)配置中包括如下的组件:排序区、会话信息、游标状态、堆栈区
UGA(用户全局区)
在共享服务器模式下有一个重要的概念即UGA,它是用户的会话状态,这部分内存会话总可以访问,UGA 存储在每个共享服务器都可以访问的SGA 中,这样任何服务器都可以使用用户会话的数据和其它信息。而在专有服务器模式下,用户会话状态不需要共享,用户进程与服务器进程是一一对应的关系,所以UGA 总是在PGA 中进行分配。
PGA内存管理
从Oracle 9i 开始,Oracle 提高了两种办法管理PGA,即手动PGA 管理和自动PGA 管理。采用手动管理时,必须告诉Oracle 一个特定的进程需要的排序区,允许使用多少内存,而在自动PGA 管理中,则要求高速Oracle 在系统范围内可以为PGA 中的特定功能如排序区分配多少内存。
①查询PGA 中排序区的大小
SQL> show parameter sort_ area_ size;
大池
大池是SGA 的一段可选内存区,只在共享服务器环境中配置大池。
在共享服务器环境下,Oracle 在共享池中分配额外的空间用于存储用户进程和服务器进程之间的会话信息,但是用户进程区域UGA(可理解为PGA 在共享服务器中的另一个称呼)的大部分将在大池中分配,这样就减轻了共享池的负担
查看大池大小
SQL> show parameter large_ pool_ size
修改大池大小
SQL> alter system set large_ pool_ size = 48M
java池
Java 池也是可选的一段内存区,但是在安装完Java 或者使用Java 程序时则必须设置Java 池,它用于编译Java 语言编写的指令。
查看java 池的大小
SQL> show parameter java_ pool_ size;
值为0 说明在Oracle 11g 中,Java 池大小由数据库服务器在SGA 中自动分配,当然用户也可以使用alter system 指令修改该参数的值
修改java池大小
SQL> alter system set java_ pool_ size = 48M
流池(Streaming pool)
流池也称为流内存,它是Oracle 流专用的内存池,流(stream)是Oracle 数据库中的一个数据共享,其大小可以通过参数stream_ pool_ size 动态调整。
@4.oracle进程
服务器进程和用户进程,是用户使用数据库连接工具同数据库服务器建立连接时,涉及的两个概念。
服务器进程
服务器进程犹如一个中介,完成用户的各种数据服务请求,而把数据库服务器返回的数据和结果发给用户端。
在专有连接中,一个服务器进程对应一个用户进程,二者是一一对应的关系。
在共享连接中,一个服务器进程对应几个用户进程,此时服务器进程通过OPI(Oracle Program Interface)与数据库服务器通信。
用户进程
当用户使用数据库工具如SQL* Plus
与数据库服务器建立连接时,就启动了一个用户进程,即SQL* Plus 软件进程
使用SCOTT 用户连接数据库:SQL> conn scott/tiger
用户和数据库服务器建立了连接,数据库服务器产生一个服务器进程,负责与数据库服务器的直接交互
oracle数据库后台进程
后台进程是在实例启动时,在数据库服务器端启动的管理程序,它使数据库的内存结构和数据库物理结构之间协调工作
。它们是DBWR、LGWR、PMON、SMON 和CKPT
系统监控进程(SMON)
系统监控进程的主要作用就是数据库实例恢复。当数据库发生故障时,如操作系统重启,此时实例SGA 中的所有没有写到磁盘的信息都将丢失。当数据库重新启动后,系统监控进程自动恢复实例。
进程监控进程(PMON)
进程监控负责服务器进程的管理和维护工作,在进程失败或连接异常发生时该进程负责一些清理工作。
数据库写进程(DBWR)
在介绍高速缓冲区时,提到了脏数据的概念,脏数据就是用户更改了的但没有提交的数据库中的数据,因为在数据库的数据文件与数据库高速缓存中的数据不一致,故称为脏数据,这种脏数据必须在特定的条件下写到数据文件中,这就是数据库写进程的作用。
数据库写进程负责把数据库高速缓冲区中的脏数据写到数据文件中。或许读者会问,为什么不立即提交脏数据呢,这样就不需要复杂的数据库写进程来管理。其实,Oracle 这样设计的思路很简单,就是减少I/ O 次数,但脏数据量达到一定程度或者某种其它条件满足时,就提交一次脏数据。因为磁盘的输入、输出会花费系统时间,使得Oracle 系统的效率不高。4.3.4重做日志写进程(LGWR)
重做日志写进程负责将重做日志缓冲区中的数据写到重做日志文件。此时重做日志缓冲区中的内容是恢复事务所需要的信息,比如用户使用UPDATE 语句更新了某行数据,恢复事务所需的信息就是更新前的数据和更新后的数据,这些信息用于该事务的恢复
归档日志进程(ARCH)
归档日志进程是可选进程,该进程并不在实例启动时自动启动。它的作用是把写满的重做日志文件的数据写到一个归档日志中,这个归档日志用作介质故障时的数据库恢复
查看系统的归档模式
SQL> con system/ oracle@ orcl as sysdba;
SQL> archive log list;
设置数据库为归档模式的过程
SQL> shutdown immediate
SQL> conn /as sysdba;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
查询当前数据库的归档模式
SQL> archive log list;
查看数据库恢复目录的位置
SQL> show parameter db_ recovery
校验点进程(Checkpoint process)
首先介绍检验点,检验点是一个事件,当数据库写进程把SGA 中所有被修改了的数据库高速缓冲中的数据写到数据文件上时产生,这些被修改的数据包括提交的和未提交的数据。由于引入了校验点,使得所有的校验点的所有变化了的数据都写到数据文件中,在实例恢复时,就不必恢复校验点之前的重做日志中的数据,加快了系统恢复的效率。校验点进程并不是用于建立校验点,只是在校验点发生时,会触发这个进程进行一系列工作
强制执行校验点SQL> alter system checkpoint;