第二章 - Oracle数据库基础

第二章 - Oracle数据库基础

2.1 Oracle简介

2.1.1 Oracle介绍

Oracle Database,又名 Oracle RDBMS,简称 Oracle。Oracle 数据库系统是美国 Oracle 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(client/server)或B/S体系结构的数据库之一,比如 SilverStream 就是基于数据库的一种中间件。Oracle 数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系型数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能,只要在一种机型上学习了 操作Oracle 的知识,便能在各种类型的机器上使用它。

Oracle 是一种高效率、可靠性好的、适应高吞吐量的数据库解决方案。

Oracle 数据库主要有四个版本,如下所示。

企业版:它是最强大和最安全的版本。它提供所有功能,包括卓越的性能和安全性。
标准版:它为不需要企业版强大软件包,提供用户基本功能。
易捷版(XE):它是轻量级,免费且有限的 Windows 和 Linux 版本。
Oracle Lite:专为移动设备而设计。

ORACLE 数据库系统能够在业内独占鳌头并不是空穴来风,下面我们来细数一下 ORACLE 数据库的优势所在:

1. 完整的数据管理功能:

数据的大量性
数据的保存的持久性
数据的共享性
数据的可靠性


2. 完备关系的产品:

信息准则---关系型DBMS的所有信息都应在逻辑上用一种方法,即表中的值显式地表示
保证访问的准则
视图更新准则---只要形成视图的表中的数据变化了,相应的视图中的数据同时变化
数据物理性和逻辑性独立准则


3. 分布式处理功能:

ORACLE数据库自第5版起提供了分布式处理能力,到第7版有比较完善的分布式数据库功能了,一个ORACLE分布式数据库由oraclerdbms、sql*Net、SQL*CONNECT和其他非ORACLE的关系型产品构成。


4. 用ORACLE能轻松的实现数据仓库的操作。

以上是Oracle数据库的优势,从这些优势中不难看出这是一款功能强大的数据库系统。

优点:

可用性强
可扩展性强
数据安全性强
稳定性强
开放性:oracle可以在所有主流的平台上运行,完全支持工业标准对开发商全力支持
安全性:获得最高认证级别的ISO标准认证
客户端支持以及应用模式:Oracle多层次网路计算机支持多种工业标准用ODBC,JDBC,OCI等网路客户链接
使用风险:Oracle长时间使用向下兼容得到广泛使用的风险

缺点:

对硬件要求高,价格也比较贵,管理也麻烦 操作比较复杂,技术要求比较高

数据文件(dbf)

数据文件是数据库的物理存储单位,而表空间TableSpace则是数据库的逻辑组成部分。数据库的数据是存储在表空间中的,而一个表空间可以由一个或多个数据文件组成,一个数据文件只能属于一个表空间。一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。

表空间

表空间是 Oracle 对物理数据库上相关数据文件(ORA 或者 DBF 文件)的逻辑映射。一个数据库在逻辑上被划分成一到若干个表空间,每个表空间包含了在逻辑上相关联的一组结构。每个数据库至少有一个表空间(称之为 system 表空间)。每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据库文件(datafile)。一个数据文件只能属于一个表空间。

用户

用户是在实例下建立的。不同实例中可以建相同名字的用户。注意!表的数据,是由用户放入某一个表空间的,而这个表空间会随机把这些表数据放到一个或者多个数据文件中。由于 Oracle 的数据库不是普通的概念,oracle 是由用户和表空间对数据进行管理和存放的。但是表不是由表空间去查询的,而是由用户去查的。因为不同用户可以在同一个表空间建立同一个名字的表!这里区分就是用户了!

SCOTT 和 HR(用户)

scott 与 hr 就是初始的普通用户,这些用户下面都默认存在了表结构

关于数据库语言的分类

DDL:数据库定义语言:create、drop

DML:数据库的操作语言:insert、update、delete

DQL:数据库的查询语言:select

DCL:数据库的控制语言:grant、revoke

数据库和实例

Oracle 数据库服务器由一个数据库和至少一个数据库实例组成。 数据库是一组存储数据的文件,而数据库实例则是管理数据库文件的内存结构。此外,数据库是由后台进程组成。

数据库和实例是紧密相连的,所以我们一般说的 Oracle 数据库,通常指的就是实例和数据库。

下图说明了 Oracle 数据库服务器体系结构:

在这种体系结构中,Oracle 数据库服务器包括两个主要部分:文件(Oracle 数据库)和内存(Oracle 实例)。

2.1.2 Oracle数据库

