Oracle及数据库简介

官方文档 https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/introduction-to-oracle-database.html#GUID-166C1E31-CDBC-47D9-867A-3D4C9AAC837D

  • 数据库的目的
    1.记录数据可以为任何可用的载体,实体的物质、虚体的思想
    2.数据库是作为一个单元处理的信息的有组织收集。
    3.数据库的目的是收集、存储和检索相关信息,供数据库应用程序使用

数据库管理系统(DBMS Database Management System)

控制数据存储、组织和检索的软件

  • 内核代码
    管理数据库管理系统的内存和存储
  • 元数据存储
    数据库系统表等,称为数据词典
  • 查询语言
    访问、操作数据

关系型数据库之前的数据库有分层数据库、网络数据库。
由于不存在数据定义语言,因此很难更改数据的结构。缺乏简单的查询语言,这阻碍了应用程序的开发

关系型数据库

关系数据库将数据存储在一组简单的关系中。关系是一组元组。元祖是一组无序的属性值。
表是以行(元组)和列(属性)形式对关系的二维表示。表中的每行都有相同的列集。关系数据库是将数据存储在关系(表)中的数据库

  • 结构
    定义良好的对象存储或访问数据库的数据。
  • 操作
    明确定义的操作使应用程序能够操作数据库的数据和结构。
  • 数据完整性
    完整性规则管理数据库数据和结构的操作。

关系数据库管理系统(RDBMS)

RDBMS将数据移动到数据库中,存储数据并检索数据,以便应用程序可以操作它。

  • 逻辑操作
    应用程序指定了所需的内容。例如,应用程序请求员工姓名或将员工记录添加到表格中。
  • 物理操作
    RDBMS决定了应该如何做事情并进行操作。例如,在应用程序查询表后,数据库可以使用索引查找请求的行,将数据读取到内存中,并在将结果返回给用户之前执行许多其他步骤。RDBMS存储和检索数据,以便物理操作对数据库应用程序透明。

schmea、对象的集合

一个用户拥有一个同名的schema。数据库schema是逻辑数据结构或schema对象的集合。数据库用户拥有一个数据库schema,该schema与用户名具有相同的名称。和mysql、mariaDB还是有很大区别的
image.png

table

描述了具体的实体类型
建表时给每列一个名称、数据类型和大小。
表是一组行。列标识表描述的实体的属性,而行标识该实体的实例。例如,员工实体的属性对应于员工ID和姓氏的列。一行标识特定员工。
可为列指定一条规则,称为完整性约束。一个例子是NOT NULL完整性约束。此约束迫使列在每行中包含一个值。

Indexes 索引

索引是一种可选的数据结构。可以使用可用的索引来高效地查找请求的行。
**索引在逻辑上和物理上独立于数据。**可以删除和创建索引,对表或其他索引没有影响。删除索引后,所有应用程序都会继续运行。

数据访问

遵守公认的数据访问语言行业标准

结构化查询语言(SQL)

SQL是一种基于集合的声明语言,为RDBMS提供接口。是关系数据库的ANSI标准语言。描述了要做什么,而不是怎么做。

  • 查询数据
  • 在表格中插入、更新和删除行
  • 创建、替换、更改和删除对象
  • 控制对数据库及其对象的访问
  • 保证数据库的一致性和完整性

PL/SQL和Java

PL/SQL是Oracle数据库对SQL语句的扩展。能够使用所有Oracle Database SQL语句、函数和数据类型。您可以使用PL/SQL来控制SQL程序的流程,使用变量,并编写错误处理过程

事务管理

Oracle被设计为多用户数据库。数据库必须确保多个用户可以同时工作,而不会损坏彼此的数据。

事务

事务是一个逻辑的原子工作单元,包含一个或多个SQL语句。事务的基本原则是原子性,要么全部成功,要么全部失败。
RDBMS必须能够对SQL语句进行分组,以便它们要么全部提交,这意味着它们被应用于数据库,要么全部回滚,这意味着它们已被撤销。

数据并发访问

如果多个用户访问相同的数据,那么管理并发的一种方法是让用户等待。所有修改数据的SQL语句都必须在尽可能少的干扰下进行。必须避免破坏性交互,即错误更新数据或更改基础数据结构的交互。
Oracle数据库使用锁来控制对数据的并发访问。确保数据完整性,同时允许最大程度地并发访问数据。

Oracle数据库架构

数据库和实例

