Oracle 19c入门学习教程,从入门到精通,Oracle体系结构 —— 知识点详解(2)

Oracle体系结构

一、需求理解

基于Oracle 19c第2章"Oracle体系结构"的核心内容(涵盖逻辑/物理存储结构、服务器结构、数据字典等),整理一份包含Oracle安装过程、体系结构相关核心语法知识点及使用方法的教程,每个知识点配套带详细注释的案例代码,并补充综合性实操案例,确保内容具体、全面且可落地。

二、核心知识点及实操指南

前置:Oracle 19c 安装(Linux静默安装,快速落地)
1.1 安装前置配置(Root用户)
bash 复制代码
# 1. 安装依赖包
yum install -y binutils gcc gcc-c++ libaio-devel sysstat ksh compat-libcap1 libnsl.x86_64

# 2. 创建用户和组
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
passwd oracle  # 设置密码(如oracle123)

# 3. 创建安装目录并授权
mkdir -p /u01/app/oracle/product/19c/dbhome_1
chown -R oracle:oinstall /u01
chmod -R 775 /u01

# 4. 配置内核参数(修改/etc/sysctl.conf)
cat >> /etc/sysctl.conf << EOF
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.ip_local_port_range = 9000 65500
EOF
sysctl -p  # 生效内核参数

# 5. 配置资源限制(修改/etc/security/limits.conf)
cat >> /etc/security/limits.conf << EOF
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
EOF
1.2 静默安装(Oracle用户)
bash 复制代码
su - oracle

# 1. 解压安装包(假设安装包在/home/oracle目录)
unzip LINUX.X64_193000_db_home.zip -d /u01/app/oracle/product/19c/dbhome_1/

# 2. 编写响应文件
cat > /u01/app/oracle/product/19c/dbhome_1/response/db_install.rsp << EOF
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOSTNAME=localhost
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oinstall
DECLINE_SECURITY_UPDATES=true
EOF

# 3. 执行安装
cd /u01/app/oracle/product/19c/dbhome_1/
./runInstaller -silent -responseFile /u01/app/oracle/product/19c/dbhome_1/response/db_install.rsp -ignorePrereq

# 4. 执行Root脚本(安装完成后提示)
# 切换到Root用户执行:
# /u01/app/oraInventory/orainstRoot.sh
# /u01/app/oracle/product/19c/dbhome_1/root.sh

# 5. 配置环境变量
cat >> ~/.bash_profile << EOF
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/19c/dbhome_1
export ORACLE_SID=orcl
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:\$LD_LIBRARY_PATH
EOF
source ~/.bash_profile
知识点1:逻辑存储结构(表空间/段/区/数据块)
1.1 核心概念
  • 数据块(Block):Oracle最小I/O单位(默认8KB),是数据存储的最小单元;
  • 数据区(Extent):连续的数据块集合,是分配给段的最小存储单位;
  • 段(Segment):表、索引、回滚等对象占用的存储空间(由多个区组成);
  • 表空间(Tablespace):逻辑存储容器,对应物理数据文件,一个表空间可包含多个段。
1.2 核心语法及案例(表空间管理)
sql 复制代码
-- 登录SQL*Plus(SYSDBA权限)
CONNECT / AS SYSDBA;

-- ==================== 1. 创建表空间(关联物理数据文件) ====================
-- 创建永久表空间(用于存储业务数据),指定数据块大小、区管理方式
CREATE TABLESPACE TS_BUSINESS
DATAFILE '/u01/app/oracle/oradata/orcl/ts_business01.dbf'  -- 物理数据文件路径
SIZE 100M                                                  -- 初始大小100MB
AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED                   -- 自动扩展,每次50MB,无上限
BLOCKSIZE 8K                                               -- 数据块大小(默认8K,需与数据库块一致)
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;                      -- 本地区管理(推荐),自动分配区
-- 注释:
-- EXTENT MANAGEMENT LOCAL:本地区管理(替代字典管理,性能更高)
-- AUTOALLOCATE:Oracle自动分配区大小(适合大多数场景)
-- 若为固定区大小,可替换为:UNIFORM SIZE 1M

-- ==================== 2. 创建表并指定表空间(段落地) ====================
CREATE TABLE EMPLOYEE (
    EMP_ID    NUMBER(6) PRIMARY KEY,
    EMP_NAME  VARCHAR2(50) NOT NULL,
    SALARY    NUMBER(8,2)
) TABLESPACE TS_BUSINESS;  -- 指定表存储在TS_BUSINESS表空间(段属于该表空间)