Oracle 数据库的一个基本任务是存储数据,以下部分简要地介绍 Oracle 数据库的物理和逻辑存储结构。

1、物理存储结构

物理存储结构是存储数据的纯文件。当执行一个 CREATE DATABASE 语句来创建一个新的数据库时,将创建下列文件:

- 数据文件 :数据文件包含真实数据,例如销售订单和客户等。逻辑数据库结构(如表和索引)的数据被物理存储在数据文件中。

- 控制文件 :每个 Oracle 数据库都有一个包含元数据的控制文件。元数据用来描述包括数据库名称和数据文件位置的数据库物理结构。

- 联机重做日志文件 :每个 Oracle 数据库都有一个联机重做日志,里面包含两个或多个联机重做日志文件。联机重做日志由重做条目组成,能够记录下所有对数据所做的更改。

除这些文件外,Oracle 数据库还包括如参数文件、网络文件、备份文件以及用于备份和恢复的归档重做日志文件等重要文件。

2、逻辑存储结构

Oracle 数据库使用逻辑存储结构对磁盘空间使用情况进行精细控制。以下是 Oracle 数据库中的逻辑存储结构:

- 数据块(Data blocks) :Oracle 将数据存储在数据块中。数据块也被称为逻辑块,Oracle 块或页,对应于磁盘上的字节数。

- 范围(Extents) :范围是用于存储特定类型信息的逻辑连续数据块的具体数量。

- 段(Segments) :段是分配用于存储用户对象(例如表或索引)的一组范围。

- 表空间(Tablespaces) :数据库被分成称为表空间的逻辑存储单元。 表空间是段的逻辑容器。 每个表空间至少包含一个数据文件。

下图说明了表空间中的段,范围和数据块:

下图显示了逻辑和物理存储结构之间的关系:

3、Oracle实例

Oracle 实例是客户端应用程序(用户)和数据库之间的接口。Oracle 实例由三个主要部分组成:系统全局区 (SGA),程序全局区 (PGA) 和后台进程。

如下图所示 :

DBWr(DBWR)在后来允许多进程写data file,所以改成DBWn了。

SGA 是实例启动时分配的共享内存结构,关闭时释放。 SGA 是一组包含一个数据库实例的数据和控制信息的共享内存结构。

不同于所有进程都可用的 SGA,PGA 是会话开始时为每个会话分配的私有内存区,当会话结束时释放。主要的Oracle数据库的后台进程

以下是 Oracle 实例的主要后台进程:

- PMON :是 Oracle 数据库中最活跃的一个进程,是调节所有其他进程的进程监视器。PMON 能够清理异常连接的数据库连接,并自动向侦听器进程注册数据库实例。

- SMON :是执行系统级清理操作的系统监视进程。它有两个主要职责,包括在发生故障的情况下自动恢复实例,例如断电和清理临时文件。

- DBWn :是数据库编写器。Oracle 在内存中执行每个操作。因为在内存中的处理速度比在磁盘上快。DBWn 进程从内存读取数据并将其写回到磁盘。 一个 Oracle 实例有许多数据库编写器,如:DBW0,DBW1,DBW2等等。

- CKPT :是检查点进程。 在 Oracle 中,磁盘上的数据称为块,内存中的数据称为缓冲区。 当该块写入缓冲区并更改时,缓冲区变脏,需要将其写入磁盘。CKPT 进程使用检查点信息更新控制和数据文件头,并向脏盘写入脏缓冲区的信号。 请注意,Oracle 12c 允许全面和增量检查点。

- LGWR 是日志写入过程,是可恢复架构的关键。 在数据库中发生的每一个变化都被写出到一个名为 redo 日志文件中用于恢复目的。 而这些变化是由 LGWR 进程编写和记录的。 LGWR 进程首先将更改写入内存,然后将磁盘写入重做日志,然后将其用于恢复。

- ARCn 是归档进程,它将重做日志的内容复制到归档重做日志文件。存档程序进程可以有多个进程,如:ARC0,ARC1 和 ARC3,允许存档程序写入多个目标,如 D:驱动器,E:驱动器或其他存储。

- MMON 是收集性能指标的可管理性监控流程。

- MMAN 是自动管理 Oracle 数据库内存的内存管理器。

- LREG 是监听器注册过程,它使用 Oracle Net Listener 在数据库实例和调度程序进程上注册信息。


2.2 Oracle 安装与卸载

2.2.1 Oracle 19c压缩包下载

打开Oracle的官方中文网站 https://www.oracle.com/ ,选择相应的版本即可。

