(Les01 Architectrure IV 存储结构)[20180116]
进程启动顺序
Oracle Grid Infrastructure由OS初始化守护程序启动
操作系统初始化守护进程(init)->Grid Infrastructure包装脚本(init.ohasd)->Grid Infrastructure守护程序和进程(ohasd.bin,oraagent.bin,orarootagent.bin,diskmon.bin,cssdagent,ocssd.bin)->ASM实例、监听程序、DB实例、用户定义的应用程序
数据库存储体系结构
构成Oracle数据库的文件类别
控制文件:数据库物理结构信息和备份相关的元数据。
数据文件:数据库用户或应用程序数据,以及元数据和数据字典。
联机重做日志文件:用于进行数据库的实例恢复。
参数文件:用于定义实例启动时的配置。
口令文件:允许用户使用sysdba、sysoper和sysasm角色远程连接到实例并管理。
备份文件:用于进行数据库恢复。
归档重做日志文件:包含实例发生的数据更改(重做)的实时历史记录。使用这些文件和数据库备份,可以恢复丢失的数据文件。
跟踪文件:每个服务器和后台进程都可以写入一个关联的跟踪文件。当进程检测到内部错误时,会将有关该错误的信息转储到相应的跟踪文件中。
预警日志文件:改文件包含特殊的跟踪条目。数据库的预警日志是一个按时间顺序记录消息和错误的日志。
逻辑和物理数据库结构
逻辑结构(用于展示oracle在操作系统中的物理文件组成情况):数据库->表空间->段->区->Oracle数据块
物理结构(用于描述oracle内部组织和管理数据的方式):数据文件->存储系统(SAN,NFS,NAS,ASM,Exadata,RAW,文件系统)
数据块(Data Blocks):是Oracle逻辑存储结构中最小的逻辑单位,也是执行数据库输入输出的最小存储单位。Oracle数据块是操作系统块的整数倍,Oracle数据块有一定的标准大小(DB_BLOCK_SIZE);另外Oracle支持在同一个数据库中使用多种大小的块,与标准块大小不同的就是非标准块;
Oracle数据块结构:块头、表目录、行目录、空余空间和行数据
块头:存放数据块的基本信息,如块的物理地址、块所属的段的类型。
表目录:存放表的相关信息。
行目录:如果块中有行数据存在,则这些行的信息将被记录在行目录中,这些信息包括行的地址。
空余空间:空余空间是一个块中未使用的区域,这片区域用于新行的插入和已经存在的行的更新。
行数据:用于存放表数据和索引数据的地方,这部分空间已被数据行所占用。
通常将块头、表目录、行目录这3个部分组合起来称为头部信息,头部信息区不存放数据,它存放整个块的引导信息,起到引导系统读取数据的作用。所以头部信息若遭到破坏,则Oracle系统无法读取这部分数据。空余空间和行数据共同构成块的存储区,用于存放真正的数据。
数据区(Extent):也称做数据扩展区是由一组连续的Oracle数据块所构成的Oracle存储结构,一个或多个数据块组成一个数据区,一个或多个数据区组成一个段(Segment),当段(Segment)空间不足时Oracle系统会自动为该段分配一个新的数据区。数据区是Oracle存储分配的最小单位。
使用数据区的目的:用来保存特定的数据类型的数据。
数据区是表中数据增长的基本单位,在Oracle数据库中,分配存储空间就是以数据区为单位的。一个Oracle对象包含至少一个数据区。设置一个表或索引的存储参数包含设置它的数据区大小。
段(Segment):由一个或多个数据区组成,它不是存储空间的分配单位,而是一个独立的逻辑存储结构,用于存储表、索引或簇等占用空间的数据对象,Oracle也把这种占用空间的数据对象统一称为段。
段是为特定的数据对象(如表、索引、回滚等)分配的一系列数据区。段内的数据区可以不连续,并且可以跨越多个文件。
使用段的目的:用来保存特定对象。
数据段:数据段中保存的是表中的数据记录,在创建数据表时,Oracle系统将为表创建数据段。当表中的数据量增大时,数据段的大小自然也随着变化,数据段的增大过程是通过向其添加数据区来实现的。当创建一个表时,系统自动创建一个以该表的名字命名的数据段。
索引段:索引段中包含了用于提高系统性能的索引。一旦建立索引,系统自动创建一个以该索引的名字命名的索引段。
回滚段:也称撤销段,它保存了回滚条目,Oracle将修改前的旧值保存在回滚条目中。
临时段:当执行创建索引、查询等操作时,Oracle可能会使用一些临时存储空间,用于暂时性地保存解析过的查询语句以及在排序过程中产生的临时数据。
执行“Create Index”、“Select Order By”、“Select Distinct”、“Select Group By”等几种类型的sql语句时,Oracle系统就会在临时表空间中为这些语句的操作分配一个临时段。在数据库管理过程中,若经常需要执行上面这类sql语句,最好调整sort_area_size初始化参数来增大排序区,从而使排序操作尽量在内存中完成,以获取更好的效率,但同时这对数据库服务器的内存空间提出了更大的要求。
表空间和数据文件
数据库被划分为多个“表空间”,表空间是可用于将相关逻辑结构组合在一起的逻辑存储单元。每个数据库都在逻辑上分为两个或多个表空间:SYSTEM和SYSAUX表空间。在每个表空间均显式创建一个或多个数据文件,以在物理上存储表空间中所有逻辑结构的数据。
注意:可以创建大文件表空间,这种表空间只有一个。该文件的大小可达体系结构允许的最大大小。最大大小是表空间的块大小乘以2^36,如果块大小为32KB,则最大大小为128TB。
SYSTEM和SYSAUX表空间
SYSTEM和SYSAUX表空间是在创建数据库时创建的必需存在的表空间。这些表空间必需联机。
SYSTEM表空间用于核心功能(例如数据字典)
辅助的SYSAUX表空间用于附加的数据库组件(如Oracle Enterprise Manager Repository)
不建议使用SYSTEM和SYSAUX表空间来存储应用程序的数据。
注意:SYSAUX表空间可以脱机以执行表空间恢复,而SYSTEM表空间则不能。这两个表空间都不能设定为只读。
自动存储管理(ASM)
自动存储管理(Automatic Storage Management)为Oracle DB文件提供文件系统与卷管理纵向集成。
-可移植的高性能集群文件系统
-管理Oracle DB文件
-通过ASM集群文件系统(ACFS)管理应用程序文件
-将数据分布到各个磁盘中以平衡负载
-建立数据镜像以防范故障
-提高可靠性和性能,不需逐个文件地进行人工交互
ASM存储组件
ASM文件->ASM区(AU大小的1倍,4倍,16倍)->ASM分配单元(1,2,4,8,16,32或64MB)
ASM磁盘组->ASM磁盘
与Oracle DB交互:内存、进程和存储
1.Oracle DB的节点上启动数据库实例。
2.用户启动一个应用程序,衍生一个用户进程。该用户进程尝试与服务器建立一个连接。
3.服务器运行相应的Oracle Net服务进行监听。监听程序检测到应用程序发出的连接请求,并创建一个代表用户进程的专用服务器进程。
4.用户运行DML类型的SQL语句并提交事务处理。
5.服务器进程接收该语句,并检查共享池中是否包含相同的SQL语句的共享SQL区域。如果找到共享SQL区域,服务器进程将检查用户对所请求数据的访问权限,然后使用现有的共享SQL区域处理该语句。如果没有找到共享SQL区域则为该语句分配一个新的共享SQL区域,以便对该语句进行分析和处理。
6.服务器进程从实际数据文件(表)或数据库缓冲区高速缓存中存储的值中检索必需的数据值。
7.服务器进程修改SGA中的数据。提交事务并调用日志写进程(LGWR)将重做日志缓冲区的信息立即写入到重做日志文件中。数据库写进程(DBWn)在一个高效的时机将修改后的块永久写入磁盘。
8.如果事务处理成功,服务器进程将通过网络向应用程序发送一条信息。如果事务处理不成功,则传送一条错误信息。
9.整个过程中,其他后台进程也在运行,监控进程(PMON)监视是否需要干预的情况。此外,数据库服务器也管理其他用户的事务,并防止请求相同数据的事务处理之间发生争用。
总结:
Oracle Server
-Oracle Instance
-Oracle Memory
-Systen global area(系统全局区):由所有用户进程共享的一块内存区域。
-Shared pool(共享池):保存最近执行的sql语句、pl/sql程式的数据字典信息。语法分析、编译和执行的内存区域。
-Library cache(库高速缓存)
-Shared SQL area
-Private SQL area(Shared Server Only)
-Data dictionary cache(数据字典高速缓存)
-Server result cache(服务结果缓存)
-Other
-Database buffer cache(数据高速缓冲区):用于存储从磁盘数据文件中读取的数据。
-Redo log buffer(重做日志缓冲区):用于存储数据库的修改操作信息。
-Large pool(大池):提供一个大的缓冲区供数据库的备份和恢复操作使用。
-Java pool(Java池):程序缓冲区为Java程序保留的。
-Streams pool(流池):流复制所使用-10g新加入。如streams_pool_size未设定,它会从sga获取最多为shared pool的10%。
-Sort area(排序区):Oracle系统为排序操作所产生的临时数据提供的内存空间。
-Program global area(程序全局区):单个用户或服务器数据和控制信息的内存区域,它在用户进程连接到oracle数据库并创建一个会话由oracle自动分配
-Stack Space(堆栈区)
-User global area
-User session data(会话信息区)
-Cursor status(游标状态区)
-Sort area(排序区)
http://docs.oracle.com/cd/B28359_01/server.111/b28318/memory.htm
-Background Process
-DBWn(DataBase Write 数据库写入进程):数据缓冲区的后台进程负责将缓冲区的数据写入磁盘中的数据文件中。
-PMON(Process Monitor 程序监控进程):用于用户进程出现故障时执行恢复操作。
-SMON(System Monitor 系统监控进程):实例启动时执行实例恢复并负责清理不在使用的临时段。
-LGWR(Log Write 日志写入进程):负责管理重做日志缓冲区的后台进程,将重做日志缓冲区的日志数据写入磁盘的联机重做日志文件中。-->確認进程
-CKPT(Check Point 检查点进程):检查所有修改过的数据缓冲区的数据都被写入磁盘数据文件中。
-ARCN(Archvie Process 归档日志进程):将写满的联机重做日志文件复制到归档日志文件中。
-RECO(Recovery 还原进程):自动解决在分布式数据库中出现的事务故障。
-LCKn(Lock 锁进程):存在与并行服务器系统中,用于实现多个实例间的封锁。
-Dnnn(Dispatchers 调度进程):多线程服务器体系结构中将用户进程连接到服务器进程中。
-Snnn(Shared Servers)
-Server process
-User process
-Oracle Database
-Physical Structure(物理存储结构):用于展示oracle在操作系统中的物理文件组成情况。
-Control file(control.ctl 控制文件):二进制文件,描述数据库的物理结构。存放数据库中的数据文件和日志文件的具体位置。
-Data file(*.dbf 数据文件):存储数据库数据的物理文件。
-Online log file(*.log 联机日志文件):记录数据库中所有修改信息,保证数据安全。一个数据库至少有两个日志组文件每个日志组至少有一个日志成员。
-Archive log file(*.arc 归档日志文件):对写满的日志文件进行复制保存。
-pfile and spfile(init$SID.ora spfile$SID.ora 参数文件):记录oracle数据库的基本信息,如数据库名、控制文件存放位置、内存等等。
-password file(orapwd$SID 密码文件):用于Oracle具有sysdba权限用户的认证。
-alert and treacrt file(警告和跟踪文件):数据库运行日志和错误信息的跟踪。
-backup file( 备份文件):用于数据库数据的还原。
-Logical Structure(逻辑存储结构):用于描述oracle内部组织和管理数据的方式。
-Tablespace(表空间):最大的逻辑存储结构
-Table(表)
-Index(索引)
-View(视图)
-Segment(段):
-数据段
-索引段
-回滚段
-临时段
-Extent
-Data blocks
-块头
-表目录
-行目录
-空余空间
-行数据