1、概述
- INSTANCE
内存结构:SGA、PGA
进程结构:前台进程、后台进程 - DATABASE
参数文件、控制文件、密码文件、REDO日志、归档文件、数据文件、跟踪日志。 - CLIENT
JDBC、ODBC、SQL DEVELOPER等等用于连接数据库的方式。
2、体系结构
2.1 内存部分
2.1.1 系统全局区(SGA)
-
共享池(Shared pool)
- 库缓存(共享sql区,Library cache)
- 字典缓存(Data dictionary cache)
- 结果集缓存(Server result cache)
-
数据库高速缓冲区缓存(Database buffer cache)
保留从数据文件读取的数据块的副本
块大小为8k、16k,不混用db_buffer_cache -
重做日志缓存区(Redo log buffer)
包含重做条目 -
大池(Large pool)
-
Java池(Java pool)
-
流池(Streams pool)
2.1.2 程序全局区(PGA)
参数:pga_aggregate_target、 pga_aggregate_limit
-
栈区(Stack Space)
进行变量和变量值替换的区域 -
UGA(User Global Area,用户全局区)
- 会话记录区:记录当前会话的情况和相关信息,并且保持会话
- 游标记录区:这里的游标指的是SQL和PLSQL语言
-
私有SQL区
- SQL解析区
- SQL工作区:哈希区、排序区、位图区
SQL工作区其实很小,很容易就被使用完了,所以ORACLE在设计的时候使用临时表空间作为SQL工作区的补充。
2.2 进程结构
2.2.1 用户进程
连接到Oracle数据库的应用程序或工具
如:SQLPLUS /SQLDEVELOPER
2.2.2 数据库进程
-
Server process(前台进程)
连接到Oracle实例,并与用户建立会话时启动 -
Background processes(后台进程)
启动Oracle实例时启动。-
Database Writer Process (DBWn)
将db_buffer_cache中脏数据写入磁盘(异步、推进检查点)
触发条件:
1 脏数据块的总数超过一定的限度时
2 扫描空闲缓冲区时,进程会扫描指定数量的块 当找不到任何空闲时发生触发
3 每隔3秒钟启动一次DBWn
4 当表空间或者临时表空间OFFLINE时
5 将表空间置于只读模式READ ONLY
6 DROP 或TRUNCATE表时
7 当表空间发生BEGIN BACKUP时
8 发生CKPT检查点进程(包括增量检查点和完全检查点)
9 当进程在LRU相关链表上查找可以使用的空间时,如果链表长度过长或剩余空间不多时,会触发DBWn
10 数据库关闭时(不以shutdown abort形式) -
Log Writer Process (LGWR) 日志写进程
将重做日志缓冲区写入磁盘上的重做日志文件
触发条件:
1 当用户进程提交事务时 (发生commit)立即写
2 发生联机重做日志切换时
3 当重做日志缓冲区的三分之一已满或包含1 MB的缓冲数据时
4 在DBWn进程将修改的缓冲区写入磁盘之前
5 自上次写入以来已过三秒钟 -
Checkpoint Process (CKPT) 检查点进程
记录检查点信息:控制文件、数据文件头
通知DBWn将脏块写入磁盘
触发条件:
1 当发生日志组切换的时候
2 当符合以下参数设置的时候:
LOG_CHECKPOINT_TIMEOUT
LOG_CHECKPOINT_INTERVAL
fast_start_io_target
fast_start_mttr_target
3 当执行以下任一操作时:
ALTER SYSTEM SWITCH LOGFILE
ALTER SYSTEM CHECKPOINT
alter tablespace XXX begin backup,end backup
alter tablespace ,datafile offline
4 当使用非shutdown abort命令关闭数据库时 -
System Monitor Process (SMON) 系统监控进程
-- 在实例启动时执行恢复
-- 清理未使用的临时段 -
Process Monitor Process (PMON) 进程监视进程
用户进程失败时执行进程恢复
-- 清理DB_BUFFER_CACHE
-- 释放用户进程使用的资源
监视会话以了解空闲会话超时 -
Recoverer Process (RECO) 恢复进程
与分布式数据库配置一起使用
自动连接到不确定分布式事务中涉及到的数据库
自动解决所有疑问事务
删除与不确定事务对应的所有行 -
Listener Registration Process (LREG) 监听进程
使用Oracle Net 监听并注册有关数据库实例和调度程序的信息 -
Archiver Processes (ARCn) 归档进程
日志切换后,将重做日志文件复制到指定的存储设备
收集事务重做数据并将该数据传输到备用目标,DG使用这个进程
-
-
Daemon / Application processes守护/应用程序进程
2.2.3 网络监听进程
Listener
2.2.4 网格基础设备守护程序
Grid Infrastructure daemons /ASM与RAC/
2.3 存储结构
2.3.1 数据库存储结构
- Control files、Parameter file、Password file
- Data files、Backup files
- Online redo log files、Archived redo log files
- Alert log and trace files
2.3.2 逻辑和物理存储结构
- Logical
Oracle data block(块)-->Extent (区)-->Segment(段)-->Tablespace(表空间)-->Database(库)- 块(Blocks)
数据块由多块磁盘块(文件系统块)组成。 - 区(Extents)
区是数据块的集合。 - 段(Segments)
段存在于表空间中。
段是区的集合。
- 块(Blocks)
- Physical
Tablespace<--Data files-->Storage System (SAN/NFS/NAS/ASM/Exadata/RAW/File System)
2.3.3 表空间和数据文件
- Tablespace 1(SMALLFILE)
Data block(8Kb)* 8 = Extent(64Kb)* 2 = Segment(128kb)
- Tablespace 2 (Bigfile)
Data block(32Kb)
- SYSTEM和SYSAUX表空间
SYSTEM和SYSAUX表空间是在创建数据库时创建的必需表空间,必须在线。
SYSTEM表空间用于核心功能(例如,数据字典表)。
SYSAUX表空间用于其他数据库组件。
SYSTEM和SYSAUX表空间不应用于应用程序数据。
2.3.4 ASM
是一种灵活的高性能集群文件系统ASM
管理Oracle数据库文件
可以使用ASM集群文件系统(ACFS)
管理应用程序文件和共享数据
跨磁盘分布数据以负载均衡
发生故障时使用镜像数据
解决存储管理难题(SAME难题)
SAME=条带和镜像一切
asm详解:待补充
2.4 内存中列存储
SGA中的新池:“内存中”列存储。
ORACLE数据库默认格式 行格式。
行转列:填充到IM(IN MEMORY)列存储中的段将转换为列格式。
内存中段在事务上与缓冲区高速缓存一致。
列存储发生事务时也是要使用DB_BUFFER_CACHE的。
- 内存中列存储:数据库12.1.02版本开始
- 即时查询响应
- 不需要大量的索引审计
- 完整的程序透明度
- 设置简单
2.5 Oracle Container(容器) Database
- 可插拔数据库(Pluggable database)是一组数据库schemas,但在逻辑上对用户和应用程序来说是一个单独的数据库。
- Multitenant container database:在物理级别具有数据库实例和数据库文件
- 所有可插拔数据库共享:后台进程、共享进程内存、Oracle上的元数据
3、管理技术
3.1 管理工具
3.1.1 简介
- SQLPLUS
提供了数据库的专用接口:
执行数据库管理操作
执行SQL命令用来查询,插入,更新和删除数据库中的数据 - SQL Developer
是用于访问Oracle数据库实例的图形用户界面
支持SQL和PL / SQL开发
在Oracle数据库的默认安装中可用
他能去进项相关的ORACLE数据库管理操作 - Oracle Enterprise Manager Database Express
- Oracle Enterprise Manager Cloud Control
3.1.2 使用
- sqlplus shell脚本
sqlplus hrxt/hrxt <<EOF
select count(*) from employees;
update employees set salary = salary+1;
commit;
quit
EOF
- sqlplus sql文件
select * from departments where location_id = 1400;
quit
sqlplus hrxt/hrxt @script.sql
//隐去开头初始化信息 -s
sqlplus -s hrxt/hrxt @script.sql