Oracle简介:
Oracle是由甲骨文公司开发出来的,并于1989年正式进入中国市场,成为第一家进入中国的世界软件巨头。当然,当时的Oracle尚名不见经传,由Oracle开发的商用关系型数据库技术即年开始服务于中国用户。1991年7月,Oracle在北京建立独资公司。Oracle数据库,是积聚了众多领先性的数据库系统,在集群技术、高可用性、商业智能、安全性、系统管理等方面都领跑业界。
与Oracle数据库基本同时期的还有informix数据库系统。两者使用的用户有所侧重。Oracle数据库系统银行业使用较多,informix数据库系统,通讯业使用较多。
由于ORACLE数据库产品是当前数据库技术的典型代表,他的产品除了数据库系统外,还有应用系统、开发工具等。刚接触Oracle的人员都有这样的感觉:Oracle的产品太多,每个产品内容精深,不知道从哪儿开始学才好。
为了用少量时间更好地理解和使用Oracle数据库系统,有必要对Oracle的一些基本术语及概念进行了解,下面给出一些经常用到的概念,帮助快速了解Oracle数据库系统提供方便。
Oracle 服务器结构
Oracle 服务器是一个具有高性能和高可靠性面向对象关系型数据库管理系统,也是一个高效的 SQL 语句执行环境。
Oracle 服务器具备以下的特点:
- 能够可靠的进行多用户环境下大量数据的处理,允许多用户同时访问相同的数据。
- 保证数据访问的高性能
- 有效防止对数据的非法访问
- 对于故障恢复提供高效的解决方案。
Oracle 服务器的总体结构
Oracle服务器同运行在操作系统下的很多程序一样,通过在后台运行一组可执行程序、在内存中开辟运行的存储区域并在磁盘上存储数据来进行运作。
在结构上,Oracle服务器(Oracle Server)由实例(Instance)和数据库(Database)量大部分构成。实例是一组内存结构和Oracle后台进程的集合:数据库在物理上有多个操作系统文件组成,其中主要包括数据文件、控制文件、重做日志文件。
Oracle服务器 = 实例 + 数据库
Oracle实例
Oracle实例有内存结构(SGA)和Oracle后台进程组成的。
当用户启动(start)实例时,Oracle将自动为SGA分配内存并启动后台进程,实例运行后,用户可以访问实例,有实例来访问数据库。实例相当于用户和数据库的中间层。
当用户关闭(shut down)实例时,由操作系统负责回收内存。每个实例都有自己的SGA,并且,每个实例同时只能访问一个数据库。
Oracle数据库实例(Instance)= 内存结构(SGA)+ 后台进程(Background Process)
内存结构描述的是Oracle数据库对内存的使用构成。Oracle内存结构被总称为SGA(System Global Area),主要包括数据高速缓冲区(Database Buffer Cache)、重做日期缓冲区(Redo Log Buffer)和共享池(Shared Pool)三部分。
Oracle后台进程主要有 DBWn、CKPT、LGWR、SMON、PMON、ARCn和RECO
Oracle数据库
Oracle数据库包含了用于存放数据的数据库文件(DataFiles),用于保护数据不丢失的联机重做日志文件(Online Redolog Files)和用于连接Oracle实例和数据库所需的控制文件(Control Files)。
Oracle数据库 = 数据文件 + 控制文件 + 联机重做日志文件
除了以上三种文件之外,Oracle还包含了参数文件(Parameter File)、口令文件(Password File)、归档日志文件(Archived Log Files)、以及跟踪文件(Trace File)和警告文件(Alert Log File)等非数据库文件。
- 控制文件:记录了数据库的各项信息,是连接Oracle实例和Oracle数据库的桥梁。每个Oracle数据库包含了1-8个控制文件。
- 联机重做日志文件:记录了用户对数据的各项操作,用于保护数据不丢失。以日志组的形式存在。每个Oracle数据库至少包含两个日志组。
- 数据文件:用于存放数据。
- 参数文件:记录了Oracle实例的各项信息,分为动态、静态初始化参数文件。
- 口令文件:存放特定用户的口令。
- 归档日志文件:相当于联机重做日志文件的备份,用于保护数据不丢失。
- 追踪文件:存放后台进程和服务器进程的跟踪信息。
- 警告文件:警告文件有连续的消息和错误组成。可以查看到Oracle内部错误、块损坏错误、及非默认的初始化参数值等。
Oracle内存结构
oracle数据库启动起来以后oracle会在内存里面划出一部分空间,这块空间被oracle所独享所使用。这块内存oracle给它起名叫SGA。一般译为:system global area 或shared global area。
当启动Oracle数据库时,系统会先在内存内规划一个固定区域,用来储存用户需要的数据,以及Oracle运行时必备的系统信息。是Oracle Instance的基本组成部分,在实例启动时分配。
SGA我们通常叫系统全局区,或共享全局区。这块内存有六大块。对我们来讲最重要的是三块:共享池、数据库缓冲区高速缓存、重做日志缓冲区。对应的英文名:shared pool,database buffer cache,redo log buffer,这三块空间是我们着重要讨论和关心的,而这三块最容易出问题的是 shared pool和buffer cache,所以我们更加关注共享池和数据库缓冲区高速缓存。
oracle启动起来以后有两大内存结构,一大块叫SGA,一大块叫PGA。SGA是共享的,PGA是给进程使用的。PGA(Program Global Area程序全局区)是一块包含一个服务进程的数据和控制信息的内存区域。sga有六大块组成:shared pool,java pool,large pool,buffer cache,redo log,stream pool。
oracle数据库启动起来以后还会启动一堆进程。这些进程分两大类,前台进程和后台进程。
在实际生产中,前台进程的数量要远远大于后台进程的数量。因为对oracle数据库的每一个连接都会产生一个前台进程,一般的对数据库来讲都有上百个连接,至少前台进程上百个,后台进程就十几个,所以就oracle数据库来讲前台进程的数量要远远大于后台进程的数量。
对于SGA来讲,所有的内存空间对所有的进程来讲是共享的,每个进程可以访问SGA所有的内存空间。所以说SGA是所有进程共享的一个内存空间。
实际的工作中,可能有些进程主要使用buffer cache,有些进程主要使用redo log,有一些单个内存池的单独分配。但我们认为,oracle数据库的所有进程共享内存SGA中的六大空间。
对单个进程来讲,它除了能够访问这一大块SGA以外,单个进程它有自己的进程空间,也是一块内存空间,这块空间从PGA来。
oracle新的版本里面,oracle有一个大的PGA空间,oracle每启一个进程就从这个大的PGA空间拿出一块来给这个进程。对这个进程来讲,它会把一些公共的信息写到SGA里面去, 这个进程所独有的私有的信息写到自己的PGA里面去,每个进程都这样从PGA分一块。
Oracle整体的体系结构
oracle实例有SGA,SGA中有六个池子,还有五个后台进程。
oracle有三大文件,控制文件、数据文件、重做日志文件。还有归档日志文件。
oracle有六大内存块,共享池、streams池、大型池、java池、数据库缓冲区高速缓存、重做日志缓冲区。
有五大后台进程,检查点(CKPT)、系统监视器(SMON)、进程监视器(PMON)、数据库写进程(DBWn)、日志写进程(LGWR)。
控制文件存放的了很多信息,先简单的讲两类信息:
- 整个数据库的物理结构信息,在控制文件里面记录着。
所谓的物理结构,主要是数据库有多少数据文件,数据文件分别放在什么位置。oracle数据库有多少redolog文件,这些文件分别放在什么位置。 - 控制文件中还记录着数据库当前运行的一些状态信息。
比如说哪个数据文件是在线正常的,哪些数据文件是离线不正常的。oracle数据库当前正在使用着众多重做日志文件的哪一个,哪一些日志文件有一些问题。数据库当前运行的一些状态信息,也记录在控制文件中。
控制文件我们目前主要讲两类信息: - 数据库的物理结构信息。
- 数据库的当前运行的一些状态信息。
数据文件:里面放的是oracle实的数据库文件数据。oracle数据主要放的是表,表信息就放在数据文件里面,控制文件会很小,但是数据文件会很大。因为oracle所有的数据全部放在数据文件里面。
重做日志文件:日志文件里放的是日志。日志记录的是,oracle对数据库、对数据文件所做的所有的修改,全部会以日志的方式记录在日志文件中。它记录的是数据文件的变化过程。
这是三大类文件。
oracle数据库接收到的是SQL语句,对SQL语句进行处理、执行,执行完以后会获取到数据,再返给用户。