找到对应版本下载就好,这里需要登录,

下载后,解压缩

2.2.2 Oracle安装

第1步:

安装程序要求提供您的电子邮件地址以获取最新的安全问题和更新。您可以单击下一步按钮跳过。

3

第2步

在这一步中,Oracle 安装程序会询问您是要创建和配置数据库,仅安装数据库软件还是仅升级现有数据库。因为首次安装 Oracle 数据库,请选择第一个选项 ( Create and configure a database ),然后单击下一步按钮。

4

第3步

安装程序允许您选择系统类型。因为我们是在桌面计算机上安装Oracle,而不是服务器,因此,这里选择第一个选项:桌面类 ( Desktop class ),然后单击下一步按钮。

5

第4步

在这一步骤中,允许指定要安装和配置 Oracle Home 以增强安全性的 Windows 用户帐户。选择第三个选项:“使用 Windows 内置帐户( Use Windows Built-in Account )”。

6

第5步

在此步骤中,选择要安装 Oracle 数据库的文件夹,全局数据库名称和密码,可插拔数据库名称。

8

第6步

安装程序执行前提条件检查。

9

第7步

安装程序会显示信息的摘要,例如全局设置,数据库信息等。如果一切正常,可查看信息并单击安装按钮。

10

确认安装?

11

即将要安装的信息概述 :

12

第8步

安装程序开始安装 Oracle 数据库。安装速度取决于您的计算机性能,需要几分钟的时间才能完成。

13

14

第9步

安装成功完成后,安装程序会通知提示安装完成,如下面截图所示。单击关闭按钮关闭窗口。

15

打开cmd命令提示框输入以下命令查看是否安装成功

sqlplus system/123456

2.2.3 Oracle卸载

1.关闭oracle所有的服务。

Window10用户可以在windows的任务管理器-->服务内关闭以oracle开头的所有服务;xp用户可以在我的电脑右击-->管理-->服务和应用程序-->服务,找到所有以oracle开头的服务,右击,关闭。

2.打开注册表:regedit

打开路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ 删除该路径下的所有以oracle开始的服务名称,这个键是标识Oracle在windows下注册的各种服务!

3.找到路径: HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE

删除该oracle目录,该目录下注册着Oracle数据库的软件安装信息。

4.删除注册的oracle事件日志,打开注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application 删除注册表的以oracle开头的所有项目。

5.删除环境变量path中关于oracle的内容。(这一步好像不做也可以。)

鼠标右键右单击“我的电脑-->属性-->高级-->环境变量-->PATH 变量。

删除Oracle在该值中的内容。注意:path中记录着一堆操作系统的目录,在windows中各个目录之间使用分号(;  )隔开的,删除时注意。

建议:删除PATH环境变量中关于Oracle的值时,将该值全部拷贝到文本编辑器中,找到对应的Oracle的值,删除后,再拷贝修改的串,粘贴到PATH环境变量中,这样相对而言比较安全。

6.重新启动操作系统。

以上1~5个步骤操作完毕后,重新启动操作系统。

7.重启操作系统后各种Oracle相关的进程都不会加载了。

删除oracle的安装目录,在这里就体现到了上面新建一个单独目录的好处了。可以直接把自定义
那个oracle文件夹直接删除。(数据库的东西好像删除起来也是很慢的)。
如果没有按照自定义的话,找到默认的那个安装目录,删除之。

8.删除开始菜单中的oracle项。

至此,Windows平台下Oracle就彻底卸载了。

补充:如果再次安装发现有问题,

百度的别人的完全卸载Oracle方法:

软件环境:

1、Windows XP + Oracle 10g

2、Oracle安装路径为:d:\Oracle1、如果数据库配置了自动存储管理(ASM),应该先删除聚集同步服务CSS(cluster Synchronization Services).删除CSS服务的方法是在DOS命令行中执行如下命令: localconfig delete2、在“服务”窗口中停止Oracle的所有服务。

3、在“开始”菜单中依次选择“程序”/“Oracle-OraDb10g_home1"/"Oracle Installation Products”/"Universal Installer",打开Oracle Universal Installer(OUI)窗口

4、单击“卸载产品”按钮,打开“产品清单”窗口,选中要删除的Oracle产品,单击“删除”按钮,打开“确认删除”对话框。

5、在“确认删除”对话框中单击“是”按钮,开始删除选择的Oracle产品。

