未记录事实核验 · 状态:现行内容
记录仅说明核验时间与维护状态,不保证适用于所有环境;使用前请留意正文中的版本、适用条件与风险提示。
warning 适用边界与维护说明
本文适用于Oracle架构学习及具备相应权限的查询探索,不是可直接执行的银行生产参数方案、完整Data Guard部署教程或自动监控实现;本次仅作全文结构审阅,未作外部事实核验或环境执行验证。内存与并发配置数值须结合硬件、负载及内存管理方式评估,涉及SPFILE的静态参数示例需安排实例重启;归档模式切换涉及停库,表空间创建须确认实际服务器路径、存储容量及变更权限,写操作练习宜在隔离测试环境进行。检查点查询展示各数据文件的信息,Data Guard部分仅提供需另行准备连接与环境的RMAN命令示意,monitor_performance仅为不执行检查的过程骨架;等待事件和I/O统计需结合采样区间与业务负载解读,不能仅凭累计值排序作出性能结论。索引重建须有诊断依据,归档日志删除须满足备份恢复及备库需求,不能仅按固定周期执行。
Oracle架构深度解析
NOTE 📋 前置知识
- Oracle概述与特性 - 了解Oracle基础概念
- 基础数据库原理知识
学习目标
IMPORTANT 🎯 本章学习目标
完成本章学习后,你将能够:
- 深入理解Oracle实例和数据库的关系
- 掌握Oracle内存结构(SGA/PGA)的组成和配置
- 了解Oracle后台进程的作用和工作原理
- 理解Oracle物理存储结构的组织方式
- 具备基础的Oracle性能监控和故障诊断能力
Oracle数据库架构概述
Oracle数据库采用实例(Instance)和数据库(Database)分离的架构设计。理解这种架构对于掌握Oracle的工作原理至关重要。
%%{init: {"theme":"base","themeVariables":{"fontFamily":"PingFang SC, -apple-system, Source Han Serif SC, serif","fontSize":"16px","background":"#FDFBF5","primaryColor":"#FDFBF5","primaryTextColor":"#2D2A26","primaryBorderColor":"#6E6A60","secondaryColor":"#E8EFE8","secondaryBorderColor":"#8FA890","secondaryTextColor":"#2D2A26","tertiaryColor":"#FDFBF5","tertiaryBorderColor":"#9A9488","tertiaryTextColor":"#6E6A60","lineColor":"#6E6A60","textColor":"#2D2A26","mainBkg":"#FDFBF5","nodeBorder":"#2D5A3D","clusterBkg":"#F3EEDF","clusterBorder":"#9A9488","edgeLabelBackground":"#FDFBF5"},"flowchart":{"htmlLabels":true,"curve":"basis","padding":20,"nodeSpacing":60,"rankSpacing":70,"useMaxWidth":false},"themeCSS":".node rect, .node polygon, .node circle { stroke-width: 1.5px; } .edgePath .path { stroke-width: 1.5px; } .cluster-label .nodeLabel, .cluster-label foreignObject { color: #2D2A26 !important; } .edgeLabel, .edgeLabel foreignObject { color: #2D2A26 !important; background-color: #FDFBF5; } .edgeLabel rect { fill: #FDFBF5; }"}}%%
flowchart TD
subgraph Overview["Oracle数据库架构总览"]
subgraph Instance["实例(Instance) - 内存和进程"]
SGA[系统全局区SGA]
PGA[程序全局区PGA]
BP[后台进程组]
end
subgraph Database["数据库(Database) - 物理文件"]
DF[数据文件]
CF[控制文件]
LF[日志文件]
end
subgraph Connection["用户连接"]
UC[用户连接]
SP[服务器进程]
end
UC --> SP --> SGA
SP --> PGA
BP --> DF
BP --> CF
BP --> LF
SGA --> DF
style SGA fill:#e1f5fe
style PGA fill:#f3e5f5
style BP fill:#e8f5e8
style DF fill:#fff3e0
style CF fill:#fce4ec
style LF fill:#f1f8e9
end
实例与数据库的关系
什么是Oracle实例
Oracle实例是内存结构和后台进程的组合,负责管理数据库的运行。
-- 查看当前实例信息
SELECT instance_name, host_name, version, status
FROM v$instance;
什么是Oracle数据库
Oracle数据库是存储在磁盘上的物理文件集合,包含用户数据和元数据。
-- 查看数据库信息
SELECT name, db_unique_name, platform_name
FROM v$database;
Oracle内存结构
1. 系统全局区(SGA)
SGA是Oracle实例的核心内存区域,由所有后台进程和用户进程共享。
Database Buffer Cache
-- 查看缓冲区缓存大小
SELECT component, current_size/1024/1024 as size_mb
FROM v$sga_dynamic_components
WHERE component = 'DEFAULT buffer cache';
Shared Pool
-- 查看共享池使用情况
SELECT pool, name, bytes/1024/1024 as size_mb
FROM v$sgastat
WHERE pool = 'shared pool'
ORDER BY bytes DESC;
Redo Log Buffer
-- 查看重做日志缓冲区
SELECT value/1024/1024 as redo_buffer_mb
FROM v$parameter
WHERE name = 'log_buffer';
2. 程序全局区(PGA)
PGA是每个服务器进程的私有内存区域。
-- 查看PGA使用情况
SELECT name, value/1024/1024 as size_mb
FROM v$pgastat
WHERE name IN ('total PGA allocated', 'total PGA used by SQL work area');
Oracle进程结构
1. 后台进程
系统监控器(SMON)
- 实例恢复
- 清理临时段
- 合并空闲空间
进程监控器(PMON)
- 清理异常终止的用户进程
- 释放资源
- 重启失败的服务器进程
数据库写入器(DBWn)
-- 查看数据库写入器进程
SELECT name, description
FROM v$bgprocess
WHERE name LIKE 'DBW%';
日志写入器(LGWR)
-- 查看重做日志组状态(不是LGWR进程状态)
SELECT group#, thread#, status
FROM v$log;
检查点进程(CKPT)
-- 查看各数据文件的检查点信息
SELECT file#, checkpoint_change#, checkpoint_time
FROM v$datafile;
2. 服务器进程
专用服务器模式
- 每个用户连接对应一个服务器进程
- 适合并发连接数较少的环境
共享服务器模式
- 多个用户会话共享少数几个服务器进程
- 适合大量并发连接的环境
-- 配置共享服务器
ALTER SYSTEM SET shared_servers = 5;
ALTER SYSTEM SET max_shared_servers = 20;
Oracle物理存储结构
1. 数据文件
数据文件存储实际的用户数据和元数据。
-- 查看数据文件信息
SELECT file_name, tablespace_name, bytes/1024/1024 as size_mb, status
FROM dba_data_files
ORDER BY tablespace_name;
2. 控制文件
控制文件包含数据库的元数据信息。
-- 查看控制文件位置
SELECT name, status
FROM v$controlfile;
3. 重做日志文件
重做日志文件记录数据库的所有变更操作。
-- 查看重做日志文件
SELECT group#, member, status
FROM v$logfile
ORDER BY group#;
4. 归档日志文件
-- 启用归档模式
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
Oracle逻辑存储结构
1. 表空间
表空间是Oracle数据库的逻辑存储单元。
-- 创建表空间
CREATE TABLESPACE bank_data
DATAFILE '/u01/oradata/orcl/bank_data01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE 1G;
2. 段(Segment)
段是分配给特定数据库对象的空间集合。
-- 查看段信息
SELECT segment_name, segment_type, tablespace_name, bytes/1024/1024 as size_mb
FROM dba_segments
WHERE owner = 'BANK_USER'
ORDER BY bytes DESC;
3. 区(Extent)
区是由连续数据块组成的存储单元。
-- 查看区信息
SELECT segment_name, extent_id, bytes/1024 as size_kb
FROM dba_extents
WHERE owner = 'BANK_USER'
AND segment_name = 'CUSTOMER_INFO';
4. 数据块(Block)
数据块是Oracle的最小I/O单元。
-- 查看数据块大小
SELECT value as block_size
FROM v$parameter
WHERE name = 'db_block_size';
银行业务场景中的架构考虑
1. 内存配置建议
-- 银行核心系统内存配置
ALTER SYSTEM SET sga_target = 8G;
ALTER SYSTEM SET pga_aggregate_target = 2G;
ALTER SYSTEM SET shared_pool_size = 2G;
ALTER SYSTEM SET db_cache_size = 4G;
2. 进程配置优化
-- 针对高并发的银行系统
-- 示例值;需使用SPFILE,并在实例重启后生效
ALTER SYSTEM SET processes = 500 SCOPE=SPFILE;
-- 示例值;需使用SPFILE,并在实例重启后生效
ALTER SYSTEM SET sessions = 600 SCOPE=SPFILE;
-- 示例值;需使用SPFILE,并在实例重启后生效
ALTER SYSTEM SET db_writer_processes = 4 SCOPE=SPFILE;
3. 存储架构设计
数据文件分离
-- 核心业务数据
CREATE TABLESPACE core_business
DATAFILE '/u01/data/core_business01.dbf' SIZE 1G;
-- 历史数据
CREATE TABLESPACE history_data
DATAFILE '/u02/data/history_data01.dbf' SIZE 5G;
-- 临时数据
CREATE TEMPORARY TABLESPACE temp_large
TEMPFILE '/u03/temp/temp_large01.dbf' SIZE 2G;
性能监控视图
1. 实例性能监控
-- 监控等待事件
SELECT event, total_waits, time_waited_micro/1000000 as time_waited_sec
FROM v$system_event
WHERE wait_class != 'Idle'
ORDER BY time_waited_micro DESC;
2. 内存使用监控
-- SGA使用情况
SELECT name, value/1024/1024 as size_mb
FROM v$sga
ORDER BY value DESC;
3. I/O性能监控
-- 数据文件I/O统计
SELECT df.file_name, fs.phyrds, fs.phywrts,
fs.readtim, fs.writetim
FROM v$filestat fs, dba_data_files df
WHERE fs.file# = df.file_id
ORDER BY fs.phyrds + fs.phywrts DESC;
高可用架构设计
1. RAC集群架构
-- 查看RAC节点信息
SELECT inst_id, instance_name, host_name, status
FROM gv$instance
ORDER BY inst_id;
2. Data Guard配置
-- 主库配置
ALTER DATABASE FORCE LOGGING;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
-- 创建备库:以下为RMAN活动数据库复制的命令示意,不是SQL。
-- standby_db仅作为示例备库标识;实际命名、目标库与辅助实例连接及环境准备另行配置。
-- 在完成上述准备后,使用RMAN命令:
-- DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE;
实践建议
1. 架构规划
容量规划
- 根据业务增长预测内存需求
- 合理规划存储空间
- 考虑备份和归档空间
性能规划
- 根据并发用户数配置进程数
- 合理分配SGA各组件大小
- 优化I/O分布
2. 监控告警
-- 性能监控过程骨架:以下仅列出待实现的检查,不执行实际监控
CREATE OR REPLACE PROCEDURE monitor_performance AS
BEGIN
-- 检查SGA使用率
-- 检查PGA使用率
-- 检查表空间使用率
-- 检查等待事件
NULL;
END;
3. 故障预防
定期维护
- 重建索引
- 收集统计信息
- 清理归档日志
健康检查
- 监控错误日志
- 检查数据库参数
- 验证备份有效性
实践练习
TIP 💻 动手练习
练习1:架构组件探索
- 使用动态视图查询SGA各组件大小
- 查看当前数据库的后台进程
- 分析当前系统的内存使用情况
参考SQL:
-- 查看SGA组件
SELECT component, current_size/1024/1024 AS size_mb
FROM v$sga_dynamic_components;
-- 查看后台进程
SELECT name, description FROM v$bgprocess WHERE paddr <> '00';
-- 查看内存参数
SELECT name, value FROM v$parameter
WHERE name LIKE '%size%' OR name LIKE '%pool%';
练习2:数据文件管理
- 查看当前数据库的所有数据文件
- 分析表空间的空间使用情况
- 创建一个新的表空间并添加数据文件
练习3:性能监控实践
- 查询当前系统的等待事件
- 分析SQL语句的执行统计
- 监控系统资源使用情况
相关文档
INFO 📖 深入学习
- 前置学习:Oracle概述与特性 - 了解Oracle基础
- 下一步:Oracle环境安装与配置 - 搭建实践环境
- 进阶内容:Oracle性能监控与诊断 - 深入性能优化
总结
理解Oracle架构是成为Oracle专家的基础。在银行等关键业务场景中,正确的架构设计和配置对于系统的稳定性和性能至关重要。
本章重点回顾:
- Oracle实例与数据库的分离架构设计
- SGA内存结构各组件的作用和配置
- 后台进程的职责和工作机制
- 物理存储结构的组织方式
- 性能监控和故障诊断的基本方法