Oracle 数据库文件类型全解
Oracle 数据库文件类型全解
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
Oracle 数据库由多种物理文件组成,每类文件承担不同职责[1]:
| 文件类型 | 必需 | 作用 | 多路复用 |
|---|---|---|---|
| 数据文件(Data File) | 是 | 存储表/索引数据 | 否 |
| 控制文件(Control File) | 是 | 物理结构元数据 | 推荐 |
| 在线 Redo Log | 是 | 记录变更,用于恢复 | 推荐 |
| 归档 Redo Log | 否 | Redo Log 历史副本 | 推荐 |
| 参数文件(PFILE/SPFILE) | 是 | 实例启动配置 | 否 |
| 密码文件(orapwd) | 否 | SYSDBA 认证 | 否 |
| 警报日志(alert.log) | 否 | 诊断信息 | 否 |
| 跟踪文件(.trc) | 否 | 错误诊断 | 否 |
2. 数据文件(Data File)
2.1 作用
存储表、索引、Undo 等段数据,是数据库的主体[1]。
2.2 类型
| 类型 | 说明 |
|---|---|
| 普通数据文件 | 存储业务数据 |
| 临时数据文件 | 临时段,排序/哈希用 |
| Undo 数据文件 | Undo 段,事务回滚用 |
2.3 查看
-- 普通数据文件
SELECT file#, name, status, bytes/1024/1024 AS mb,
autoextensible, maxbytes/1024/1024 AS max_mb
FROM v$datafile;
-- 临时数据文件
SELECT file#, name, status, bytes/1024/1024 AS mb
FROM v$tempfile;
-- 文件头信息(含 SCN)
SELECT file#, name, checkpoint_change#, status
FROM v$datafile_header;
2.4 自动扩展配置
-- 启用自动扩展
ALTER DATABASE DATAFILE '/u01/oradata/orcl/users01.dbf'
AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;
-- 关闭自动扩展
ALTER DATABASE DATAFILE '/u01/oradata/orcl/users01.dbf'
AUTOEXTEND OFF;
-- 调整文件大小
ALTER DATABASE DATAFILE '/u01/oradata/orcl/users01.dbf'
RESIZE 2G;
3. 控制文件(Control File)
3.1 作用
二进制文件,记录数据库物理结构元数据[2]:
- 数据库名称与 DBID
- 数据文件、Redo Log 文件位置
- 数据库字符集
- RMAN 备份信息
- 检查点 SCN
3.2 多路复用
-- 查看当前控制文件
SELECT name, status FROM v$controlfile;
-- 查看参数
SHOW PARAMETER control_files;
-- 增加多路复用
ALTER SYSTEM SET control_files=(
'/u01/oradata/orcl/control01.ctl',
'/u02/oradata/orcl/control02.ctl',
'/u03/oradata/orcl/control03.ctl'
) SCOPE=SPFILE;
-- 关闭数据库
SHUTDOWN IMMEDIATE;
-- 复制控制文件到新位置
! cp /u01/oradata/orcl/control01.ctl /u03/oradata/orcl/control03.ctl
-- 启动
STARTUP;
详细操作见:Oracle 控制文件深度解析。
4. 在线 Redo Log
4.1 作用
记录所有数据变更,用于实例恢复和介质恢复。
4.2 结构
Redo Log Group 1: [member 1, member 2] ← 多路复用
Redo Log Group 2: [member 1, member 2]
Redo Log Group 3: [member 1, member 2]
↑
循环使用
4.3 查看
SELECT group#, thread#, sequence#, bytes/1024/1024 AS mb,
members, status, archived
FROM v$log;
SELECT group#, member, status
FROM v$logfile;
详细内容见:Oracle 重做日志 Redo Log 机制详解。
5. 归档 Redo Log
5.1 作用
Redo Log 切换后的历史副本,用于:
- 介质恢复
- Data Guard 同步
- LogMiner 分析
5.2 配置
-- 查看归档模式
ARCHIVE LOG LIST;
-- 或
SELECT log_mode FROM v$database;
-- 启用归档模式(需 MOUNT 状态)
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
-- 配置归档目的地
ALTER SYSTEM SET log_archive_dest_1='LOCATION=/u02/archive' SCOPE=BOTH;
ALTER SYSTEM SET log_archive_format='%t_%s_%r.dbf' SCOPE=SPFILE;
详细内容见:Oracle 归档日志 Archive Log 与归档模式。
6. 参数文件(PFILE/SPFILE)
6.1 作用
实例启动时读取,定义 SGA 大小、控制文件位置等关键参数。
6.2 查找顺序
1. spfile<SID>.ora (首选)
2. spfile.ora
3. init<SID>.ora
详细内容见:Oracle 参数文件 PFILE 与 SPFILE 详解。
7. 密码文件(orapwd)
7.1 作用
存储 SYSDBA/SYSOPER 用户密码,用于操作系统层认证之外的远程认证。
7.2 创建
# 创建密码文件
orapwd file=$ORACLE_HOME/dbs/orapworcl
password=******
entries=10
format=12
# 参数说明:
# file: 文件路径
# password: ****** 密码
# entries: 允许的 SYSDBA 用户数
# format: 12(推荐,支持多租户)
7.3 查看
-- 查看密码文件中的用户
SELECT * FROM v$pwfile_users;
-- 查看密码文件位置(19c+)
SHOW PARAMETER remote_login_passwordfile;
-- NONE: 不使用密码文件
-- EXCLUSIVE: 私有使用(默认)
-- SHARED: 共享(RAC 多实例共用)
8. 警报日志(alert.log)
8.1 作用
记录数据库关键事件,是 DBA 排错的首要信息源。
8.2 位置
-- 查找警报日志位置
SHOW PARAMETER diagnostic_dest;
-- 警报日志路径:
-- $diagnostic_dest/diag/rdbms/<db_unique_name>/<sid>/trace/alert_<sid>.log
8.3 关键事件
警报日志记录:
- 启动/关闭事件
- 检查点信息
- 日志切换
- 错误(ORA- 错误)
- 参数修改
- 表空间/数据文件变更
- RMAN 操作
# 监控警报日志
tail -f $ORACLE_BASE/diag/rdbms/orcl/orcl/trace/alert_orcl.log
# 提取关键错误
grep "ORA-" alert_orcl.log | tail -50
9. 跟踪文件(.trc)
9.1 作用
记录进程的详细诊断信息,用于深度排错。
9.2 类型
| 类型 | 触发 | 位置 |
|---|---|---|
| 后台进程跟踪 | 自动 | trace 目录 |
| 服务器进程跟踪 | 自动/手动 | trace 目录 |
| 用户跟踪 | ALTER SESSION SET SQL_TRACE | trace 目录 |
9.3 启用
-- 启用会话级 SQL 跟踪
ALTER SESSION SET SQL_TRACE=TRUE;
-- 或使用 DBMS_MONITOR
EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE;
-- 查找跟踪文件
SELECT value FROM v$diag_info WHERE name='Default Trace File';
10. OMF(Oracle Managed Files)
10.1 概念
OMF 让 Oracle 自动管理数据文件、Redo Log、控制文件的命名和位置。
10.2 配置
-- 启用 OMF
ALTER SYSTEM SET db_create_file_dest='/u01/oradata' SCOPE=BOTH;
ALTER SYSTEM SET db_create_online_log_dest_1='/u01/oradata' SCOPE=BOTH;
ALTER SYSTEM SET db_create_online_log_dest_2='/u02/oradata' SCOPE=BOTH;
ALTER SYSTEM SET db_recovery_file_dest='/u03/fra' SCOPE=BOTH;
ALTER SYSTEM SET db_recovery_file_dest_size=20G SCOPE=BOTH;
-- 创建表空间(自动命名数据文件)
CREATE TABLESPACE omf_ts;
11. 其他文件
11.1 Block Change Tracking File
加速 RMAN 增量备份:
-- 启用
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING
USING FILE '/u01/oradata/orcl/bct.ctf';
-- 查看
SELECT filename, status, bytes FROM v$block_change_tracking;
11.2 Flashback Log
Flashback Database 用的日志:
-- 启用 Flashback Database
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE FLASHBACK ON;
ALTER DATABASE OPEN;
-- 查看
SELECT flashback_on, flashback_size, retention_target
FROM v$database;
11.3 Wallet 文件
TDE 透明数据加密的钱包:
# 路径:$ORACLE_BASE/admin/<db>/wallet
12. 常见坑与排错
12.1 数据文件丢失
现象:ORA-01157: cannot identify/lock data file。
修复:
-- 1. 查看丢失文件
SELECT file#, name, status FROM v$datafile;
-- 2. 离线丢失文件
ALTER DATABASE DATAFILE 5 OFFLINE DROP;
-- 3. 打开数据库
ALTER DATABASE OPEN;
-- 4. 从备份恢复
RMAN> RESTORE DATAFILE 5;
RMAN> RECOVER DATAFILE 5;
-- 5. 在线
ALTER DATABASE DATAFILE 5 ONLINE;
12.2 Redo Log 丢失
现象:ORA-00312: online log 1 thread 1: '/u01/redo01.log'。
修复:
-- 如果是 INACTIVE 状态的 Redo Log
ALTER DATABASE CLEAR LOGFILE GROUP 1;
-- 如果是 ACTIVE 状态
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 1;
12.3 密码文件丢失
修复:
# 重新创建密码文件
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID \
password=****** entries=10 format=12
13. 最佳实践
- 控制文件多路复用:至少 3 份,分布在不同磁盘
- Redo Log 多路复用:每组至少 2 个 member
- 启用归档模式:保证可恢复性
- 使用 OMF:简化文件管理
- 定期备份 SPFILE 和控制文件:RMAN 自动备份
- 监控警报日志:定期检查 ORA- 错误
- 合理规划 FRA:闪回区大小要充足
14. 参考资料
[1] Oracle Database Concepts 19c, “Physical Database Structures” https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/physical-database-structures.html
[2] Oracle Database Administrator’s Guide 19c, “Managing Control Files” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/managing-control-files.html