第二章Oracle服务器一.Oracle服务器Oracle服务器是由实例和数据库组成,二.实例及实例的开启与关闭实例Instance:关系型数据库管理系统(RelationalDatabaseManagerSystem,RDMS),用于提供相关的数据库管理功能。实例进一步分为系统全局区(SystemGlobalArea,SGA)和后台进程(BackgroundProcesses)SGA1一个SGA至少要有共享池SharePool、缓冲区缓存BufferCache、日志缓冲区LogBuffer这三个共享内存池库缓存(LibraryCache):存放最近使用的SQL语句/PL/SQL区块的文本、解析树、执行计划,便于下一次相同的语句执行过的调用。数据字典缓存(DataDictionaryCache):存放最近用到的对象定义。用于减少应为硬解析所产生的物理读取;(何为物理读取和逻辑读取)。结果集缓存(ResultCache):OracleDatabase11g新增的组件,用于存储SQL执行的结果。而结果集缓存的大小不能超过共享池最大的75%.2.缓冲区缓存BufferCache:用于存放最近使用过的数据块。Oracle允许多达5种数据块大小,分别为:2KB、4KB、8KB、16KB、32KB。数据块与缓存区的大小相同时才可以放置数据。物理读取:无法在缓冲区找到所需要的数据块,必须将数据块由数据文件读到缓冲区缓存,在进行后续操作。逻辑读取:若可以在缓冲区缓存读到所需要的数据块,即为逻辑读取.3.日志缓冲区LogBuffer:保证已提交的事务在发生故障后可以被恢复。过程为:提交事务——生成重做项目RedoEntry——将RedoEntry存放至日志缓冲区——再由日志写入器写到联机重做日志文件。4.大型池:5.java池6.流池:后台进程启动实例时,5个后台进程必须启动,分别为:系统监控SMON、进程监控PMON、数据库写入器DBWR、日志写入器LGWR、检查点CKPT。开启和关闭实例数据库的开启包括三部分:未加载(NOMOUNT)、加载(MOUNT)、打开(OPEN)数据库的关闭包括三部分:关闭数据库、卸载数据库、关闭实例。恢复实例三步骤:前滚、开启数据库、回滚未提交事务。三.其他进程1.用户进程:指能够产生SQL语句的应用程序。2.服务器进程:代表用户进程执行SQL语句,必要时回传执行结果给用户进程。3.连接(Connection):描述用户进程和服务器进程的连接方式。有三种:*进程间通信*客户端/服务器架构*三层架构4.会话(Session)四.数据库数据库:由Oracle数据库文件组成,用于存储数据。数据库物理结构可分为数据库文件、控制文件、联机重做日志文件。数据库文件:存放数据。Oracledatabase10g开始要求有两个必需的表空间(SYSTEM、SYSAUX),即由两个数据文件。11g规定每个数据库最多不能有超过65533个数据文件存在,同时不能有65533个表空间存在。控制文件:每个数据库至少要有一个,且最多不能超过8个控制文件存在。联机重做日志文件:联机重做日志的内容是日志缓冲区的RedoEntry,由LGWR写入的,用在实例或数据库需要恢复时,重新产生数据。即在数据库运行正常时,它不起任何作用,唯一需要做的是将影响降到最低,而当数据库或实例需要恢复时发挥最大的作用。Oracle数据库至少有两个日志文件,每个日志文件至少有一个成员,最多有5个成员。多工:联机重做日志文件、存档日志文件、数据文件放在不同的磁盘控制卡控制的不同硬盘上,预防单点故障。日志成员越多,数据库的安全性越好,但是LGWR写入的RedoEntry所需要的时间越多,可能会影响oracle的性能。数据库逻辑结构:表空间:表空间是有一个或多个数据文件组成,目的是将数据文件分割成更小的空间。每个表空间只属于一个数据文件,每个数据文件最多有65533个表空间。段:是一个集合,将属于同一个对象的扩展区块集合在一起成为一个单元。例如:表、索引、群集、临时表、撤销表。扩展区块:是真正的空间配置主角,当一个段需要空间时,数据库便分配一个可用扩展区块给该段,满足该段的空间需求。一个扩展区块最小有两个数据块组成。数据块:数据库I/O最小的单位。五.其他相关文件密码文件;参数文件:可分为文本格式文件PFILE(ParameterFile)和二进制格式文件SPFILE(ServerParameterFile),默认文件类型为:SPLIFE。Oracle10g可以设置的参数有254个,而oracle11g可设定的参数有289个。存档日志文件:当数据库为存档日志文件时,可进行日志切换,并将联机重做日志的内容复制为存档日志文件。警示日志文件:存放简要的错误信息后台进程跟踪文件:当服务器进程或后台进程发生错误时,所记录的详细错误信息,有时甚至包括内存转储。六.SQL语句的执行过程当服务器收到SQL语句时,需经过以下步骤:解析(Parse)----绑定(Bind)----执行(Execute)-----提取(Fetch,只有select语句需要执行此步骤)