Oracle 实例与数据库的关系
Oracle 实例与数据库的关系
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概念辨析
实例(Instance):内存结构(SGA/PGA)+ 后台进程的集合,运行时存在[1]。
数据库(Database):磁盘上的物理文件集合(数据文件、控制文件、Redo Log 等),持久存在。
核心区别:
| 维度 | 实例 | 数据库 |
|---|---|---|
| 形态 | 内存 + 进程 | 物理文件 |
| 生命周期 | 启动时创建,关闭时销毁 | 持久存在 |
| 必需性 | 临时存在 | 持久存在 |
| 数量关系 | 1 实例 ↔ 1 数据库(单实例) | 1 数据库 ↔ N 实例(RAC) |
2. 三种典型组合
2.1 单实例 + 单数据库
最常见架构:一个实例对应一个数据库。
+----------+ +----------+
| Instance | <--> | Database |
+----------+ +----------+
2.2 RAC:多实例 + 单数据库
多个实例(每节点一个)共享一个数据库,提供高可用与扩展性[2]:
+----------+ +----------+ +----------+
| Node 1 | | Node 2 | | Database |
| Instance | | Instance | <--> | (Shared |
| 1 | | 2 | | Storage)|
+----------+ +----------+ +----------+
关键:
- 共享存储:ASM/集群文件系统
- Cache Fusion:通过私有网络同步 buffer cache
- 每个实例独立 SGA,但访问同一份物理数据
2.3 Data Guard:单实例 + 多数据库副本
主库 + 一个或多个 standby 数据库,每个 standby 有独立实例:
+----------+ +----------+
| Primary | --> | Standby |
| Instance | Redo | Instance |
| + DB | | + DB |
+----------+ +----------+
3. 启动关闭流程对应关系
SHUTDOWN 状态:无实例、无 SGA、无后台进程
│
│ STARTUP NOMOUNT
▼
NOMOUNT 状态:有实例(SGA + 进程),无数据库访问
│ - 读取参数文件
│ - 分配 SGA
│ - 启动后台进程
│
│ ALTER DATABASE MOUNT
▼
MOUNT 状态:实例已装载控制文件
│ - 读取控制文件
│ - 定位数据文件、Redo Log
│
│ ALTER DATABASE OPEN
▼
OPEN 状态:实例与数据库完全对应,可正常访问
│ - 打开数据文件
│ - 打开 Redo Log
│ - 实例恢复(如需要)
4. 实例与数据库的标识
实例标识:INSTANCE_NAME、INSTANCE_NUMBER(RAC 中)
数据库标识:DB_NAME、DB_UNIQUE_NAME、DBID
-- 实例信息
SELECT instance_name, instance_number, host_name
FROM v$instance;
-- 数据库信息
SELECT name, db_unique_name, dbid, created,
log_mode, open_mode, database_role
FROM v$database;
5. RAC 中多实例协作
5.1 Cache Fusion
RAC 中多个实例的 buffer cache 通过私有网络同步[2]:
Node 1 请求读 block X(已在 Node 2 缓存为脏块):
1. Node 1 向 Node 2 发送请求
2. Node 2 将 block X 通过 private network 发送给 Node 1
3. Node 1 收到后缓存该块
4. 若有锁冲突,通过 LMD 进程协调
5.2 RAC 后台进程
| 进程 | 作用 |
|---|---|
| LMON | Lock Monitor,监控集群锁 |
| LMD | Lock Daemon,处理锁请求 |
| LMS | Lock Manager Server,传递数据块 |
| LCK | Lock Process,非 cache 资源锁 |
6. 常见坑与排错
6.1 误以为关闭实例就是删除数据库
澄清:关闭实例后,数据库文件仍然存在。重启实例后,数据库重新可用。
6.2 DB_NAME 与 INSTANCE_NAME 必须匹配
# /etc/oratab 示例
orcl:/u01/app/oracle/product/19.3.0/dbhome_1:N
如果不匹配,启动会报 ORA-01102: cannot mount database in EXCLUSIVE mode。
6.3 RAC 中实例名相同导致冲突
# 每个节点实例名应不同
# 节点1: orcl1
# 节点2: orcl2
7. 最佳实践
- RAC 实例命名规范:
<db_name><node_number>,如orcl1、orcl2 - Data Guard 中 DB_UNIQUE_NAME 必须不同:主备库分别用
orcl_pri、orcl_std - 参数文件统一管理:RAC 使用 ASM 中的共享 SPFILE
- 监控实例状态:定期检查
v$instance - 保留 DBID 信息:用于 RMAN 恢复
8. 参考资料
[1] Oracle Database Concepts 19c, “Database Instances” https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/database-instances.html
[2] Oracle Real Application Clusters Administration and Deployment Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/racad/