-- ==================== 3. 表空间扩容 ====================
-- 方式1:新增数据文件
ALTER TABLESPACE TS_BUSINESS
ADD DATAFILE '/u01/app/oracle/oradata/orcl/ts_business02.dbf'
SIZE 50M AUTOEXTEND ON NEXT 20M MAXSIZE 200M;

-- 方式2:扩展现有数据文件
ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/orcl/ts_business01.dbf'
RESIZE 200M;

-- ==================== 4. 查询表空间信息(数据字典) ====================
-- 查询所有表空间及状态
SELECT TABLESPACE_NAME, STATUS, CONTENTS 
FROM DBA_TABLESPACES 
WHERE TABLESPACE_NAME = 'TS_BUSINESS';

-- 查询表空间对应的数据文件
SELECT FILE_NAME, BYTES/1024/1024 AS SIZE_MB, AUTOEXTENSIBLE 
FROM DBA_DATA_FILES 
WHERE TABLESPACE_NAME = 'TS_BUSINESS';

-- ==================== 5. 删除表空间(含数据文件) ====================
DROP TABLESPACE TS_BUSINESS
INCLUDING CONTENTS AND DATAFILES;  -- 同时删除内容和物理数据文件
知识点2:物理存储结构(数据文件/控制文件/日志文件)
2.1 核心概念
  • 数据文件:存储表、索引等实际数据(对应表空间);
  • 控制文件:存储数据库元数据(表空间、数据文件、日志文件位置等),至关重要;
  • 日志文件(重做日志):记录数据库修改操作,用于恢复,分联机重做日志、归档日志;
  • 参数文件(SPFILE):存储数据库参数(如内存大小、实例名),二进制格式,动态生效。
2.2 核心语法及案例
sql 复制代码
CONNECT / AS SYSDBA;

-- ==================== 1. 管理数据文件 ====================
-- 查看所有数据文件
SELECT FILE_NAME, TABLESPACE_NAME, STATUS 
FROM DBA_DATA_FILES;

-- 离线/在线数据文件(维护用)
ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/orcl/ts_business01.dbf' OFFLINE;
ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/orcl/ts_business01.dbf' ONLINE;

-- ==================== 2. 管理控制文件 ====================
-- 查看控制文件位置
SHOW PARAMETER CONTROL_FILES;

-- 新增控制文件(需先关闭数据库,复制物理文件,再修改参数)
-- 1. 关闭数据库
SHUTDOWN IMMEDIATE;
-- 2. 复制控制文件到新路径(操作系统层面,oracle用户)
-- cp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/oradata/orcl/control02.ctl
-- 3. 修改参数文件
ALTER SYSTEM SET CONTROL_FILES = '/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/oradata/orcl/control02.ctl' SCOPE=SPFILE;
-- 4. 启动数据库
STARTUP;

-- ==================== 3. 管理重做日志文件 ====================
-- 查看重做日志组及成员
SELECT GROUP#, MEMBER, STATUS 
FROM V$LOGFILE;

-- 查看重做日志状态
SELECT GROUP#, STATUS, ARCHIVED 
FROM V$LOG;

-- 创建重做日志组
ALTER DATABASE ADD LOGFILE GROUP 4 (
    '/u01/app/oracle/oradata/orcl/redo04.log'
) SIZE 50M;

-- 切换重做日志(手动触发日志切换)
ALTER SYSTEM SWITCH LOGFILE;

-- 删除重做日志组(需确保组未被使用)
ALTER DATABASE DROP LOGFILE GROUP 4;
-- 删除物理文件(操作系统层面)
-- rm /u01/app/oracle/oradata/orcl/redo04.log

-- ==================== 4. 管理服务器参数文件(SPFILE) ====================
-- 查看SPFILE位置
SHOW PARAMETER SPFILE;

-- 动态修改参数(立即生效,重启后保留)
ALTER SYSTEM SET SGA_MAX_SIZE = 2G SCOPE=BOTH;  -- SCOPE=BOTH:内存+SPFILE
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 512M SCOPE=SPFILE;  -- 仅修改SPFILE,重启生效

-- 从SPFILE创建文本参数文件(PFILE)
CREATE PFILE FROM SPFILE;

-- 从PFILE创建SPFILE
CREATE SPFILE FROM PFILE = '/u01/app/oracle/product/19c/dbhome_1/dbs/initorcl.ora';
知识点3:Oracle服务器结构(SGA/PGA/进程/数据字典)
3.1 核心概念
  • SGA(系统全局区):共享内存区域,包含数据库缓冲区、共享池、重做日志缓冲区等;
  • PGA(程序全局区):私有内存区域,每个会话/进程独占,用于排序、哈希连接等;
  • 后台进程:DBWn(写数据文件)、LGWR(写重做日志)、CKPT(检查点)、SMON(系统监控)、PMON(进程监控)等;
  • 数据字典:Oracle内置表/视图,存储数据库元数据(如DBA_TABLES、V$INSTANCE)。
3.2 核心语法及案例
sql 复制代码
CONNECT / AS SYSDBA;

-- ==================== 1. 查看SGA/PGA配置 ====================
-- 查看SGA各组件大小
SELECT COMPONENT, CURRENT_SIZE/1024/1024 AS SIZE_MB 
FROM V$SGA_DYNAMIC_COMPONENTS;

-- 查看PGA使用情况
SELECT ROUND(PGA_USED_MEM/1024/1024,2) AS USED_MB,
       ROUND(PGA_ALLOCATED_MEM/1024/1024,2) AS ALLOCATED_MB
FROM V$PGASTAT 
WHERE CATEGORY = 'total';

-- 修改SGA大小(需重启生效)
ALTER SYSTEM SET SGA_TARGET = 1G SCOPE=SPFILE;

-- ==================== 2. 查看后台进程 ====================
-- 查看所有后台进程
SELECT NAME, DESCRIPTION 
FROM V$BGPROCESS 
WHERE PADDR != '00';

-- 查看进程状态(操作系统层面,oracle用户)
-- ps -ef | grep ora_ | grep -v grep

-- ==================== 3. 数据字典查询(核心) ====================
-- 1. 查看用户表信息
SELECT TABLE_NAME, TABLESPACE_NAME, NUM_ROWS 
FROM DBA_TABLES 
WHERE OWNER = 'SYS' AND TABLE_NAME = 'EMPLOYEE';

-- 2. 查看用户权限
SELECT GRANTEE, PRIVILEGE, ADMIN_OPTION 
FROM DBA_SYS_PRIVS 
WHERE GRANTEE = 'SYSTEM';

-- 3. 查看实例状态
SELECT INSTANCE_NAME, STATUS, VERSION 
FROM V$INSTANCE;

-- 4. 查看数据库版本
SELECT * FROM V$VERSION;

-- 5. 查看警告日志位置(跟踪文件/警告文件)
SELECT VALUE 
FROM V$DIAG_INFO 
WHERE NAME = 'Diag Trace';  -- 跟踪文件目录
SELECT VALUE 
FROM V$DIAG_INFO 
WHERE NAME = 'Alert Log';   -- 警告日志路径

三、综合性案例:Oracle体系结构全流程实操

案例目标

整合"表空间管理+物理文件配置+内存调整+数据字典查询",搭建一个规范的业务表存储环境,并监控服务器结构状态。

完整实操代码
sql 复制代码
-- ==================== 阶段1:创建表空间(逻辑+物理存储) ====================
CONNECT / AS SYSDBA;

-- 1. 创建业务表空间(指定数据文件、自动扩展)
CREATE TABLESPACE TS_SALES
DATAFILE '/u01/app/oracle/oradata/orcl/ts_sales01.dbf'
SIZE 200M AUTOEXTEND ON NEXT 50M MAXSIZE 500M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2M;  -- 固定区大小2MB

-- 2. 创建索引表空间(单独存储索引,提升性能)
CREATE TABLESPACE TS_SALES_IDX
DATAFILE '/u01/app/oracle/oradata/orcl/ts_sales_idx01.dbf'
SIZE 100M AUTOEXTEND ON NEXT 20M MAXSIZE 300M;

-- ==================== 阶段2:创建业务表和索引(段落地) ====================
-- 1. 创建销售表,指定表空间
CREATE TABLE SALES (
    SALE_ID    NUMBER(10) PRIMARY KEY,
    PROD_NAME  VARCHAR2(100) NOT NULL,
    SALE_DATE  DATE DEFAULT SYSDATE,
    AMOUNT     NUMBER(10,2)
) TABLESPACE TS_SALES;

-- 2. 创建索引,指定索引表空间
CREATE INDEX IDX_SALES_DATE ON SALES(SALE_DATE)
TABLESPACE TS_SALES_IDX;

-- ==================== 阶段3:调整内存参数(SGA/PGA) ====================
-- 1. 查看当前内存配置
SHOW PARAMETER SGA_TARGET;
SHOW PARAMETER PGA_AGGREGATE_TARGET;