Oracle数据库服务器由一个数据库和至少一个数据库实例组成,通常简称为实例。

  • 数据库
    数据库是一组文件,位于磁盘上,用于存储数据。这些文件可以独立于数据库实例存在。
  • 数据库实例
    实例是一组管理数据库文件的内存结构。该实例由一个称为系统全局区域(SGA system global area)的共享内存区域和一组后台进程组成。实例可以独立于数据库文件存在。
    image.png
    每个用户与实例的连接,客户端进程都会运行应用程序。每个客户端进程都与自己的服务器进程相关联。服务器进程有自己的私有会话内存,称为程序全局区域(PGA program global area)

多租户架构

  • 多租户容器数据库(CDB container database)
    非CDB是传统的甲骨文数据库,不能包含PDB
  • 可插拔数据库(PDB pluggable database)是schemas、schema对象和非schema对象的便携式集合

多租户架构的好处

大型企业可能会使用数百或数千个数据库,通常在多个物理服务器的不同平台上运行。通过将独立计算机上的多个物理数据库合并到一台计算机上的单个数据库中。

  • 降低硬件成本
  • PDB管理人(仅管理自己负责的PDB)和CDB管理人(管理整个CDB)之间的职责分离
  • 可管理设置:
    通过拔下和插入PDB,更轻松地升级数据和代码
    在将PDB插入生产CDB之前,使用PDB进行开发,从而更容易进行测试
    能够将单个PDB闪存回以前的SCN
    能够在PDB级别为内存和I/O设置性能限制
    能够在应用程序容器中安装、升级和管理主应用程序定义,该容器是一组插入公共应用程序根的PDB

数据库整合

可以将传统的非CDB作为PDB插入CDB。

  • 非CDB
    每个非CDB都有自己的内存和一组数据库文件,都有自己的专用用户应用程序
    image.png
非CDB
  • CDB
    image.png
将非CDB合并为CDB
MYCDB包含两个PDB:hrpdb和salespdb。要管理CDB本身或其中的任何PDB,CDB管理员可以连接到CDB根,CDB根是所有PDB所属的模式、模式对象和非模式对象的集合 ## 应用容器 应用程序容器是一个可选的、用户创建的容器,用于存储一个或多个应用程序模型的数据和元数据。 应用程序容器在CDB中作为特定于应用程序的CDB。一个应用程序容器,就像CDB本身一样,可以包括多个应用程序PDB,并使这些PDB能够共享元数据和数据。 SaaS部署可以使用多个应用程序PDB,每个PDB适用于不同的客户,这些PDB共享应用程序元数据和数据。

image.png

SaaS用例
### 分片架构 Oracle Sharding是一种基于跨多个Oracle数据库的数据水平分区的数据库缩放技术。应用程序将数据库池视为单个逻辑数据库。

数据库存储结构

物理和逻辑。物理结构和逻辑结构是分开的

  • 物理数据是在操作系统级别可查看的数据
  • 表等逻辑数据仅对数据库有意

物理存储结构

存储数据的文件

  • 数据文件Data files
    一个或多个物理数据文件,包含所有数据库数据
  • 控制文件Control files
    一个控制文件,含指定数据库物理结构的元数据,包括数据库名称以及数据库文件的名称和位置
  • 在线重做日志文件Online redo log files
    一组两个或多个在线重做日志文件,记录对数据所做的所有更改
    ###逻辑存储结构
    对磁盘空间的使用进行细粒度控制分为块,区,段和表空间
  • 数据块
    数据存储在数据块中

  • 逻辑连续数据块,通过单个分配获得,用于存储特定类型的信息

  • 用于用户的对象(表table、索引index)、undo数据、临时数据分配
  • 表空间
    表空间是段的逻辑容器。每个表空间由至少一个数据文件组成Data files。

Oracle实例结构

客户端连接Oracle,会连接到数据库实例。实例通过在SGA之外分配其他内存区域,并在后台进程之外启动其他进程来为应用程序提供服务。

Oracle数据库进程

  • 客户端进程 Client Process
    客户端进程在客户端中,不属于Oracle服务器
  • 后台进程
    为每个客户端进程运行的多个Oracle数据库程序处理的功能。后台进程异步执行I/O并监控其他Oracle数据库进程
  • 服务器进程
    与客户端进程通信,并与Oracle交互

实例内存结构

每个连接的用户创建和使用程序代码、用户之间共享的数据和私有数据区域的内存结构。

  • SGA 系统级别全局共享
    共享内存结构,包含一个数据库实例的数据和控制信息
  • PGA 私有
    服务器或后台进程的数据和控制信息。访问PGA是该过程独有的。每个服务器进程和后台进程都有自己的PGA。

这个家伙很懒,啥也没有留下😋