【Oracle】系统体系结构介绍

在这里插入图片描述

个人主页:Guiat
归属专栏:Oracle

在这里插入图片描述

正文

1. Oracle架构概述

Oracle数据库是全球最流行的企业级关系型数据库管理系统之一,其强大的功能和高度可扩展的架构使其成为众多大型企业的首选。让我们深入了解Oracle的系统架构!

1.1 Oracle的核心理念

  • 高可用性和可靠性
  • 可扩展性和性能优化
  • 数据安全和完整性
  • 企业级功能支持
  • 跨平台兼容性

1.2 Oracle架构的演进

timeline
    title Oracle版本演进
    section 早期版本
        1979 : Oracle V2 : 首个商业RDBMS
        1983 : Oracle V3 : 支持事务处理
        1984 : Oracle V4 : 读一致性
    section 现代基础
        1992 : Oracle7 : PL/SQL存储过程
        1997 : Oracle8 : 对象关系特性
        1999 : Oracle8i : 互联网计算
    section 企业版本
        2001 : Oracle9i : Real Application Clusters
        2003 : Oracle10g : 网格计算
        2007 : Oracle11g : 自动存储管理
    section 云时代
        2013 : Oracle12c : 多租户架构
        2018 : Oracle18c : 自治数据库
        2019 : Oracle19c : 长期支持版本
        2021 : Oracle21c : 创新特性

1.3 Oracle架构的主要组件

Oracle数据库系统由两个主要部分组成:

Oracle数据库系统
实例 Instance
数据库 Database
系统全局区 SGA
后台进程 Background Processes
服务器进程 Server Processes
程序全局区 PGA
数据文件 Datafiles
控制文件 Control Files
重做日志文件 Redo Log Files
参数文件 Parameter Files
归档日志 Archive Logs

2. Oracle实例(Instance)详解

2.1 什么是Oracle实例?

Oracle实例是运行Oracle数据库的内存结构和进程的集合。当我们启动Oracle数据库时,实际上是启动了一个Oracle实例,它会打开并访问数据库文件。

-- 查看当前实例信息
SELECT instance_name, status, database_status 
FROM v$instance;

-- 查看实例启动时间
SELECT instance_name, startup_time 
FROM v$instance;

2.2 系统全局区(SGA)

SGA是Oracle实例中最重要的内存结构,它是所有会话共享的内存区域。

2.2.1 SGA的主要组件

系统全局区 SGA
数据库缓冲区 Database Buffer Cache
共享池 Shared Pool
重做日志缓冲区 Redo Log Buffer
Java池 Java Pool
流池 Streams Pool
大池 Large Pool
库缓存 Library Cache
数据字典缓存 Data Dictionary Cache
结果缓存 Result Cache
保持缓冲区 Keep Buffer
回收缓冲区 Recycle Buffer
默认缓冲区 Default Buffer

2.2.2 查看和配置SGA

-- 查看SGA组件大小
SELECT component, current_size/1024/1024 as "Size (MB)" 
FROM v$sga_dynamic_components;

-- 查看SGA总大小
SELECT sum(value)/1024/1024 as "Total SGA (MB)" 
FROM v$sga;

-- 动态调整SGA组件大小
ALTER SYSTEM SET sga_target = 2G SCOPE=BOTH;
ALTER SYSTEM SET db_cache_size = 500M SCOPE=BOTH;

2.3 程序全局区(PGA)

PGA是为每个服务器进程分配的私有内存区域,不同会话之间不共享。

2.3.1 PGA的主要组件

  • 会话内存:存储会话变量和其他会话信息
  • 私有SQL区:存储绑定变量信息和运行时缓冲区
  • 排序区:用于ORDER BY和GROUP BY等操作
  • 哈希连接区:用于哈希连接操作
  • 位图合并区:用于位图索引操作
-- 查看PGA使用情况
SELECT name, value/1024/1024 as "Value (MB)" 
FROM v$pgastat 
WHERE name IN ('total PGA allocated', 'total PGA inuse', 'maximum PGA allocated');

-- 设置PGA大小
ALTER SYSTEM SET pga_aggregate_target = 1G SCOPE=BOTH;

2.4 后台进程

Oracle使用多种后台进程来维护和管理数据库实例。这些进程在后台静默运行,执行各种关键任务。

2.4.1 主要后台进程