6、删除自动存储管理(ASM),在DOS命令行中执行如下命令:oracle -delete -asmsid +asm7、运行regedit命令,打开注册表窗口。删除注册表中与Oracle相关的内容,具体如下:

   1、删除HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE目录。

   2、删除HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services中所有以oracle或OraWeb为开头的键。

   3、删除HKEY_LOCAL_MACHINE/SYSETM/CurrentControlSet/Services/Eventlog/application中所有以oracle开头的键。

   4、删除HKEY_CLASSES_ROOT目录下所有以Ora、Oracle、Orcl或EnumOra为前缀的键。

   5、删除HKEY_CURRENT_USER/SOFTWARE/Microsoft/windows/CurrentVersion/Explorer/MenuOrder/Start Menu/Programs中所有以oracle 开头的键。

   6、删除HKDY_LOCAL_MACHINE/SOFTWARE/ODBC/ODBCINST.INI中除Microsoft ODBC for Oracle注册表键以外的所有含有Oracle的键。其中有些注册表项可能已经在卸载Oracle产品时被删除。

8、删除环境变量中的PATHT CLASSPATH中包含Oracle的值。

9、删除“开始”/“程序”中所有Oracle的组和图标。

10、删除所有与Oracle相关的目录,包括:

    1、c:\Program file\Oracle目录。
    2、ORACLE_BASE目录。
    3、c:\Documents and Settings\系统用户名、LocalSettings\Temp目录下的临时文件。

重装出现

解决:打开“运行”,输入“lusrmgr.msc”回车,找到此前设置的冲突主目录用户,删掉



2.3 oracle 体系结构

Oracle是一个关系数据库系统,Oracle数据库是一个数据容器,它包含表、视图、索引、过程和函数等对象,用户只有和一个确定的数据库相连接,才能使用和管理该数据库中的数据。在使用数据库之前,有必要先了解Oracle数据库的体系结构。

Oracle数据库的体系结构包括哪几部分?

1. 物理存储结构
2. 逻辑存储结构
3. 内存结构
4. 进程结构
5. 数据库例程

其中,逻辑结构为Oracle引入的结构,物理结构为操作系统所拥有的结构。

2.3.1 物理存储结构

Oracle数据库的物理存储结构主要包括3大类文件:

1. 控制文件
2. 重做日志文件
3. 数据文件

1、控制文件

控制文件是一个较小的二进制文件,它维护着数据库的全局物理结构,用以支持数据库成功地启动和运行。

创建数据库时,同时就提供了与之对应的控制文件。在数据库使用过程中,Oracle不断更新控制文件,所以只要数据库是打开的,控制文件就必须处于可写状态。若由于某些原因使控制文件不能被访问,则数据库也就不能正常工作了。

控制文件存储了数据库名、数据库的数据文件和联机重做日志文件的名称和位置、数据库建立日期、数据库的当前序列号、数据库检查点、数据库中表空间名等信息。

每个数据库可包含两个或多个控制文件。控制文件以.CTL后缀结尾 。

控制文件虽小,但作用重大,它包含指向数据库其余部分的指针(包括重做日志文件,数据文件,归档日志文件等的位置),存储重要的序列号和时间戳,存储RMAN备份的详细信息。控制文件一旦受损,那实例会立马终止,一般对数据文件的保护采用多路复用机制,就是冗余多份在不同物理位置。

2、重做日志文件

重做日志文件(Redo Log File)用于记录对数据库的所有修改信息,修改信息包括用户对数据的修改,以及管理员对数据库结构的修改。其特点如下:

1. 每一个数据库至少包含两个重做日志文件组。
2. 重做日志文件以循环方式进行写操作。
3. 每一个重做日志文件成员对应一个物理文件。

数据库中的重做日志文件就是专门记录用户对数据库的所有修改,一旦数据库出现问题(如数据库服务器死机或突然断电),可以通过重做日志文件把数据库恢复到一个正确的状态。.LOG后缀结尾 。

重做日志文件以循环方式进行写操作。

重做日志按时间顺序存储应用于数据库的一连串的变更向量(包含联机重做日志文件和归档日志文件)。

由SMON在数据库启动时自动执行的实例恢复和磁盘损坏所要求的提取备份恢复都会应用到重做日志进行相应的数据恢复。

重做日志文件也建议进行多路复用,一个数据库至少要有两组重做日志文件。

一组供LGWR进行写入,日志文件是固定大小,业务高峰期会很快写满,写满之后会切换到第二组上,在配置为归档模式的数据库中,这时由归档进程(ARCn)开始将第一组的内容进行归档备份,如此循环地进行写入和归档。

