
Oracle基础核心组件包括实例(运行时环境),数据库(物理存储)。
一个Oracle sever包括Oracle数据库(database)和实例(instance)

1. 实例(instance)
数据库启动时创建的实例(进程 + 内存结构集合),包含 1 个 SGA(系统全局区,如共享池、缓冲区高速缓存)和多个 PGA(程序全局区);一个服务器进程(专用 / 共享)启动时会分配 1 个独立 PGA(后台进程无独立 PGA),且无论启动多少进程,1 个实例始终只存在 1 个 SGA。
实例是数据库启动时在内存中创建的进程和内存结构集合,是数据库的 “运行时环境”,核心包括:
1.1. 内存结构
SGA(系统全局区):所有进程共享的内存区域,包含
- 共享池(Shared Pool):库缓存Library Cache(缓存 SQL 语句、PL/SQL 代码),数据字典缓存Data Dictionary Cache(数据字典信息)。
- 数据库缓冲区高速缓存(Database Buffer Cache):缓存数据块,减少磁盘 I/O。
- 重做日志缓冲区(Redo Log Buffer):临时存储数据修改的重做日志,确保事务持久性。
- 大型池(Large Pool,可选):为 RMAN 备份、共享服务器等提供大内存块。
- Java 池(Java Pool,可选)、流池(Streams Pool,可选)等。
PGA(程序全局区):每个服务器进程 / 会话私有的内存区域,存储 SQL 执行的临时数据(如排序、哈希连接的中间结果)、会话私有信息等。

1.2. 进程结构
用户进程(User Process):
用户进程是用户启动应用程序(如 SQL Developer、Java 客户端、Excel 等)时,由操作系统创建的进程,仅负责 “传递用户请求”,不直接访问数据库文件。
后台进程(Background Process):
负责数据库核心运维,如:
- DBWn(数据库写入进程,n代表数字或字母):将脏数据块从缓冲区缓存写入数据文件。注意如果从数据文件中读取数据用的是服务器进程
- LGWR(日志写入进程):将重做日志缓冲区的内容写入联机重做日志文件。
- CKPT(检查点进程):触发数据文件头的检查点更新,标记已写入磁盘的重做日志。
- SMON(系统监控进程):实例恢复、清理临时段等。
- PMON(进程监控进程):清理异常终止的进程,释放资源。
- ARCn(归档进程)(可选):在数据库处于归档模式 时,将写满的重做日志文件(Redo Log Files)复制到归档日志文件(Archived Log Files),实现日志的永久保存。
服务器进程(Server Process):
分为专用服务器进程(1 个会话对应 1 个进程)和共享服务器进程(多个会话共享 1 个进程),负责处理用户会话的 SQL 请求。

用户应用 → 用户进程 → 服务器进程 → 后台进程 → 数据库文件(数据文件、控制文件、日志文件等)
2. 数据库(database)
存储在磁盘上的物理文件集合,直接存储数据和元数据,是数据库的 “物理载体”。所有物理文件仅由 Oracle 数据库实例(Instance)访问,用户无法直接操作。主要包括以下 4 类:
数据文件(Data Files):存储实际业务数据(如用户表、索引、视图数据等)
控制文件(Control Files):记录数据库的 “元数据信息”,是实例启动的 “钥匙”
在线重做日志文件(Online Redo Log Files):记录数据库的 “事务变更”,用于崩溃恢复和实例恢复
参数文件(Parameter Files):定义数据库实例的启动参数(如内存分配、进程数限制等)。有两种格式:
pfile(文本文件):可直接用文本编辑器修改,参数生效需重启实例,
spfile(二进制文件):Oracle 推荐格式,需通过 SQL 命令(如ALTER SYSTEM)修改,支持 “动态生效”
3. Oracle逻辑结构
Oracle逻辑结构是独立于实例,数据库的“逻辑存储架构”核心,核心作用是结构化组织数据,让用户无需关注底层物理文件,仅通过表、表空间等逻辑对象操作数据,其核心层级从大到小为:表空间 → 段 → 区 → 数据块。