Oracle后台进程
SMON 系统监视器
PMON 进程监视器
DBWn 数据库写入器
LGWR 日志写入器
CKPT 检查点
MMON 内存监视器
ARCn 归档进程
实例恢复
临时段回收
表空间合并
进程清理
资源释放
监听器注册
脏缓冲区写入
检查点请求处理
重做日志写入
提交确认

2.4.2 查看后台进程

-- 查看当前运行的后台进程
SELECT pname, description 
FROM v$bgprocess 
WHERE paddr != hextoraw('00') 
ORDER BY pname;

-- 查看后台进程的详细信息
SELECT p.pname, p.description, s.sid, s.serial#, s.program 
FROM v$bgprocess p, v$session s 
WHERE p.paddr = s.paddr 
AND p.paddr != hextoraw('00');

2.5 服务器进程

服务器进程负责处理连接到Oracle实例的用户请求,每个用户会话通常对应一个服务器进程。

2.5.1 服务器进程的工作模式

服务器进程工作模式
专用服务器模式 Dedicated Server
共享服务器模式 Shared Server
每个连接一个服务器进程
资源消耗较大
适合长连接/复杂查询
多个连接共享服务器进程
节省系统资源
适合短连接/简单查询
使用调度器和请求队列

2.5.2 配置服务器进程

-- 查看当前连接模式
SELECT name, value 
FROM v$parameter 
WHERE name = 'dispatchers';

-- 配置共享服务器
ALTER SYSTEM SET shared_servers = 10 SCOPE=BOTH;
ALTER SYSTEM SET dispatchers = '(PROTOCOL=TCP)(DISPATCHERS=5)' SCOPE=BOTH;

-- 查看当前会话信息
SELECT username, server, status, program 
FROM v$session 
WHERE type = 'USER';

3. Oracle数据库(Database)详解

3.1 物理存储结构

Oracle数据库的物理存储结构由多种文件组成,这些文件共同存储和管理数据。

3.1.1 主要物理文件

Oracle物理文件
数据文件 Datafiles
控制文件 Control Files
在线重做日志 Online Redo Logs
归档重做日志 Archived Redo Logs
参数文件 Parameter Files
密码文件 Password Files
警报和跟踪文件 Alert & Trace Files
存储表和索引数据
.dbf扩展名
存储数据库结构信息
数据库恢复必需
记录数据库变更
实现事务恢复
长期保存重做日志
用于时间点恢复
SPFILE 服务器参数文件
PFILE 初始化参数文件

3.1.2 查看物理文件信息

-- 查看数据文件
SELECT file_name, tablespace_name, bytes/1024/1024 as "Size (MB)", status 
FROM dba_data_files 
ORDER BY tablespace_name;

-- 查看控制文件位置
SELECT name FROM v$controlfile;

-- 查看重做日志文件
SELECT group#, member, bytes/1024/1024 as "Size (MB)", status 
FROM v$logfile lf, v$log l 
WHERE lf.group# = l.group#;

3.2 逻辑存储结构

Oracle数据库的逻辑存储结构是建立在物理存储结构之上的,它提供了一个抽象层,使用户能够以逻辑方式组织和管理数据。

3.2.1 主要逻辑结构

Oracle逻辑结构
表空间 Tablespaces
段 Segments
区 Extents
块 Blocks
SYSTEM 系统表空间
SYSAUX 辅助系统表空间
TEMP 临时表空间
UNDO 撤销表空间
用户表空间 User Tablespaces
表段 Table Segments
索引段 Index Segments
回滚段 Rollback Segments
临时段 Temporary Segments
连续的数据块集合
动态分配和释放
最小I/O单位
通常为8KB

3.2.2 表空间管理

-- 创建表空间
CREATE TABLESPACE users_data
DATAFILE '/u01/oradata/users01.dbf' SIZE 100M AUTOEXTEND ON NEXT 50M MAXSIZE 2G
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;

-- 查看表空间信息
SELECT tablespace_name, status, contents, allocation_type, segment_space_management
FROM dba_tablespaces;

-- 查看表空间使用情况
SELECT df.tablespace_name,
       ROUND(df.bytes/1024/1024,2) as "Size (MB)",
       ROUND(NVL(f.bytes,0)/1024/1024,2) as "Free (MB)",
       ROUND((df.bytes-NVL(f.bytes,0))/1024/1024,2) as "Used (MB)",
       ROUND((NVL(f.bytes,0)/df.bytes)*100,2) as "Free %"