需要注意的是,在归档进程还未对当前组的日志归档完毕前,是不允许LGWR对其进行重写的。

3、数据文件

数据文件是物理存储Oracle数据库数据的文件。包括两部分内容:用户数据和系统数据。用户数据是用来存放用户对象(表或者索引等),而系统数据则主要是指数据字典中的数据。

一个Oracle数据库一般会包含多个数据文件,但一个数据文件只对应一个数据库。可以对数据文件进行设置,使其在数据库空间用完的情况下进行自动扩展。

数据文件都是以.DBF后缀结尾。

数据文件存储着实际的数据,DBWn会将数据库缓冲区中的内容写入到这类文件中去,数据文件的大小和数量是不受限制的。Oracle从10g开始,创建一个数据库至少需要两个数据文件,一个用于SYSTEM表空间,该表空间用来存储数据字典;一个用于SYSAUX表空间,这个表空间用来存储一些数据字典的辅助数据。

数据文件由一个个的Oracle块组成,这是Oracle的I/O基础单元,与操作系统块是不同的概念,Oracle块要比操作系统块大,这当然有处于性能的一些考虑,但我们考虑这样一种情况,当用户使用操作系统命令进行数据文件的备份的时候(假设1个Oracle块=8个操作系统块),已经复制了4个操作系统块,然后CPU被DBWn抢占了,DBWn又重新对这个Oracle块进行了更新;

这时,当复制命令又得到了CPU时间去复制剩余的4个块的时候,就造成了整个Oracle块的数据不一致,所以,这也是在执行这种备份(用户自行备份)的时候,需要做一些额外处理,比如将表空间置为备份模式的原因。

当然,使用RMAN是不存在这样的问题的,RMAN的备份机制是肯定可以得到数据一致的块的。(这块内容作了解即可)

对于数据文件的保护,一般可进行定期备份,或者使用RAID也可以。

4、其他文件

- 初始化参数文件
- 口令文件
- 归档日志文件
- 备份文件
- 跟踪文件
- 预警日志文件

实例参数文件

这个文件存储了数据库所需的一些参数设置,比如各个内存区域的大小,可允许的最大进程数,最大会话数,控制文件的位置,数据库的名称等等,参数文件也是实例启动时首先要加载的文件。

口令文件

一般称为外部口令文件。一般的用户名和口令是存放在数据字典中,不会存放在这个文件中。在一些特殊场景下,比如实例还未启动,这时,我可能需要以管理员的身份登入系统去执行一些恢复或者启动操作,然而此时,数据字典由于实例还没启动是不存在的,这时就需要外部口令文件进行用户身份的验证。
允许 sysdba、 sysoper 和 sysasm 远程连接到实例并执行管理任务

归档日志文件

包含实例发生的数据更改(重做)的实时历史记录。使用这些文件和数据库备份,可以恢复丢失的数据文件。也就是说,归档日志能够恢复还原的数据文件。

ARCn将联机重做日志文件会备份归档到这类文件中去,归档日志文件保留了数据更改的完整历史信息。

备份文件

用于进行数据库恢复。如果原始文件在发生介质故障或用户错误时被损坏或删除,通常要还原备份文件。

跟踪文件

每个服务器和后台进程都可以写入关联的跟踪文件。当进程检测到内部错误时,进程会将有关该错误的信息转储到相应的跟踪文件中。写入跟踪文件的一些信息是为数据库管理员提供的,而其它信息是为 Oracle Support Services 提供的。

预警日志文件

这些文件包含特殊的跟踪条目。数据库的预警日志是按时间顺序列出的消息日志和错误日志。 Oracle 建议您定期查看预警日志。

2.3.2 逻辑存储结构

Oracle数据库管理系统没有像其他数据库管理系统那样直接操作数据文件,而是引入了一组逻辑存储结构。逻辑存储结构由表空间、段、区和数据块组成。
引入逻辑存储结构的目的主要有:

1) 增强Oralce数据库的可移植性。
2) 降低Oracle数据库使用者的操作难度。
3) 增加数据的使用安全性

1、表空间(tablespace)

表空间是Oracle数据库最大的逻辑结构,一个Oracle数据库在逻辑上由多个表空间组成,一个表空间只隶属于一个数据库。表空间在物理上包含一个或多个数据文件。

Oracle数据库中表空间的个数决定了数据文件的最小个数。如安装完Oracle数据库后默认创建的表空间有EXAMPLE表空间、SYSTEM表空间、SYSAUX表空间、TMEP表空间、UNDOTBS1表空间和USERS表空间。