3.1. 表空间(Tablespace)
- 逻辑结构的顶层容器,直接对应数据库的物理数据文件(一个表空间可关联 1 个或多个数据文件)。
- 核心作用:隔离数据(如系统数据与业务数据分离)、控制存储位置、管理空间扩展(如自动扩容)。
- 关键分类:系统表空间(SYSTEM/SYSAUX,存储数据字典)、用户表空间(存储业务数据)、临时表空间(TEMP,存储排序等临时数据)、撤销表空间(UNDOTBS,存储回滚数据)。
3.2. 段(Segment)
- 表空间的下一级,是 “区的集合”,对应一个具体的逻辑对象(如表、索引)。
- 核心类型:数据段(存储表数据)、索引段(存储索引数据)、临时段(临时操作数据,会话结束释放)、撤销段(存储事务修改前的数据)。
- 特点:数据量增长时,会自动申请新区扩展段的大小。
3.3. 区(Extent)
- 存储分配的最小单位,是 “连续数据块的集合”。
- 核心作用:避免频繁分配单个数据块导致的性能损耗,一次分配多个连续块提升效率。
- 触发扩展:当段的现有区不足以存储新数据时,Oracle 自动为段分配新区。
3.4. 数据块(Date Block)
- 逻辑结构的最小存储单位,对应物理磁盘上的若干操作系统块,大小由参数
DB_BLOCK_SIZE定义(默认 8KB)。 - 核心作用:直接存储表行、索引键等实际数据,是数据读写的最小单位。
- 内部结构:包含块头(存储元数据,如块地址)、数据区(存储实际数据)、空闲空间(用于插入 / 更新数据)。
4. Oracle多租户架构
4.1. 多租户架构概述
在这种架构中,Oracle 数据库实例通过一个 容器数据库(CDB) 来管理多个 插拔数据库(PDB)。每个 PDB 可以看作是一个独立的数据库,可以拥有自己独立的用户、数据、表空间等。CDB 是多个 PDB 共享的基础设施,而 PDB 则充当实际的数据存储和应用环境。
4.2. 关键组件
1. CDB(Container Database,容器数据库)
- CDB 是多租户架构的基础容器数据库,其中包含多个 PDB 和一个共享的 根容器(CDB$ROOT)。
- CDB 本质上是一个具有特殊功能的数据库实例,它负责容纳所有的 PDB。CDB 本身包含了所有共享的系统数据字典、元数据、全局对象和管理功能。
2. CDB$ROOT(根容器)
- CDB$ROOT 是 CDB 的“根容器”,用于存储所有全局的数据字典和元数据。它包含了所有 PDB 所共享的对象和系统表(如视图、用户权限等)。
- 所有 CDB 的全局数据和配置都存储在此容器中。
3. PDB(Pluggable Database,插拔式数据库)
- PDB 是每个租户的逻辑数据库,用户和应用程序在 PDB 中操作。每个 PDB 拥有自己的数据、用户、表空间、应用等,并且与其他 PDB 之间是完全隔离的。
- PDB 是 可插拔的,即可以通过特定的操作将一个 PDB 插入或拔出一个 CDB 中,这使得数据库迁移、备份和恢复等任务更加灵活和高效。
4.3. Oracle 多租户架构的工作原理
在 Oracle 多租户架构中,CDB 作为基础设施容器,管理一个或多个 PDB。CDB 的核心作用是维护和管理共享的系统对象和数据字典,而每个 PDB 则可以独立工作,拥有自己的数据和应用。
CDB 的启动与关闭
- 启动一个 CDB 会自动启动其下所有的 PDB。CDB 的启动过程包括加载所有共享的系统信息和公共数据字典,而各个 PDB 会加载其独立的数据库实例配置。
- PDB 可以单独启动或关闭,这种灵活性便于对每个租户数据库进行独立的管理。
数据存储和资源管理
- 所有的 PDB 都共享 CDB 的底层存储和基础设施。CDB 管理共享的文件系统(如系统表空间、临时表空间等),而每个 PDB 则有自己的数据文件、表空间和日志文件。
- 这种架构使得多个 PDB 在物理上共享同一个存储,但在逻辑上是完全隔离的,每个 PDB 都有自己的“视图”。
安全与隔离
- 在 CDB/PDB 架构下,每个 PDB 内的用户、数据和权限是隔离的。PDB 之间不能直接访问其他 PDB 的数据。
- 例如,PDB 中的用户只能访问该 PDB 内的数据,而不能跨 PDB 操作。这确保了每个租户的数据安全性和隐私。
4.4. 多租户架构的使用
1.不同身份的用户有不同的访问权限。

1. 验证多租户架构是否启用
SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME = 'enable_pluggable_database';
2. 查看当前所在的容器(CDB$ROOT 或 PDB)
show con_name;
3. 查看所有 PDB 的名称、状态
SELECT PDB_NAME, STATUS FROM DBA_PDBS;//或者
SELECT CON_ID, NAME, OPEN_MODE, RESTRICTED FROM V$CONTAINERS;
4.切换容器
ALTER SESSION SET CONTAINER = <PDB名>;
5.PDB启停
-- 1. 启动单个 PDB(读写模式)
ALTER PLUGGABLE DATABASE pdb_hr OPEN;
-- 2. 启动所有 PDB(CDB 根容器中执行)
ALTER PLUGGABLE DATABASE ALL OPEN;
-- 3. 关闭单个 PDB
ALTER PLUGGABLE DATABASE pdb_hr CLOSE;
-- 4. 关闭所有 PDB
ALTER PLUGGABLE DATABASE ALL CLOSE;
-- 5. 设置 PDB 随 CDB 自动启动(永久生效)
ALTER PLUGGABLE DATABASE pdb_hr SAVE STATE;
-- 取消自动启动
ALTER PLUGGABLE DATABASE pdb_hr DISCARD STATE;
6.删除PDB
-- 方式 1:保留数据文件(可重新插入,安全)
DROP PLUGGABLE DATABASE pdb_hr_test KEEP DATAFILES;
-- 方式 2:彻底删除(含数据文件,不可恢复)
DROP PLUGGABLE DATABASE pdb_hr_test INCLUDING DATAFILES;