FROM (SELECT tablespace_name, SUM(bytes) bytes FROM dba_data_files GROUP BY tablespace_name) df,
     (SELECT tablespace_name, SUM(bytes) bytes FROM dba_free_space GROUP BY tablespace_name) f
WHERE df.tablespace_name = f.tablespace_name(+)
ORDER BY df.tablespace_name;

3.3 数据字典

数据字典是Oracle数据库的核心组件,它包含了关于数据库结构和对象的元数据。

3.3.1 数据字典的组织

Oracle数据字典
静态数据字典视图
动态性能视图
DBA_* 视图
ALL_* 视图
USER_* 视图
CDB_* 视图
V$* 视图
GV$* 视图
所有对象信息
当前用户可访问对象
当前用户拥有对象
当前实例信息
RAC所有实例信息

3.3.2 常用数据字典查询

-- 查询所有表
SELECT owner, table_name, tablespace_name, status
FROM dba_tables
WHERE owner = 'SCOTT'
ORDER BY table_name;

-- 查询表的列信息
SELECT column_name, data_type, data_length, nullable
FROM dba_tab_columns
WHERE owner = 'SCOTT' AND table_name = 'EMP'
ORDER BY column_id;

-- 查询索引信息
SELECT index_name, index_type, uniqueness, status
FROM dba_indexes
WHERE owner = 'SCOTT' AND table_name = 'EMP';

-- 查询约束信息
SELECT constraint_name, constraint_type, status, validated
FROM dba_constraints
WHERE owner = 'SCOTT' AND table_name = 'EMP';

4. Oracle内存管理

4.1 自动内存管理

Oracle提供了多种内存管理方式,从完全手动到完全自动。

4.1.1 内存管理模式

Oracle内存管理模式
自动内存管理 AMM
自动共享内存管理 ASMM
手动共享内存管理
自动PGA管理
手动PGA管理
memory_target参数
自动调整SGA和PGA
sga_target参数
自动调整SGA组件
手动设置各SGA组件
pga_aggregate_target参数
sort_area_size等参数

4.1.2 配置自动内存管理

-- 启用自动内存管理(AMM)
ALTER SYSTEM SET memory_max_target = 4G SCOPE=SPFILE;
ALTER SYSTEM SET memory_target = 4G SCOPE=SPFILE;
-- 需要重启数据库生效

-- 启用自动共享内存管理(ASMM)
ALTER SYSTEM SET sga_target = 3G SCOPE=BOTH;
ALTER SYSTEM SET pga_aggregate_target = 1G SCOPE=BOTH;

-- 查看内存参数设置
SELECT name, value, isdefault, ismodified
FROM v$parameter
WHERE name IN ('memory_target', 'memory_max_target', 'sga_target', 'pga_aggregate_target');

4.2 内存监控和调优

监控Oracle内存使用情况对于性能调优至关重要。

4.2.1 SGA监控

-- 查看SGA组件大小
SELECT component, current_size/1024/1024 as "Size (MB)", min_size/1024/1024 as "Min Size (MB)",
       max_size/1024/1024 as "Max Size (MB)", user_specified_size/1024/1024 as "User Size (MB)"
FROM v$sga_dynamic_components
ORDER BY current_size DESC;

-- 查看缓冲区命中率
SELECT name, value
FROM v$sysstat
WHERE name IN ('db block gets', 'consistent gets', 'physical reads');

-- 计算缓冲区命中率
SELECT (1 - (phy.value / (cur.value + con.value))) * 100 as "Buffer Cache Hit Ratio"
FROM v$sysstat cur, v$sysstat con, v$sysstat phy
WHERE cur.name = 'db block gets'
AND con.name = 'consistent gets'
AND phy.name = 'physical reads';

4.2.2 PGA监控

-- 查看PGA使用统计
SELECT name, value/1024/1024 as "Value (MB)"
FROM v$pgastat;

-- 查看工作区使用情况
SELECT name, total_executions as "Total Execs",
       optimal_executions as "Optimal Execs",
       onepass_executions as "Onepass Execs",
       multipasses_executions as "Multipass Execs"
FROM v$sql_workarea_histogram
WHERE total_executions != 0;

-- 查看PGA建议
SELECT * FROM v$pga_target_advice;

5. Oracle进程架构

5.1 连接架构

Oracle支持多种连接架构,以适应不同的应用场景和负载需求。