数据库分为多个逻辑存储单元,这些单元称为“表空间”,用于对相关逻辑结构或数据文件进行分组。例如,表空间一般会将一个应用程序的所有段分成一组,以简化一些管理操作。

数据库被划分为多个“表空间”,表空间是可用于将相关逻辑结构组合在一起的逻辑存储单元。每个数据库都在逻辑上分为两个或多个表空间: SYSTEM 和 SYSAUX 表空间。在每个表空间均显式创建一个或多个数据文件,以在物理上存储表空间中所有逻辑结构的数据。

一个大小为 160 KB 的段跨越两个数据文件,由两个区组成。第一个区位于第一个数据文件中,大小为 64 KB;第二个区位于第二个数据文件中,大小为 96 KB。两个区都由若干相邻的 8Kb Oracle 块组成。

注: 可以创建大文件表空间,这种表空间只有一个通常非常大的文件。该文件的大小可达到行 ID 体系结构允许的最大大小。此最大大小是表空间的块大小乘以 236,如果块大小为 32 KB,则最大大小为 128 TB。传统的小文件表空间(默认值)可以包含多个数据文件,但这些文件都不大。

2、段

比表空间小的下一级逻辑结构是段。段是按照不同的处理性质,在表空间划分出不同区域。
包括:数据段 、索引段 、临时段 、还原段 和系统引导段 。

逻辑数据库存储中区的上一级称为“段”。一个段是为某个逻辑结构分配的一组区。例如:

- 数据段: 每个非集群的、不按索引组织的表都有一个数据段,但外部表、全局临时表和分区表除外,这些表中的每个表都有一个或多个段。表中的所有数据都存储在相应数据段的区中。对于分区表,每个分区都有一个数据段。每个集群也都有一个数据段。集群中每个表的数据都存储在集群的数据段中。

- 索引段: 每个索引都有一个索引段,存储其所有数据。对于分区索引,每个分区都有一个索引段。

- 还原段: 系统会为每个数据库实例创建一个 UNDO 表空间。该表空间包含大量用于临时存储还原信息的还原段。还原段中的信息用于生成读一致性数据库信息,以便在数据库恢复过程中回退用户未提交的事务处理。

- 临时段: 临时段是 SQL 语句需要临时工作区来完成执行时由 Oracle DB 创建的。语句完成执行后,临时段的区将返回到实例以备将来使用。您可以为每个用户指定一个默认临时表空间,或指定一个在数据库范围内使用的默认临时表空间。

注: 另外还有一些上面未列出的其它类型的段。此外,还有一些方案对象,如视图、程序包和触发器等,虽然它们是数据库对象,但不被视为段。段拥有单独的磁盘空间分配。其它对象则以行的形式存储在系统元数据段中。

Oracle DB 服务器对空间进行动态分配。如果段中的现有区已满,则会再增加一些区。因为区是根据需要来分配的,因此段中的区在磁盘上可能是相邻的,也可能是不相邻的,它们可以来自属于同一个表空间的不同数据文件。

3、区

区(Extent)是由一组连续的Oracle数据块组成。

一个段由若干个区组成,当创建一个段时(如创建一个表时),系统会在相应表空间中找到空闲区(Free Extent)为该段分配空间。当这个段释放或者销毁时,这些释放的区会被添加到所在表空间的空闲区中,以便再次分配和使用。

逻辑数据库空间的下一级是“区”。区是特定数量的相邻 Oracle 数据块(通过一次分配获得),用于存储特定类型的信息。区中的 Oracle 数据块在逻辑上是相邻的,但在物理上可以分布在磁盘上的不同位置( RAID 条带化和文件系统实施会导致此现象)。

4、数据块

Oracle DB 的数据存储在“数据块”中,数据块是粒度最低的一级。一个数据块对应于磁盘中特定字节数的物理空间。每个表空间的数据块大小是在表空间创建时指定的。数据库以 Oracle 数据块为单位使用和分配空闲数据库空间。

数据块是数据库中最小的、最基本的存储单位。

Oracle数据块的基本结构由块头部、表目录、行目录、空闲空间、行空间等几部分组成。

综上所述:表空间、段、区、数据块构成了Oracle数据库的逻辑存储结构,可通过Oracle数据库的数据字典进行查询。逻辑存储结构从逻辑的角度分析数据库的组成,简单的说,多个数据块组成区,多个区组成段,多个段组成表空间,多个表空间组成数据库。

逻辑结构和物理结构之间的转换关系图

5、实例

数据库实例也称作服务器,由系统全局区(SGA)和后台进程组成。
实例用来访问数据库且只能打开一个数据库,一个数据库可以被多个实例访问。

2.3.3 内存结构

由于内存结构和进程结构关系较紧密,进程会作用到对应的内存区域,比如数据库写入器作用到数据库缓冲区缓存中,日志写入器会作用到日志缓冲区,所以内存结构和进程结构会相互配合地进行描述。

oracle实例内存结构由两部分组成SGA(系统全局区)和PGA(用户全局区)组成,SGA是一块共享的内存区域,也是最大的一块内存区域;PGA则是用户会话专有的内存区域,每个会话在服务器端都有一块专有的内存区域就是PGA。

内存是Oracle重要的信息缓存和共享区域,Oracle使用的主要内存结构包括:

SGA(System Global Area系统全局区) 
PGA(Program Global Area程序全局区)

SGA中的信息是可以被所有用户共享。

PGA保存单个进程的会话数据和控制信息,PGA的内容为指定服务器进程所专用,不能被其他服务器进程所共享。

1、SGA(系统全局区)

oracle数据库运行时,会现在内存中划分一个固定区域,用于存储每个用户所需存取的数据,以及oracle运行时必备的系统信息,叫系统全局区(System global area),由于他是用户进程共享的一块内存区域,也叫共享内存区。

SGA是Oracle实例的组成部分,SGA区的内容可以被所有用户所共享。SGA主要由以下几部分组成:

数据块缓冲区
字典缓存区
重做日志缓冲区
共享池

数据块缓冲区(Database Buffer Cache)

又称为数据库数据高速缓冲区,主要目的是为了缓存操作的数据,从而减少系统读取磁盘的次数。

用于缓存当前或最近使用的从磁盘读取的数据块的拷贝,来优化数据库的I/O减少物理读/写。Oralce依据LRU算法对该内存区域进行block-level的更新.LRU算法(简单理解就是最近最小使用的数据调出内存)。

1)脏缓存快(Dirty buffers)
数据被修改过并且已经commit但是还未写入磁盘的数据缓存块,脏缓存块最终被DBWn进程写入到磁盘的数据文件中永久保存。

2)命中缓存块(Pinned buffers)
最近正在被访问的缓存块,始终被保留在数据高速缓存中,不会被写入数据文件。

3)空闲缓存块(Free buffers)
该缓存块中没有数据,等待被写入数据。oracle从数据文件中读取数据后,寻找空闲缓存块,以便写入其中。

字典缓存区(Dictionary cache)

当数据库需要读取存储在数据字典中的对象信息时,需要将该信息存储在字典缓存区中。

重做日志缓冲区(Redo Log Buffer)

重做日志缓冲区的主要目的就是数据的恢复。日志缓冲区是一块比较小的内存区域,它是用来短期存储将写入到磁盘中的重做日志信息。日志缓冲区也是为了减少磁盘IO,减少用户的等待时间。

共享池(Shared Pool)

SGA中的共享池(shared pool)是由库高速缓存(library cache)和数据字典高速缓存(data dictionary cache)两部分所组成。服务器进程将SQL或者PL/SQL语句的正文和编译后的代码以及执行计划都放在共享池的库高速缓存中,在进行编译时,服务器进程首先会在共享池中搜索是否有相同的SQL或者PL/SQL语句,如果有就不进行任何后续的编译处理,而是直接使用已存在的编译后的代码和执行计划。

库缓存区(Librabry Cache)

该区域存放共享SQL和PL/SQL代码。服务器进程在执行语句时,首先会匹配库缓存,如果存在相同语句则无需编译直接使用已编译的执行计划。绑定变量不是在编译阶段赋值的,而是在运行阶段赋值的,因此含有绑定变量的SQL语句可以不用重新编译。


数据字典高速缓存(data dictionary cache)

当Oracle在执行SQL语句时,服务器进程将把数据文件、表、索引、列、用户和其他的数据对象的定义和权限的信息放入数据字典高速缓存。如果在这之后,有用户进程需要同样的信息,如表和列的定义,那么所有的这些信息都将从数据字典高速缓存中获得。
我们都知道,相比SQL语句,表和列的定义等重用的机会更多,同样的,为了达到共享这些信息的目的,数据字典高速缓存应该尽量设置的大一些。

大池(Large Pool)

大池是个可选的内存区域,可提供一个大的缓冲区供数据库的备份与恢复操作过程使用。数据库的备份恢复、执行具有大量排序操作的SQL语句、并行化的数据库操作时可能需要用到大池。

