与其他RDBMS软件一样,Oracle数据库是建立在SQL之上的,SQL是一种标准化的编程语言,数据库管理员、数据分析师和其他IT专业人员使用它来管理数据库并查询存储在其中的数据。Oracle软件与PL/SQL绑定,PL/SQL是Oracle开发的一种实现,它为标准SQL添加了一组专有的编程扩展,这是RDBMS供应商的常见做法。Oracle数据库还支持用Java编程,用PL/SQL或Java编写的程序可以从其他语言调用。
此外,与其他关系数据库技术一样,Oracle数据库利用行和列表结构,将不同表中的相关数据元素相互连接;因此,用户不必将相同的数据存储在多个表中以满足处理需求。关系模型还提供了一组完整性约束,以保持数据的准确性;这些检查是对原子性、一致性、隔离性和持久性原则(称为ACID属性)的更广泛遵守的一部分,旨在确保数据库事务得到可靠处理。
从体系结构的角度来看,Oracle数据库服务器包括用于存储数据的数据库和用于管理数据库中包含的文件的一个或多个数据库实例。数据库混合了物理和逻辑存储结构。物理存储结构包括数据文件、包含数据库元数据的控制文件以及记录数据更改的在线重做日志文件。逻辑存储结构包括数据块;区段,其将逻辑上连续的数据块分组在一起;线段,它们是范围的集合;以及充当段的逻辑容器的表空间。
Oracle数据库实例是围绕一组缓存构建的,称为系统全局区域(SGA),其中包含共享内存池;实例还包括在后台运行的进程,这些进程管理I/O功能并监视数据库操作以优化性能和可靠性。独立的客户端进程为连接到实例的用户运行应用程序代码,而服务器进程管理客户端进程和数据库之间的交互。每个服务器进程都被分配了一个称为程序全局区域的专用内存区域,与SGA分离。
Oracle数据库包括一长串不同功能类别的标准功能、附加选项和管理包,包括高可用性、可扩展性、性能、安全性和分析。除了Oracle Multitender、Oracle Database In Memory和RAC之外,Enterprise Edition中一些值得注意的额外项目还包括用于自动工作负载管理、数据库生命周期管理、性能调整、在线分析处理(OLAP)、分区、数据压缩以及空间和图形数据管理的模块,想要进一步学习可以了解一下即将开展的数据库管理与调优培训班。
Oracle Advanced Analytics选项支持数据库内SQL查询和开源R算法,用于更广泛的分析处理。高可用性功能包括应用程序连续性和自动块修复工具,以及Data Guard和Active Data Guard,它们提供了一套用于创建备份数据库的服务,以提供灾难恢复功能并防止数据损坏。
存储在Oracle数据库中的数据可以加密以确保数据安全,标准版和企业版都支持网络加密和强身份验证。许多其他安全功能在Enterprise Edition中作为附加功能提供。例如,Oracle Key Vault软件将所有加密密钥保存在一个位置,以便更容易地解密数据。使用Oracle Advanced Security,数据可以透明地加密和编辑,从而可以与其他用户共享数据,而不会让他们看到不应该访问的机密信息。
Oracle数据屏蔽和子集包使数据在用于开发和测试时能够进一步加密或以其他方式屏蔽,Oracle标签安全性帮助数据库管理员(DBA)确定谁可以查看哪些数据的界限;它通过为单独的数据行分配分类或标签,然后允许用户只查看与其标签授权匹配的行,从而实现细粒度的访问控制。
Oracle Database Enterprise Edition还具有可用的安全功能,可以帮助DBA首先确定谁可以访问数据,例如Oracle Database Vault,它可以防止用户访问他们无权查看的数据。Oracle Database Vault还进行权限分析,因此用户可以获得有效完成工作所需的最低访问级别。Oracle Audit Vault和数据库防火墙支持基于策略的数据访问审核,以监控使用情况;它还监视SQL活动并防止未经授权的SQL流量到达数据库。
一般我们所说的Oracle指的是Oracle RDBMS(Relational databases Management system),一套Oracle数据库管理系统,也称之为Oracle Server。而Oracle Server主要有两大部分:
所以可以细分为: Oracle Server = 内存池 + 后台进程 + 数据文件 + 控制文件 + 日志文件
Oracle DB 服务器由一个 Oracle DB 以及一个或多个数据库实例组成。实例由内存结构和后台进程构成。每当启动一个实例时,都会分配一个称为系统全局区 (SGA) 的共享内存区,并启动后台进程。
一台Oracle Server支持创建多个Database,而且每个Datacase是互相隔离而独立的。不同的Database拥有属于自己的全套相关文件,例如:有各自的密码文件,参数文件,数据文件,控制文件和日志文件。
Database由一些物理文件(如:存放在存储设备中的二维表文件)组成。二维表存储在Database中,但Database的内容不能被用户直接读取,用户必须通过Oracle instance才能够访问Database,一个Instance只能连接一个Database,但是一个Database可以被多个Instance连接。
Oracle 实例使用内存结构和进程来管理和访问数据库。所有内存结构都存在于构成数据库服务器的那些计算机的主内存中。进程是在这些计算机的内存中运行的作业。进程被定义为操作系统中可运行一系列步骤的“控制线程”或机制。
数据库包括物理结构和逻辑结构。由于物理结构和逻辑结构是分开的,因此管理数据的物理存储时不会影响对逻辑存储结构的访问。
上图分三部分组成,左侧User Process、Server Process、PGA可以看做成Clinet端,上面的实例(Instance)和下面的数据库(Database)及参数文件(parameter file)、密码文件(password file)和归档日志文件(archived logfiles)组成Oracle Server,所以整个示图可以理解成一个C/S架构。 Oracle Server由两个实体组成:实例(instance)与数据库(database)。这两个实体是独立的,不过连接在一起。在数据库创建过程中,实例首先被创建,然后才创建数据库。在典型的单实例环境中,实例与数据库的关系是一对一的,一个实例连接一个数据库,实例与数据库也可以是多对一的关系,即不同计算机上的多个实例打开共享磁盘系统上的一个公用数据库。这种多对一关系被称为实际应用群集(Real Application Clusters,RAC)RAC极大提高了数据库的性能、容错与可伸缩性(可能耗费更多的存储空间)并且是oracle网格(grid)概念的必备部分。
将上面的Oracle RDBMS架构图进行抽象分类,可以将Oracle架构抽象为:Oracle体系 = 内存结构 + 进程结构 + 存储结构
Oracle服务器,所谓Oracle服务器是一个数据库管理系统,它包括一个Oracle实例(动态)和一个Oracle数据库(静态)。Oracle实例是一个运行的概念(如操作系统的进程),提供了一种访问Oracle数据库的方式,始终打开一个,并且只能打开一个Oracle数据库,Oracle实例有SGA和一些后台服务进程组成。在后台服务进程当中,DBWn PMON CKPT LGWR SMON是必备的后台进程,而ad queue、rac、shared server、ad replication则是可选的,之所以可选,它们是因为离开它Oracle也能正常运行,要么是一些高级的功能才可以用得到。
Oracle数据库是一个被统一处理的的数据的集合,从物理角度来看包括三类文件数据文件,控制文件,重做日志文件。从逻辑角度来看,Oracle数据库至少包含一个表空间,表空间至少包含一个段,段由区做成,区有块组成。需要注意的是表空间可以包含若干个数据文件,段可以跨同一个表空间的多个数据文件,区只能在同一个数据文件内。
Oracle还设计了其他的关键文件用来为整个系统服务,如配置文件、密码文件、归档日志文件,还有还有用户进程和服务进程,现在可以简单理解下执行SQL语句就要用到这2个进程。
数据库实例指数据库服务器的内存及相关处理程序,它是Oracle的心脏。与Oracle性能关系最大的是SGA(System Global Area,即系统全局区活共享内存区),SGA包含三个部分:
1、数据缓冲区,可避免重复读取常用的数据;
2、日志缓冲区,提升了数据增删改的速度,减少磁盘的读写而加快速度;
3、共享池,使相同的SQL语句不再编译,提升了SQL的执行速度。
Oracle数据库实例的另一部分就是一些后台进程了,他主要包括:
这些后台进程合起来完成数据库管理任务。在访问数据库的时候,必须先启动实例,实例启动时先分配内存区,然后再启动后台进程,后台进程执行库数据的输入、输出以及监控其它Oracle进程。在数据库启动过程中有五个进程是必须启动的,它们是系统监控进程(SMON)、进程监控(PMON)、数据库写进程(DBWR)、日志写进程(LGWR)、检验点进程(CKPT),否则实例无法创建。
注意:在启动oracle数据库的时候。因为有些进程是在开机启动项中自动启动的。所以占用了很大一部分内存。如果您电脑上还有一些其他占用内存比较大的程序。在启动oracle数据库的时候有可能会因内存不足而启动失败。
Oracle的逻辑结构是一种层次结构。主要由:表空间、段、区和数据块等概念组成。逻辑结构是面向用户的,用户使用Oracle开发应用程序使用的就是逻辑结构。数据库存储层次结构及其构成关系,结构对象也从数据块到表空间形成了不同层次的粒度关系。
(1)数据文件(Data Files)
数据文件是Oracle数据库中存储数据的基本单位。每个数据文件都对应于操作系统中的一个物理文件,可以位于磁盘、阵列或其他存储介质上。数据文件是以固定大小的块(Block)为单位进行管理的。
(2)表空间(Tablespaces)
表空间是一个逻辑存储结构,用于组织和管理数据文件。一个数据库可以包含多个表空间,每个表空间包含一个或多个数据文件。表空间可以由DBA(数据库管理员)创建和管理,它定义了数据文件的分配和增长方式。
Oracle数据库中有四种类型的表空间:系统表空间、用户表空间、临时表空间和回滚表空间。系统表空间用于存储数据库的元数据,用户表空间用于存储用户数据,临时表空间用于存储临时数据(如排序和临时表),回滚表空间用于存储事务回滚数据。
(3)段(Segments)
段是逻辑结构中更高层次的组织单位,用于存储和管理数据。一个表或索引在磁盘上对应一个或多个段。根据对象的类型不同,可以有表段、索引段、分区段等。
表段包含了表的数据行,索引段包含了索引的键值和指向表的指针。分区段是指将表或索引分割为多个部分,每个部分独立存储在不同的段中,以提高查询效率和管理灵活性。
(4)盘区(Extents)
盘区是段的存储单元,它是由一个或多个连续的数据块组成的。在Oracle数据库中,块是最小的物理读写单位,一般为8KB或16KB大小。盘区的大小取决于段的大小、空间使用情况以及数据库的配置参数。
当段需要存储更多数据时,Oracle会自动分配新的盘区。如果一个盘区不足以容纳一个逻辑块,则会分配多个相邻的盘区。当段中的数据被删除或移动时,相应的盘区会被释放出来供其他对象使用。
(5)块(Blocks)
块是Oracle数据库中最基本的存储单位。它是数据文件中的连续数据单元,用于存储和检索数据。每个块由一组字节组成,包括数据、元数据和用于管理块的控制信息。
在一个块中,可以存储一个或多个表或索引的数据行。块的大小在创建数据库时确定(默认大小为8K)并且在整个数据库中保持一致。较小的块大小可以提高存储效率,但也会增加管理开销。较大的块大小可以提高IO性能,但会浪费存储空间。
Oracle物理结构由控制文件、数据文件、重做日志文件、参数文件、归档文件、口令文件组成
一个数据库中的数据存储在磁盘上物理文件,被使用时,调入内存。其中控制文件、数据文件、重做日志文件、跟踪文件及警告日志(trace files、alert files)属于数据库文件;参数文件(parameter file)口令文件(password file)是非数据库文件。
于此我们需要知道的是,一个数据库中的数据是存储在磁盘上的物理文件,被使用时才被调入内存中的。其中控制文件、数据文件、重做日志文件、跟踪文件、警告文件属于数据库文件。参数文件、口令文件属于非数据库文件。
控制文件的使用过程是控制文件把Oracle引导到数据库文件的其它部分。启动一个实例时,Oracle从参数文件中读取控制文件的名字和位置。安装数据库时,Oracle打开控制文件。最终打开数据库时,Oracle从控制文件中读取数据文件的列表并打开其中的每个文件。
和数据库文件相关,执行两个重要的功能,为数据库指出控制文件和为数据库指出归档日志的目标。
Oracle实例有两个关联的基本内存结构:
1、系统全局区 (SGA)
称为 SGA 组件的共享内存结构组,这些组件包含一个 Oracle DB实例的数据和控制信息。 SGA 由所有服务器和后台进程共享。 SGA 中存储的数据示例包括高速缓存的数据块和共享 SQL 区域。
SGA 是包含实例的数据和控制信息的内存区。 SGA 包含以下数据结构:
• 数据库缓冲区高速缓存: 用于缓存从数据库中检索到的数据块
• 重做日志缓冲区: 用来缓存用于实例恢复的重做信息,直到可以将其写入磁盘中存储的物理重做日志文件
• 共享池: 用于缓存可在用户间共享的各种结构
• 大型池: 为某些大型进程(例如 Oracle 备份和恢复操作)和 I/O 服务器进程提供大型内存分配的可选区域。
• Java 池: 用于 Java 虚拟机 (JVM) 中特定于会话的所有 Java 代码和数据
• 流池: Oracle Streams 使用它来存储捕获和应用操作所需的信息
2、程序全局区 (PGA)
包含某个服务器进程或后台进程的数据及控制信息的内存区域。
PGA 是 Oracle DB 在服务器进程或后台进程启动时创建的非共享内存。服务器进程对PGA 的访问是互斥的。每个服务器进程和后台进程都具有自己的 PGA。
程序全局区 (PGA) 是一个内存区,其中包含每个服务器进程的数据及控制信息。 Oracle 服务器进程为客户机请求提供服务。每个服务器进程都有自己专用的 PGA,其 PGA 在服务器进程启动时创建,对 PGA 的访问权限仅限于该服务器进程,并且只能由代表该服务器进程的 Oracle 代码对 PGA 进行读写。
Oracle DB 使用初始化参数来创建和管理内存结构。管理内存的最简单的方法是允许数据库自动管理和优化内存。要做到这一点(以下操作适用于大多数平台),只需设置目标内存大小初始化参数 (MEMORY_TARGET) 和最大内存大小初始化参数(MEMORY_MAX_TARGET)。
Oracle DB 系统中的进程主要分为两组:
1、运行应用程序或 Oracle 工具代码的用户进程
对于不同的 Oracle DB 配置,用户进程结构有所不同,具体取决于操作系统和选择的 OracleDB 选件。已连接用户的代码可以配置为专用服务器或共享服务器。
• 专用服务器: 对于每个用户,运行数据库应用程序的用户进程都由执行 Oracle DB 服务器代码的专用服务器进程提供服务。
• 共享服务器: 不必为每个连接都提供一个专用服务器进程。分派程序将多个传入网络会话请求引到共享服务器进程池。共享服务器进程为所有客户机请求提供服务。
2、运行 Oracle DB 服务器代码的 Oracle DB 进程(包括服务器进程和后台进程)
Oracle DB 创建服务器进程以处理连接到实例的用户进程的请求。用户进程代表连接到Oracle DB 的应用程序或工具。它可以与 Oracle DB 在同一台计算机上,也可以在远程客户机上利用网络来访问 Oracle DB。用户进程首先与一个监听程序进程通信,在专用环境中该进程会创建一个服务器进程。
所创建的代表每个用户的应用程序的服务器进程可以执行以下一项或多项操作:
• 对通过应用程序发出的 SQL 语句进行语法分析并运行语句
• 从磁盘上的数据文件中将必要的数据块读取到 SGA 的共享数据库缓冲区中(如果这些数据块目前尚未在 SGA 中)
• 返回结果,使应用程序可以处理信息
为了最大限度地提高性能并满足多个用户的需要,多进程 Oracle DB 系统使用一些称为“后台进程”的附加 Oracle DB 进程。一个 Oracle DB 实例可以有多个后台进程。
非 RAC、非 ASM 环境中的常见后台进程包括:
更高级的配置(如 RAC)中可能会有其它后台进程。有关后台进程的详细信息,请参见V$BGPROCESS 视图。
有些后台进程是在启动实例时自动创建的,而另外一些则是根据需要创建的。
其它进程结构不是特定于单个数据库的,而是可以在同一个服务器上的多个数据库间共享的。 Grid Infrastructure 进程和网络进程即属于此类。
Linux 和 UNIX 系统上的 Oracle Grid Infrastructure 进程包括: