这几天认真的在看oracle concept. 真让人头疼啊。
先说说了解的大概的体系结构
oracle服务器是由oracle数据库和oracle实例组成。
oracle实例是由内存结构和进程。
oracle数据库是由物理结构和逻辑结构。
我觉得一步步了解oracle体系结构,就像是组装一台计算机一样。cpu,主板,内存条,硬盘等一件件把它们合成一体,然后就能运行使用。出什么样的问题你就知道去找那个地方。现在我要做的就是这个工作。
内存结构:包括SGA(此区域由所有的服务进程(server process)和后台进程(background process)共享。),PGA(此区域是每个服务进程和后台进程所私有的;即每个进程都有一个 属于自己的 PGA。)以及软件代码区。
SGA是一组包含了 Oracle 数据库数据及实例控制信息的共享的内存结构。它的子组件包括数据缓存区(database buffer cache) , 重做日志缓冲区(redo log buffer),共享池(shared pool), Java 池(Java pool) ,大型池(large pool)(可选的), 数据流池(streams pool) , 数据字典缓存区(data dictionary cache),,其他杂项信息。
PGA是供服务进程(server process)存储数据及控制信息的内存区域。
软件代码区(software code area)是用于存储可运行的或正在运行的程序代码的内存空间。
进程:用户进程,oracle进程(后台进程和服务进程)
A. 服务进程用来来处理连接到实例的用户进程(user process)提交的请求。
完成的工作:
- 解析、运行应用程序提交的 SQL 语句
- 如果数据在 SGA 中不存在,则将所需的数据块从磁盘上的数据文件读入 SGA 的数据缓存区(shared database buffer)
- 以应用程序能理解的形式返回 SQL 语句的执行结果
B. 后台进程(可通过是V$BGPROCESS视图查询后台进程详细信息)
实例中可能运行的后台进程:
- 数据写入进程(DBWn):将数据缓冲区的内容写入数据文件。DBWn 进程总是将最近最少使用的脏缓冲区写入磁盘。
初始化参数 DB_WRITER_PROCESSES 用于设定系统中 DBWn 进程的数量。此参数的最大值为 20。
当满足以下条件时,DBWn 进程会将脏缓冲区写入磁盘:
- 如果服务进程(erver process)扫描了一定数量的缓冲区后仍不能找到可用缓冲区,她将通知 DBWn 进程进行写入。DBWn 在执行其他操作的同时,能够异步地将脏缓冲区写入磁盘。
- DBWn 进程周期性地将脏缓冲区写入磁盘,从而使检查点(checkpoint)前移。检查点是进行实例恢复(instance recovery)时应用重做日志的起始点的位置。此位置是由数据缓冲区内时间最早的脏缓冲区决定的。
- 日志写入进程(LGWR):负责对重做日志进行管理——将重做日志缓冲区(redo log buffer)内的数据写入磁盘上的重做日志文件中。
- 检查点进程(CKPT) :当一个检查点(checkpoint)事件发生时,更新所有数据文件的文件头来记录检查点事件的详细信息。
- 系统监控进程(SMON) :实例启动时如有需要,将负责进行恢复(recovery)工作。此外,SMON 还负责清除系统中不再使用的临时段(temporary segment),以及为数据字典管理的表空间(dictionary managed tablespace)合并相邻的可用数据扩展(extent)。
- 进程监控进程(PMON) :当一个用户进程(user process)失败后,负责对其进行恢复。PMON 进程将清除相关的数据缓存区(database buffer cache)并释放被此用户进程使用的资源。
PMON 进程会周期性地对调度器(dispatcher)和服务进程(server process)进行检查,重新启动停止运行的进程(不包括 Oracle 有意停止的进程)。PMON 进程还负责将实例和调度器进程的信息注册到网络监听器(network listener)。
- 恢复进程(RECO)
是在分布式数据库环境(distributed database configuration)中自动地解决分布式事务(distributed transaction)错误的后台进程。
- 作业队列进程 :进行批处理(batch processing)。这种进程用于运行用户的作业(job)。
初始化参数 JOB_QUEUE_PROCESSES 表示实例中可以并行执行的最大作业队列进程数。但是并不是所有的作业队列进程都可以用于执行用户的作业。
- 归档进程(ARCn) :在发生日志切换(log switch)时将重做日志文件复制到指定的存储设备中。只有当数据库运行在 ARCHIVELOG 模式下,且自动归档功能被开启时,系统才会启动 ARCn 进程。
- 队列监控进程(QMNn):是供 Oracle 工作流高级队列(Oracle Streams Advanced Queuing)使用的可选的进程,用于监控消息队列。队列监控进程和作业队列进程(job queue process)与其他 Oracle 后台进程的区别在于,这两类进程出错不会导致整个实例出错。
- 其他后台进程
MMON 进程负责执行多种和可管理性相关(manageability-related)的后台任务
- 当某个测量值(metrics)超过了预设的限定值(threshold value)后提交警告
- 创建新的 MMON 隶属进程(MMON slave process)来进行快照(snapshot)
- 捕获最近修改过的 SQL 对象的统计信息
MMNL 进程负责执行轻量级的且频率较高的和可管理性相关的后台任务,例如捕获会话历史信息,测量值计算等。
MMAN 进程负责执行数据库系统的内部任务。
数据库
A.逻辑结构
1. 数据库,表空间,数据文件的关系和区别?
- 一个Oracle数据库是由一个或多个被称为表空间(tablespace)的逻辑存储单位构成的,这些表空间共同用于存储数据库的数据
- Oracle数据库的每个表空间由一个或多个被称为数据文件(datafile)的物理文件构成,这些文件由Oracle所在的操作系统管理。
- 数据库的数据实际存储在构成各个表空间的数据文件中。例如,一个最简单的Oracle数据库至少包含一个表空间及一个数据文件。再例如,一个数据库可能含有三个表空间,每个表空间由两个数据文件构成(即总共有六个数据文件)。
一个数据文件只能由一个数据库的一个表空间使用。
2. 表空间的容量等于各个数据文件容量之和。数据库的容量等于各个表空间容量之和。
3. 数据库是有表空间的逻辑单位存储 【表空间 -->
段--> 数据扩展--> 数据块】
4. 表空间内容:A. 大文件表空间 B.system表空间 C. SYSAUX表空间 D.撤销表空间E.临时表空间
5. 表空间的空间管理:本地管理空间和数据字典管理空间
数据块,数据扩展,段
数据块头:包含了此数据块的概要信息,例如块地址(block address)及此数据块所属的段(segment)的类型(例如,表或索引)。
表目录区:如果一个数据表在此数据块中储存了数据行,那么数据表的信息将被记录在
数据块的表目录区(table directory)中
行目录区:包含数据块中存储的数据行的信息 (每个数据行片断(row piece) 在行数据区(row data area)中的地址)。
行数据区:数据块(data block)中行数据区(row data)包含了表或索引的实际数据。一个数据行可以跨多个数据块。
可用空间区:
A. 数据块可用空间的有效性与优化
增加数据块中的可用空间:delete,update(更小的容量)
B. 行链接和行迁移
C. 空间的管理:参数PCTFREE 和PCTUSED
数据扩展(EXTEND)
是由一组连续的数据块(data block)构成的数据库逻辑存储分配单位
初始数据扩展,增量数据扩展
簇和簇表 簇其实就是一组表,是一组共享相同数据块的多个表组成。 将经常一起使用的表组合在一起成簇可以提高处理效率。 在一个簇中的表就叫做簇表。建立顺序是:簇→簇表→数据→簇索引
段(Segment)
数据段
索引段
临时段
B.物理结构
控制文件(controlfile)
多重控制文件。相同的控制文件在不同的磁盘,避免介质损坏。用来恢复。
数据文件(datafile)
重做日志文件
归档日志文件
初始化参数文件
查看文件位置和名称的视图:V$controlfile;V$datafile;V$logfile.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/19003003/viewspace-590987/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/19003003/viewspace-590987/