先来一张图:
1.通常说的Oracle数据库包含两个部分:Oracle实例和Oracle物理文件
1.1 实例简介
实例在操作系统中用ORACLE_SID来标识,在Oracle中用参数INSTANCE_NAME来标识,它们两个的值是相同的。数据库启动时,系统首先在服务器内存中分配系统全局区(SGA),构成了Oracle的内存结构,然后启动若干个常驻内存的操作系统进程,即组成了Oracle的进程结构,内存区域和后台进程合称为一个Oracle实例。
数据库与实例之间是1对1/n的关系,在非并行的数据库系统中每个Oracle数据库与一个实例相对应;在并行的数据库系统中,一个数据库会对应多个实例,同一时间用户只与一个实例相联系,当某一个实例出现故障时,其他实例自动服务,保证数据库正常运行。在任何情况下,每个实例都只可以对应一个数据库。
1.2 物理文件
Oracle物理文件是基础,包含了我们存储的所有数据。其中部分物理文件与实例相关,如参数文件,跟踪文件,警告文件等;还有一部分物理文件包含了实际的用户或数据库存储的数据信息,如数据文件,日志文件,控制文件等。
2.Oracle实例
2.1 Oracle数据库的内存结构
系统全局区:SGA(System Global Area)
SGA是一组为系统分配的共享的内存结构,可以包含一个数据库实例的数据或控制信息。如果多个用户连接到同一个数据库实例,在实例的SGA中,数据可以被多个用户共享。当数据库实例启动时,SGA的内存被自动分配;当数据库实例关闭时,SGA内存被回收。SGA是占用内存最大的一个区域,同时也是影响数据库性能的重要因素。
如上图,SGA包含数据缓冲区
数据缓冲区存放需要经常访问的数据,供所有用户使用。如修改数据时,首先从数据文件中取出数据,存储在数据缓冲区中,修改/插入数据也存储在缓冲区中,commit或DBWR(下面有详细介绍)进程的其他条件引发时,数据被写入数据文件。
日志缓冲区用来存储数据库的修改信息。该区对数据库性能的影响比较小。
共享池是对SQL,PL/SQL程序进行语法分析,编译,执行的内存区域。它包含三个部分:(都不可单独定义大小,必须通过share pool间接定义)。
库缓冲区(Library Cache)包含SQL,PL/SQL语句的分析码,执行计划。
数据字典缓冲区(Data Dictionary Cache)表,列定义,权限。
用户全局区(Usr Global Area)用户MTS会话信息。
程序全局区:PGA(Programe Global Area)
程序全局区是包含单个用户或服务器数据和控制信息的内存区域,它是在用户进程连接到Oracle并创建一个会话时由Oracle自动分配的,不可共享,主要用于用户在编程存储变量和数组。
排序池:(Sort Area)大池:(Large Pool)Java池:(Java Pool)
排序区(Sort Area)为有排序要求的SQL语句提供内存空间。系统使用专用的内存区域进行数据排序,这部分空间就是排序区。在Oracle数据库中,用户数据的排序可使用两个区域,一个是内存排序区,一个是磁盘临时段,系统优先使用内存排序区进行排序。如果内存不够,Orcle自动使用磁盘临时表空间进行排序。为提高数据排序的速度,建议尽量使用内存排序区,而不要使用临时段。
大池(Large Pool)用于数据库备份工具--恢复管理器(RMAN:Recovery Manager)Large Pool的大小由large_pool_size确定
Java池主要用于Java语言开发,可以动态调整。
2.2 Oracle进程类型
用户进程和服务器进程
当数据库用户请求连接到Oracle的服务时启动用户进程(比如启动SQLPlus时)。
用户进程首先必须建立一个连接。
用户不能直接与Oracle服务器,必须通过服务器进程交互。
服务器进程是用户进程与服务器交互的桥梁,它可以与Oracle Server直接交互。
服务器进程可以有共享和独占两种形式。
后台进程(Backgroung Process)
数据库的物理结构与内存结构之间的交互要通过后台进程来完成。数据库的后台进程包含两类,一类是必须的,一类是可选的:
•Mandatory background processes
|--DBWn(Database Writer):数据写入
|--PMON(Process Moniter):进程监控
|--LGWR(Log Writer):日志写入
|--SMON(System Moniter):系统监控
|--RECO(Recovery):恢复
|--CKPT(Chekpoint):检查点
•Optional background processes
|--ARCn(Archiver):归档
|--LCKn(Lock):锁
|--Dnnn(Dispatcher):调度
|--......
3.Oracle物理文件类型
3.1 实例相关文件
参数文件:用来告诉Oracle实例在哪里找到控制文件,制定一些初始化参数,比如某种内存结构有多大。
跟踪文件:通常是服务器进程对某种异常错误条件做出响应时穿件的诊断文件。
警告文件:与跟踪文件类似,但是包含“期望”时间的有关信息,并且通过一个集中式文件(其中包括多个数据库时间)告警DBA。
3.2 数据库内容文件
数据文件:数据库的主要文件,包含表,索引等其它数据库段。
重做日志文件:事务日志,主要用来回滚及数据库恢复。
临时文件:用于完成基于磁盘的排序及临时存储。
控制文件:保存数据文件,重做日志文件及临时文件在哪里,还保存于文件状态有关的其它元数据。
密码文件:用于对通过网络进行管理活动的用户进行认证。
3.3 实现快速备份及恢复的文件
这两个文件都是在oracle 19g后新增的。
修改跟踪文件:有利于Oracle实现真正的增量备份。
闪回日志文件:用于支持flashback命令,存数数据库快的前映像。