Java池(Java Pool)

JAVA池在数据库中支持JAVA 的运行,存放JAVA代码和JAVA语句的语法分析表

流池(Stream Pool)

用于缓存流进程在数据库间移动/复制数据时使用的队列消息。一般从重做日志中提取变更记录的进程和应用变更记录的进程会用到流池。

2、PGA(程序全局区)

PGA (Program Global area)用户存放服务器进程的数据和控制信息,是独立于SGA的一块内存区域,oracle服务器会为每个服务器进程分配相应的PGA。

PGA组成部分:排序区、会话信息。游标状态、堆栈空间

- 排序区 :存储order by、group by等包含排序操作的sql语句所产生的临时数据。也就是说我不管用order by和group by查询出来的结果集是发生改变了但是并没有改变它本身的表结果,所以是临时文件。

- 会话区 :存储会话所具有的权限、角色、性能统计信息。也就是我们常说的session,利用session来判断改用户是否具有某些权限。

- 游标区 :保存执行带有游标的PL\SQL语句时所产生的临时数据。

- 堆栈区 :存储会话中的变量以及sql语句在运行时的内存结构信息。

PGA是在用户进程连接到oracle数据库并创建一个会话时,由oracle自动分配的。PGA是非共享区,主要用于存储该连接使用的变量信息和与用户进程交换的信息,只有服务器进程本身才能访问它自己的PGA区。会话结束时,PGA释放。

2.3.4 进程结构

进程是操作系统中的一种机制,它可以执行一系列的操作步骤。

而在Oracle中进程可分为:用户进程和Oracle进程;其中Oracle进程又可以分为:服务器进程和后台进程。

什么是用户进程?

就是当用户运行应用程序时,操作系统会为用户运行的应用建立一个进程。这个进程就是用户进程。

什么服务器进程和后台进程?

服务器进程用于处理连接到该实例的用户进程的请求。
后台进程是在实例启动时启动,启动Oracle数据库的实例时会自动启动后台进程。

什么时实例?

实例=进程+内存结构

进程是操作系统中一个独立的可以调度的活动,用于完成指定的任务,进程可看作由一段可执行的程序、程序所需要的相关数据和进程控制块组成。

Oracle系统中的进程分为以下三类:用户进程、服务器进程和后台进程。

用户进程

为运行用户应用程序或Oracle工具所建立的进程。当用户执行应用程序连接到Oracle系统时,系统自动为其分配一个用户进程。

服务器进程

处理用户进程的各种请求。解释、编译和执行用户进程所发的SQL语句,并将SQL语句执行结果返回给客户端应用程序。

后台进程

Oracle数据库的主要后台进程包括:

1) DBWR:数据库写入进程。负责将SGA中数据库缓冲区的数据写入数据文件中。一个Oracle数据库中最多可以配置10个DBWR进程。

2) LGWR:日志写入进程。负责将重做日志缓冲区的内容写入到联机日志文件中。

3) SMON:系统监控进程。负责回收不用的临时空间、合并碎片、执行数据库的恢复等操作。

4) PMON:进程监控进程。检查用户进程的运行状态。当用户进程已结束时负责清除缓存、释放资源等操作。

5) CKPT:检查点进程。当检查点发生时负责更新所有数据文件头信息和控制文件的信息,用来减少执行Oracle恢复所需的时间。

2.3.5 数据库例程

1、数据库实例和数据库的关系

每一个运行的Oracle数据库都对应一个Oracle例程(Instance),也可以称为实例。它是一种访问数据库的机制,由系统全局区和一些后台进程组成。
一个数据库可以由多个实例打开,但任何时刻一个实例只能打开一个数据库。多个实例可以同时运行在同一个机器上,它们彼此访问各自独立的物理数据库。

2、Oracle例程的启动与关闭

掌握了Oracle数据库例程的组成,下面具体了解Oracle例程的启动与关闭方法。

在SQL*Plus中,可以使用STARTUP命令启动数据库例程,这条命令只有SYS用户才可以执行。

在SQL*Plus中,可以使用SHUTDOWN命令关闭数据库例程,这条命令也只有SYS用户才可以执行。

启动数据库例程的命令为STARTUP,执行STARTUP命令时,显示的信息如图所示。

关闭数据库例程的命令为SHUTDOWN,执行SHUTDOWN命令时,显示的信息如图所示。

posted @ 2023-10-02 16:33  WNAG_zw  阅读(80)  评论(0编辑  收藏  举报