5.1.1 连接模型

Oracle连接架构
专用服务器模式
共享服务器模式
连接池
一个连接一个服务器进程
直接内存访问
资源消耗较大
多个连接共享服务器进程
通过请求队列通信
节省系统资源
可能增加响应时间
应用服务器管理连接池
复用数据库连接
减少连接开销

5.1.2 监听器配置

Oracle监听器是客户端连接到数据库的关键组件。

# listener.ora示例配置
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = myhost.example.com)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl.example.com)
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
      (SID_NAME = orcl)
    )
  )

5.1.3 管理监听器

# 启动监听器
lsnrctl start

# 停止监听器
lsnrctl stop

# 查看监听器状态
lsnrctl status

# 重新加载监听器配置
lsnrctl reload

5.2 多实例架构

Oracle提供了多种方式来实现高可用性和可扩展性,其中最重要的是Real Application Clusters (RAC)。

5.2.1 RAC架构

Oracle RAC架构
共享存储
多个数据库实例
集群软件
互连网络
ASM磁盘组
SAN存储
实例1
实例2
实例n
Clusterware
资源管理
私有互连
心跳检测
SGA1
后台进程1
SGA2
后台进程2

5.2.2 RAC特有的后台进程

  • LMS (Global Cache Service Process): 管理全局缓存服务
  • LMD (Global Enqueue Service Daemon): 管理全局锁
  • LMON (Global Enqueue Service Monitor): 监控全局锁
  • RMSn (RAC Management Server Process): 管理RAC资源
-- 查看RAC实例信息
SELECT inst_id, instance_name, host_name, status, startup_time
FROM gv$instance;

-- 查看服务分配
SELECT service_name, inst_id, count(*) as session_count
FROM gv$session
GROUP BY service_name, inst_id
ORDER BY service_name, inst_id;

6. Oracle存储管理

6.1 自动存储管理(ASM)

ASM是Oracle推荐的存储管理解决方案,它简化了数据库文件的管理,并提供了优秀的性能和可用性。

6.1.1 ASM架构

ASM架构
ASM实例
ASM磁盘组
ASM文件
ASMB进程
RBAL进程
ARBn进程
外部冗余磁盘组
普通冗余磁盘组
高冗余磁盘组
数据文件
重做日志文件
控制文件
归档日志文件
无镜像
双向镜像
三向镜像

6.1.2 ASM管理命令

-- 连接到ASM实例
SQL> CONNECT / AS SYSASM

-- 查看ASM磁盘组
SQL> SELECT name, state, type, total_mb, free_mb
     FROM v$asm_diskgroup;

-- 创建ASM磁盘组
SQL> CREATE DISKGROUP data_dg
     NORMAL REDUNDANCY
     DISK '/dev/sdc1', '/dev/sdd1', '/dev/sde1'
     ATTRIBUTE 'au_size'='4M',
               'compatible.asm'='19.0',
               'compatible.rdbms'='19.0';

-- 添加磁盘到磁盘组
SQL> ALTER DISKGROUP data_dg ADD DISK '/dev/sdf1';

-- 删除磁盘组
SQL> DROP DISKGROUP data_dg INCLUDING CONTENTS;

6.2 表空间管理

表空间是Oracle数据库中最重要的逻辑存储单元,它将数据库对象映射到物理存储。

6.2.1 表空间类型

表空间类型
永久表空间
临时表空间
撤销表空间
系统表空间
SYSAUX表空间
用户表空间
存储临时对象
排序操作
存储撤销信息
支持读一致性
事务回滚
本地管理表空间
字典管理表空间
自动段空间管理
手动段空间管理

6.2.2 表空间管理命令

-- 创建永久表空间
CREATE TABLESPACE users_data
DATAFILE '/u01/oradata/orcl/users01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 50M MAXSIZE 2G
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;

-- 创建临时表空间
CREATE TEMPORARY TABLESPACE temp_data
TEMPFILE '/u01/oradata/orcl/temp01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 50M MAXSIZE 1G
EXTENT MANAGEMENT LOCAL;

-- 创建撤销表空间
CREATE UNDO TABLESPACE undo_data
DATAFILE '/u01/oradata/orcl/undo01.dbf' SIZE 200M
AUTOEXTEND ON NEXT 50M MAXSIZE 2G

结语
感谢您的阅读!期待您的一键三连!欢迎指正!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Guiat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值