-- 2. 动态调整SGA和PGA(生产环境需根据服务器配置调整)
ALTER SYSTEM SET SGA_TARGET = 1536M SCOPE=BOTH;  -- 1.5G
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 768M SCOPE=BOTH;  -- 768M

-- ==================== 阶段4:监控存储和进程状态(数据字典) ====================
-- 1. 查看表空间使用情况
SELECT 
    t.TABLESPACE_NAME,
    ROUND(d.TOTAL_SIZE/1024/1024,2) AS TOTAL_MB,
    ROUND((d.TOTAL_SIZE - f.FREE_SIZE)/1024/1024,2) AS USED_MB,
    ROUND(f.FREE_SIZE/1024/1024,2) AS FREE_MB,
    ROUND((d.TOTAL_SIZE - f.FREE_SIZE)/d.TOTAL_SIZE * 100,2) AS USED_RATE
FROM (
    SELECT TABLESPACE_NAME, SUM(BYTES) AS TOTAL_SIZE 
    FROM DBA_DATA_FILES 
    GROUP BY TABLESPACE_NAME
) d
JOIN (
    SELECT TABLESPACE_NAME, SUM(BYTES) AS FREE_SIZE 
    FROM DBA_FREE_SPACE 
    GROUP BY TABLESPACE_NAME
) f ON d.TABLESPACE_NAME = f.TABLESPACE_NAME
WHERE d.TABLESPACE_NAME IN ('TS_SALES', 'TS_SALES_IDX');

-- 2. 查看后台进程状态
SELECT NAME, PID, STATUS 
FROM V$PROCESS p
JOIN V$BGPROCESS b ON p.ADDR = b.PADDR
WHERE b.NAME IS NOT NULL;

-- 3. 查看重做日志状态
SELECT GROUP#, STATUS, BYTES/1024/1024 AS SIZE_MB 
FROM V$LOG;

-- ==================== 阶段5:维护操作(表空间扩容+日志切换) ====================
-- 1. 给销售表空间新增数据文件
ALTER TABLESPACE TS_SALES
ADD DATAFILE '/u01/app/oracle/oradata/orcl/ts_sales02.dbf'
SIZE 100M AUTOEXTEND ON NEXT 30M MAXSIZE UNLIMITED;

-- 2. 手动切换重做日志
ALTER SYSTEM SWITCH LOGFILE;

-- 3. 查看警告日志(确认无异常)
SELECT MESSAGE_TEXT 
FROM V$DIAG_ALERT_EXT 
WHERE ORIGINATING_TIMESTAMP > SYSDATE - 1/24  -- 近1小时
AND SEVERITY >= 'WARNING';

四、总结

  1. 存储结构核心:逻辑存储(表空间→段→区→数据块)是Oracle数据组织的核心,表空间需关联物理数据文件,推荐使用本地区管理;
  2. 物理文件管理:控制文件需多副本备份,重做日志建议分组且大小适中,参数文件(SPFILE)支持动态修改参数;
  3. 服务器结构监控 :通过数据字典(V S G A D Y N A M I C C O M P O N E N T S 、 V SGA_DYNAMIC_COMPONENTS、V SGADYNAMICCOMPONENTS、VBGPROCESS等)可监控SGA/PGA、进程状态,是运维的核心手段;
  4. 安装关键:Linux下Oracle 19c静默安装需先配置依赖、内核参数和用户,响应文件需指定ORACLE_BASE/ORACLE_HOME等核心路径。
相关推荐
心怀梦想2 小时前
mysql下的日志文件
数据库·mysql
deng-c-f2 小时前
Linux C/C++ 学习日记(62):Redis(三):订阅
数据库·redis·学习
论迹2 小时前
【RabbitMQ】-- 高级特性
数据库·redis·分布式·消息队列·rabbitmq
L1624762 小时前
Prometheus、Cadvisor和Grafana体系完整学习手册
学习·grafana·prometheus
DarkAthena2 小时前
【GaussDB】解析GaussDB热补丁机制
数据库·gaussdb
石像鬼₧魂石2 小时前
WPScan 实战完整笔记(含环境搭建 + 避坑指南 + 命令手册)
数据库·安全
望云山1902 小时前
ESP32—S3学习--入门五个基础实验
嵌入式硬件·学习
想唱rap2 小时前
MySQL内置函数
linux·运维·服务器·数据库·c++·mysql
CQ_YM2 小时前
SQLite3 数据库与网页html
c语言·数据库·sqlite·html